是一種硬體平台相依的語言,
感覺跟寫組語差不了多少,
記憶體放哪、記憶體讀取方式、
跟主記憶體溝通方式、使用的是暫存器還是用哪四種什麼存、
如何共享記憶體、同步、解決浮點數誤差、
跟記憶體管理、動態分配五種記憶體、
根據顯卡來最佳化執行策略、
要開多少thread、要用幾個暫存器、
總之,會那麼麻煩一切都是為了快,gpu通常只有1gz,
暫存器32bits總共有16mb~64mb大,
沒有L1, L2 cache, 沒有branch, 詳細請看高級計算機結構。

以下分析一下問題種類:
一.完全平行
此種問題,只需要連自己的id是多少都不用知道,只要算就對了。
或是只要給定目前是第幾個執行的thread就好的也算。
這種問題的優化效率一般來說是100倍~25000倍以上,
這通常是可以發揮gpu的全力。
二.可用加法律分解的問題
像是矩陣相乘、10000個數全部加起來這種,
差距比較是一個固定比。
簡單來說就是
(a+b)+(c+d) = (a+d) + (b+c)
(Ma*Mb)*Mc*Md = Ma*(Mb*Mc)*Md
這種問題的優化效率是2^x
就是問題愈大gpu與cpu差距愈明顯,
值得一提的是這種差距比例gpu一定不會比第一種還好。
三.幾乎不可能平行的相依性問題
ex. 動態規畫, 以上一個亂數為基礎的亂數產生器... ...

讓地獄深紅的天亮 發表在 痞客邦 PIXNET 留言(0) 人氣()