Estou otimizando um código em C para plataforma ARM utilizando o gprof. Nele observei duas "funções" que estavam utilizando parte consideravel do processamento: a mulfd e a addfd. A primeira coisa que fiz foi adicionar o comando -mhard-float na linha de compilação do arquivo makefile. Porém ao dar o comando make, obtive o seguinte erro:
messages.c:1:sorry, unimplemented: -mfloat-abi=hard and VFP
Login.c:1:sorry, unimplemented: -mfloat-abi=hard and VFP
Main.c:1:sorry, unimplemented: -mfloat-abi=hard and VFP
RBC.c:1:sorry, unimplemented: -mfloat-abi=hard and VFP
........................................................................... ........................
........................................................................... ........................
make: *** [all] Error 1.
Sua plataforma alvo (processador ARM em questão) possui coprocessador de
ponto flutuante?
Acho que pode ser:
1) o processador alvo não possui ponto flutuante em HW e você está forçando
a opção hard
2) o processador possui hw de ponto flutuante mas seu toolchain não suporta
att,
--*
Josenivaldo Benito Jr.*
*PU2LBD*
*Por Aurélio Buarque de Hollanda, elite, do francês élite, significa “o
que há de melhor em uma sociedade, minoria prestigiada, constituída pelos
indivíduos mais aptos”.
> Estou otimizando um código em C para plataforma ARM utilizando o gprof.
> Nele observei duas "funções" que estavam utilizando parte consideravel do
> processamento: a mulfd e a addfd. A primeira coisa que fiz foi adicionar o
> comando -mhard-float na linha de compilação do arquivo makefile. Porém ao
> dar o comando make, obtive o seguinte erro:
> messages.c:1:sorry, unimplemented: -mfloat-abi=hard and VFP
> Login.c:1:sorry, unimplemented: -mfloat-abi=hard and VFP
> Main.c:1:sorry, unimplemented: -mfloat-abi=hard and VFP
> RBC.c:1:sorry, unimplemented: -mfloat-abi=hard and VFP
"Using -mfloat-abi=hard with VFP coprocessors is not supported. Use
-mfloat-abi=softfp with the appropriate -mfpu option to allow the
compiler to generate code that makes use of the hardware floating-point
capabilities for these CPUs."
Em outras palavras hard e VFP não funcionam juntos.
--*
Josenivaldo Benito Jr.*
*PU2LBD*
*Por Aurélio Buarque de Hollanda, elite, do francês élite, significa “o
que há de melhor em uma sociedade, minoria prestigiada, constituída pelos
indivíduos mais aptos”.
Qual o compilador (toolchain) que voce esta usando?
Qual processador target?
Nao vai ganhar quase nada usando a hardfp ABI.
Voce pode usar o VFP usando softfp ABI mesmo.
Ou entao tem como usar o NEON que eh mais rapido que o VFP para float de
precisao simples.
Quando me responder as perguntas e eu tiver no meu computador vou ver os
parametros exatos.
Alem disso, tem como mandar o GCC gerar codiso assembly para ver quais
instrucoes ele ta gerando (soft, VFP, ou NEON).
On Aug 10, 2012 11:18 AM, "D.Possamai" <deividepossa...@gmail.com> wrote:
> Estou otimizando um código em C para plataforma ARM utilizando o gprof.
> Nele observei duas "funções" que estavam utilizando parte consideravel do
> processamento: a mulfd e a addfd. A primeira coisa que fiz foi adicionar o
> comando -mhard-float na linha de compilação do arquivo makefile. Porém ao
> dar o comando make, obtive o seguinte erro:
> messages.c:1:sorry, unimplemented: -mfloat-abi=hard and VFP
> Login.c:1:sorry, unimplemented: -mfloat-abi=hard and VFP
> Main.c:1:sorry, unimplemented: -mfloat-abi=hard and VFP
> RBC.c:1:sorry, unimplemented: -mfloat-abi=hard and VFP
> Qual o compilador (toolchain) que voce esta usando?
> Qual processador target?
> Nao vai ganhar quase nada usando a hardfp ABI.
> Voce pode usar o VFP usando softfp ABI mesmo.
> Ou entao tem como usar o NEON que eh mais rapido que o VFP para float de
> precisao simples.
> Quando me responder as perguntas e eu tiver no meu computador vou ver os
> parametros exatos.
> Alem disso, tem como mandar o GCC gerar codiso assembly para ver quais
> instrucoes ele ta gerando (soft, VFP, ou NEON).
> On Aug 10, 2012 11:18 AM, "D.Possamai" <deividepossa...@gmail.com> wrote:
>> Ola Pessoal,
>> Estou otimizando um código em C para plataforma ARM utilizando o gprof.
>> Nele observei duas "funções" que estavam utilizando parte consideravel do
>> processamento: a mulfd e a addfd. A primeira coisa que fiz foi adicionar o
>> comando -mhard-float na linha de compilação do arquivo makefile. Porém
>> ao dar o comando make, obtive o seguinte erro:
>> messages.c:1:sorry, unimplemented: -mfloat-abi=hard and VFP
>> Login.c:1:sorry, unimplemented: -mfloat-abi=hard and VFP
>> Main.c:1:sorry, unimplemented: -mfloat-abi=hard and VFP
>> RBC.c:1:sorry, unimplemented: -mfloat-abi=hard and VFP
Olá Marco Casaroli, eu utilizei um dos comandos que vc mencionou (-mfloat-abi=softfp) na flag do makefile e a compilação ocorreu com sucesso. Fiz o gprof do programa e as funções que eu mencionei anteriormente já não estão mais utilizando parte do processamento.
Se quiser, creio que consegue ganhar mais performance ainda utilizando o
NEON (-mfpu=neon), porém, só vai ganhar alguma coisa com operacoes de ponto
flutuante com precisão simples (float e não double) e em alguns casos bem
específicos. Além disso, o NEON não é 100% IEEE 754, o que felizmente não
faz diferença na maioria dos casos.
> Olá Marco Casaroli,
> eu utilizei um dos comandos que vc mencionou (-mfloat-abi=softfp) na flag
> do makefile e a compilação ocorreu com sucesso. Fiz o gprof do programa e
> as funções que eu mencionei anteriormente já não estão mais utilizando
> parte do processamento.