Re: CUDA Matlab plug-in: AccelerEyes' Jacket已回收

看板MATLAB作者 (MSA-0011[Bst]PLAN303E)時間16年前 (2009/05/20 22:19), 編輯推噓0(000)
留言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
文章代碼(AID): #1A515NYD (MATLAB)
討論串 (同標題文章)
文章代碼(AID): #1A515NYD (MATLAB)