2008年6月19日 星期四

NVIDIA 發表配合 GT200 顯示晶片的 CUDA 2.0 beta 版

NVIDIA 發表了配合新的 GT200 顯示晶片的 CUDA 2.0 beta 版,可以在這裡取得。
GT200 顯示晶片是屬於 CUDA compute 1.3(之前 G80 系列是 1.0,而 G84/86/92 則是 1.1)。目前不清楚哪些顯示晶片會是 1.2。根據最新的 programming guide,1.2 新增的功能包括:
  • Shared memory 有 atomic 操作功能
  • Global memory 的 atomic 操作,增加 64 bits 運算(1.1 只有 32 bits)
  • 支援 warp vote
  • 每個 MP 暫存器數目加倍至 16,384 個
  • 每個 MP 同時可以進行的 warp 數目增加到 32 個(原為 24 個)
  • 每個 MP 同時可以進行的 thread 數目增加到 1024 個(原為 768 個)
1.3 新增的功能則很簡單,只有一樣:
  • 增加 double precision 的支援
在 shared memory 中的 atomic 操作,在某些應用是相當有用的。例如,在計算 histogram 的時候,如果每個 thread 要負責進行一個區塊的 histogram 計算,則因為在之前的 GPU 中,shared memory 並沒有 atomic 操作,所以會使得每個 thread 都需要有自己的 histogram 才行。但是這樣需要的記憶體量又太多,使得 thread 數目受限。NVIDIA 的 sample 中,是利用一些 trick(即每個 MP 同時只有 32 個 thread 在跑的這一點)來避免這個問題,但這樣的 trick 太過依賴裝置特性,並不是好的做法。而現在有了 shared memory 的 atomic 操作,就可以不需要使用這種 trick 了。
Warp vote 則是用來減少同一個 warp 中,因為不同的分支而造成 serialization 的問題。這是因為在 CUDA 中,同一個 warp 的各個 thread 如果有不同的條件分支結果,就會需要 serialize,造成速度上變慢。利用 warp vote,就可以強迫一個 warp 只有一種條件分支結果,以避免 serialization 出現。
另一個值得注意的就是 GT200 的 double precision 運算。根據 Programming Guide 的資料,double precision 的四則運算和平方根,完全符合 IEEE 754 的規範(single precision 的除法和平方根無法符合 754 規範的精確度,因為它是用乘上倒數的方式做的)。這對一些科學計算的應用會比較方便。Double precision 的加法、乘法、和 FMA 也支援 IEEE 754 規定的各種不同的 rounding mode(single precision 只支援 round-to-zero 和 round-to-nearest)。