Re: CUDA Matlab plug-in: AccelerEyes' Jacket已回收
看板MATLAB作者yeahbo (MSA-0011[Bst]PLAN303E)時間16年前 (2009/05/20 22:19)推噓0(0推 0噓 0→)留言0則, 0人參與討論串7/10 (看更多)
今天很累,先回部分
※ 引述《Leon (Achilles)》之銘言:
: ※ 引述《yeahbo (MSA-0011[Bst]PLAN303E)》之銘言:
: : 浮點數運算有一套 IEEE 754 的標準來定義
: : 它的運算是實做在 cpu 或 gpu 的電路裡(為了不易混淆,使用小寫)
: : 不管是使用哪種程式語言都是一樣的
: No, I will not say that.
: 你可以很容易的在 google 中找到 matlab float point 運算上的問題.
: http://blogs.mathworks.com/loren/2008/05/20/another-lesson-in-floating-point/
: 這裡舉出了
: S = 0.24:0.02:0.46,
: find S == 0.34 returns an empty set 的例子.
請問,這些浮點數運算的問題
是"MATLAB"所造成的?
還是浮點數這個格式本身就存在的問題?
: : 其實我的測試裡
: : 是先用 cpu 執行 rand() 函數產生 A 和 B 兩個一樣大小的方陣
: : 而且每個 element 都是 double 浮點數
: : 再拿這兩個方陣丟給 cpu 和 gpu 運算,算式是 C = A + B (同理類推 - .* ./ *)
: : 所以無論是 cpu 還是 gpu,拿來比較的運算結果都是用同一筆數據運算出來的
: : 只是因為在這次的測試裡,gpu 只能計算 single 浮點數
: : 所以在把 A B 方陣傳給 gpu 時,同時也會把數據從 double 轉換成 single
: : 為了驗證 gpu 運算的正確性(因為聽說有可能算錯XD)
: : 也用 cpu 算同一筆數據轉換成 single 後的運算結果來比較
: : 而這張 Error 圖中
: : 實線是 sum[ abs( C_gpu_single - C_cpu_double )] / 方陣element數
: : 圓點是 sum[ abs( C_cpu_single - C_cpu_double )] / 方陣element數
這裡的 C_gpu_single 應該寫成 double( C_gpu_single )
C_cpu_single double( C_cpu_single )
: 這裡直得爭論.
: a / b , 如果 a,b 是不同的 data type, 會被強制轉換.
: 你何不看看是不是這方面的問題? 如果把 data 取在 [1,2] 會怎樣?
等我做完測試再來討論...
: : 而且實線跟圓點完全重合在一起,表示 gpu 沒有算錯(假設 cpu 是對的)
: : ./ 運算的誤差會較大,是因為除法會放大數值誤差,這可以接受
: : 但是,實線跟圓點"沒有"完全重合在一起,表示 gpu 出事了啊~~ <囧>
: 你的結論是錯的, 因為你不知道你 matlab 的 lib 是怎麼套的,
: 要下這個結論, 除非你能用比較低階的語言去直接控制 cpu / gpu
這只是浮點數的"加減乘除"耶...
如果只因為所謂的 Matlab 的 lib 就會得到不同的結果
為什麼我們還要用這個程式?
: : "同一筆數據" 由 cpu 和 gpu 算出不同的結果,這是不可接受的啊...
: : 從 Speed Up 結果顯示,2048 x 2048 方陣的 ./ 運算加速了 1500 倍
: : 但是相同大小的方陣,+ - .* 運算只加速了約 800 倍... = =+
: No, 這只差了兩倍, 很難下結論.
突然想到,這邊只看了 gpu vs cpu 加速的倍數
我忘了去看各個運算實際所花的時間,以及是否有搾乾系統的 computation power
也需要考慮除法到底是如何實做的...
: 你能畫出 speed / matrix dimension 的圖嘛?
請見本串第一篇
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 118.167.170.218
討論串 (同標題文章)
MATLAB 近期熱門文章
PTT數位生活區 即時熱門文章