2016-11-26

cuda 8.0正式版之前发布了,这周从玩游戏中抽空搭出来了基本的框架。

由于做游戏的时候已熟练使用shader,虽然cuda没用过,但很快上手了,写出来测了下有种确实能加速不少的预感?

#!/bin/sh
C:\>test_cuda.exe
GPU Device 0: "GeForce GTX 970" with compute capability 5.2

CUDA device [GeForce GTX 970]
  CUDA Capability Major/Minor version number:    5.2
  Total amount of global memory:                 3383/4096 MBytes (4294967296 bytes)
  (13) Multiprocessors, (128) CUDA Cores/MP:     1664 CUDA Cores
  GPU Max Clock rate:                            1253 MHz (1.25 GHz)
  Memory Clock rate:                             3505 Mhz
  Memory Bus Width:                              256-bit
  Memory Bandwidth:                              224.32 (GB/sec)

start copy data...
Added 409396 datas,  Total amount of global memory:                 3373/4096 MBytes
copy used time: 0.022
exec 409496 times float add: used time: 0.085
start clean cuda memory 0....
start clean cuda memory 1....
start clean cuda memory 2....

40w个float数据做加法总共0.1秒完成,包括发起进程,以及计算结果复制到内存。这么看的话ma计算时间非常值得期待,比之前能快多少呢?过几天写完它看看。 虽然用shader的时候就知道gpu计算能力很强,但shader那些东西本来就不会在cpu中计算,所以缺少比较没有直接的观感。

另外要抱怨在windows下这sdk有点难用,不知道是我的用法问题还是他的bug,thrust的vector各种工作不正常。

比如debug下调用device_vector::insert会报一堆警告,release没有,有点莫名。这还算好的。 再来是调用device_vector::resize会直接nsight跳出exception,妈蛋我还什么都没做呢?而且还看不到到底是什么异常。

最后放弃thrust的vector,全部cudamemcpy,神清气爽,不仅各种问题没了,代码也简洁了,有种蛋疼我之前在干嘛的感觉。

EDIT: 好吧,我把所有选项试下来知道resize报异常的原因了: 因为我在编译中加了 --default-stream per-thread ,去掉就好了。 但不知道为什么,因为我的代码有显示同步,不应该因为异步的原因异常。


回主页