-msoft-float 問題

我們生活周遭存在太多太多的 embedded system ,過去 embedded system 有專屬的 OS,現在 linux 也可以應用在嵌入式環境,不過本版將廣泛討論所有嵌入式系統不只 linux 喔,歡迎有這方面經驗或有興趣的朋友一同進來討論。

版主: chester

-msoft-float 問題

文章xxppxx » 週三 6月 20, 2007 10:29 am

大家好
我目前使用的版子是IXP425
使用snapgear套件,arm-linux-gcc 3.3.2
把Asterisk移植到版子上,目前大致上都已經ok了
但是在執行時發現Asterisk在執行時有使用到大量的浮點運算
在效能上非常的差
發現在Makeflie裡面有個-msoft-float參數是沒有被引用
後來我使用這個參數再做cross compiler卻一直無法成功
一直出現一堆下面的錯誤
/usr/local/lib/gcc-lib/arm-linux/3.3.2/../../../../arm-linux/bin/ld: ERROR: /usr/local/lib/gcc-lib/arm-linux/3.3.2/be/libgcc.a(_dvmd_lnx.o) uses hardware FP, whereas asterisk uses software FP
File in wrong format: failed to merge target specific data of file /usr/local/lib/gcc-lib/arm-linux/3.3.2/be/libgcc.a(_dvmd_lnx.o)
/usr/local/lib/gcc-lib/arm-linux/3.3.2/../../../../arm-linux/bin/ld: ERROR: /usr/local/lib/gcc-lib/arm-linux/3.3.2/be/libgcc.a(_ashldi3.o) uses hardware FP, whereas asterisk uses software FP
File in wrong format: failed to merge target specific data of file /usr/local/lib/gcc-lib/arm-linux/3.3.2/be/libgcc.a(_ashldi3.o)
/usr/local/lib/gcc-lib/arm-linux/3.3.2/../../../../arm-linux/bin/ld: ERROR: /usr/local/lib/gcc-lib/arm-linux/3.3.2/be/libgcc.a(_fixunsdfsi.o) uses hardware FP, whereas asterisk uses software FP
有上網去查一些資訊
網路上的人是說要使用arm-linux-gcc 3.4以上的版本
才有使用新的軟體浮點運算lib
所以我需要使用新的gcc才能使用-msoft-float這個參數嗎???
3.3.2沒有這個參數可以使用嗎???
請指導一下我該怎麼做呢???謝謝....
xxppxx
可愛的小學生
可愛的小學生
 
文章: 12
註冊時間: 週二 5月 23, 2006 11:23 am

文章livability » 週六 6月 23, 2007 12:27 am

應該不用一定要 3.4 以上版本 gcc
但是 toolchain 要 softfloat 到是真的

找 softfloat FP 的 toolchain 或是自己做 toolchain

祝好運
livability
可愛的小學生
可愛的小學生
 
文章: 2
註冊時間: 週六 6月 23, 2007 12:22 am

文章leeg » 週日 6月 24, 2007 12:23 am

snapgear的toolchain是有支援soft & hard-float的.
你可以在toolchain的目錄下搜尋即可

上述的錯誤訊息其實只是app與lib不相容罷了...
另外, -msoft-float並不會讓你的系統有更好的浮點運算能力.
唯一的辦法是使用支援EABI的toolchain.
leeg
可愛的小學生
可愛的小學生
 
文章: 6
註冊時間: 週日 6月 24, 2007 12:15 am

文章xxppxx » 週三 6月 27, 2007 10:43 am

了解....感謝。
其實我是因為在做富利葉轉換發生效能上的問題
做DSP的浮點運算發生的問題
我在google上搜尋到一個使用組合語言寫出來的運算方法
但是他似乎是針對使用x86系統所寫出來的,如下:

static __inline__ void _dtmf_goertzel_update(goertzel_state_t *s,
float x[],
int samples)
{
int n;
float v;
int i;
float vv[16];

vv[4] = s[0].v2;
vv[5] = s[1].v2;
vv[6] = s[2].v2;
vv[7] = s[3].v2;
vv[8] = s[0].v3;
vv[9] = s[1].v3;
vv[10] = s[2].v3;
vv[11] = s[3].v3;
vv[12] = s[0].fac;
vv[13] = s[1].fac;
vv[14] = s[2].fac;
vv[15] = s[3].fac;

//v1 = s->v2;
//s->v2 = s->v3;
//s->v3 = s->fac*s->v2 - v1 + x[0];

__asm__ __volatile__ (
" femms;\n"

" movq 16(%%edx),%%mm2;\n"
" movq 24(%%edx),%%mm3;\n"
" movq 32(%%edx),%%mm4;\n"
" movq 40(%%edx),%%mm5;\n"
" movq 48(%%edx),%%mm6;\n"
" movq 56(%%edx),%%mm7;\n"

" jmp 1f;\n"
" .align 32;\n"

" 1: ;\n"
" prefetch (%%eax);\n"
" movq %%mm3,%%mm1;\n"
" movq %%mm2,%%mm0;\n"
" movq %%mm5,%%mm3;\n"
" movq %%mm4,%%mm2;\n"

" pfmul %%mm7,%%mm5;\n"
" pfmul %%mm6,%%mm4;\n"
" pfsub %%mm1,%%mm5;\n"
" pfsub %%mm0,%%mm4;\n"

" movq (%%eax),%%mm0;\n"
" movq %%mm0,%%mm1;\n"
" punpckldq %%mm0,%%mm1;\n"
" add $4,%%eax;\n"
" pfadd %%mm1,%%mm5;\n"
" pfadd %%mm1,%%mm4;\n"

" dec %%ecx;\n"

" jnz 1b;\n"

" movq %%mm2,16(%%edx);\n"
" movq %%mm3,24(%%edx);\n"
" movq %%mm4,32(%%edx);\n"
" movq %%mm5,40(%%edx);\n"

" femms;\n"
:
: "c" (samples), "a" (x), "d" (vv)
: "memory", "eax", "ecx");

s[0].v2 = vv[4];
s[1].v2 = vv[5];
s[2].v2 = vv[6];
s[3].v2 = vv[7];
s[0].v3 = vv[8];
s[1].v3 = vv[9];
s[2].v3 = vv[10];
s[3].v3 = vv[11];
}

跟我要使用的富立葉轉換程式是一樣的結果,不過他針對x86所做的
而我用的是IXP425 的版子,沒辦法使用.....
是不是可以修改成IXP425的platform呢???
可以的話我就要來研究組言語言了.....
不過還是需要各位大大評估可行性.....免得做白工= =
謝謝....
xxppxx
可愛的小學生
可愛的小學生
 
文章: 12
註冊時間: 週二 5月 23, 2006 11:23 am

文章leeg » 週四 6月 28, 2007 9:57 pm

你可以考慮使用Intel Performance Primitives.
http://www.intel.com/cd/software/produc ... 302910.htm
這套函式庫提供許多程式設計時所需的工具函式 (video, image, audio coding.signal processing and so on.)
支援的平台除了所有的Intel CPU以外, 還包含了IXP4XX
如果使用後還覺得performance不好...
就得考慮是不是該換CPU...
leeg
可愛的小學生
可愛的小學生
 
文章: 6
註冊時間: 週日 6月 24, 2007 12:15 am

文章leeg » 週四 6月 28, 2007 10:00 pm

最重要的事情竟然忘記提了...
這套library是有免費版的.
只要你不是使用於商業用途....
leeg
可愛的小學生
可愛的小學生
 
文章: 6
註冊時間: 週日 6月 24, 2007 12:15 am


回到 embedded system

誰在線上

正在瀏覽這個版面的使用者:沒有註冊會員 和 1 位訪客