我想基本上在c 語言上要作向量的運算應該都是用loop 來作,但我發現這樣寫的程式效率好低,我用loop 寫的程式跟matlab 用向量的方式寫的,同樣的演算法,只差在解ax=b上,因為需要大量的LU 分解,我用c 寫的,比matlab 慢好多。
上網查了資料,像p4 的sse2 指令集是不是可以拿來用(好像跟 SIMD有關),可以給我一些關於c 語言在使用sse2 及向量運算的資料跟建議嗎?
2006-08-12 19:23:31 · 2 個解答 · 發問者 hongda.yen 1 in 電腦與網際網路 ➔ 程式設計
C 雖是中階語言,但仍想避免程式師直接使用 ASM。
所以,C 用 SSE2 應該是〝不可能〞!
怎麼辦呢?靠 Compiler 求援!
SSE2 是 2000 提出的東東,所以,要新一點的 Compiler 才會支援。
像 Intel 出的 C Compiler 就有支援。
有的 Compiler 要在 Compiler 時加參數,如: -msse2
MatLab 的原始程式是世界級的高手寫的,而且是專精數學運算的程式高手。
像我們這種到處都會、卻啥都不懂的肉腳級〝高〞手,不要想去和他們比速度!
而,像LU分解這類矩陣運算,牽涉到準度、會不會把有解的算成沒解的...的問題,不光是速度!
那些高手,會用很簡單的方法,〝立刻〞判斷出要不要 partial/full pioviting。
您的〝博士〞研究方向要是與這無關,就不要想和他們比速度了!
若只是碩士或以下,放棄吧!
你要的是 LU 正確的答案,來幫助你真的要研究的東東的結果,不是嗎?
另外,我現在在研究的是矩陣內積速度的問題。才剛開始研究,恕不能多說。
只能告訴你:除非你要研究 LU 的速度,不然,不要太執著在上面!
找找看有沒有有支援 SSE2 的 Compiler ,比較簡單。
2006-08-12 22:02:18 · answer #1 · answered by ? 7 · 0⤊ 0⤋
用編譯語言速度比直譯語言慢,我可以很肯定的說你不需要用SSE,用了一樣慢
矩陣運算都有一些撇步
如果不得要領,計算是快不起來的
第一個想出來可能很難(Jacob說:博士級?)
後面依樣畫葫蘆實作出程式倒不難,高中生就夠了
你可以去sourceforge找一下矩陣運算的程式碼,說不定會挖到寶喔
2006-08-13 11:59:12 補充:
至於Jacob Lee說避免用組語,我覺得要補充一下
在許多情形下,用組語也不失為一種解決問題的好方法
只是要先衡量清楚原始碼的瓶頸何在才有意義
Jacob建議用Compiler的延伸功能,卻反對用組語
說老實話,我不覺得這樣在可讀性、可移植性方面有比inline assembly好到哪裡去
附帶一提,GCC內建有MMX、SSE、3DNow等延伸功能
你可以參考
http://gcc.gnu.org/onlinedocs/gcc-3.4.3/gcc/X86-Built_002din-Functions.html
2006-08-13 07:58:51 · answer #2 · answered by novus 6 · 0⤊ 0⤋