OpenHero 求救CUDA的几点困惑

hgqsky 2008-12-13 12:42:43
开勇哥:(:)
   你好.久闻你的大名.
   我碰到如下问题:
1:一个BLOCK中有16个THREADS{也就是半个WARP块}是活动的,是否是说在GPU上的一个multiprocessor上运行了16个线程,可一个multiprocessor上只有8个processor(一个processor上在同一时间上只能运行一个thread),
总共也只能运行8*1=8个threads.这样就搞不清楚了.
2.假如是kernel<<<BLOCK_NAME,THREAD_NUM>>>中有BLODK_NUM*THREAD_NUM=8192,那它实际在同一时间在GPU上运行了多少个,是16*BLOCK_NAME吗,然后在一个thread等数据时,processor才执行下一个thread,看起来就像8912个threads同时运行.我分析的对吗?
3.在一个kernel中的怎么对一个二维数组用多线程并行方式的用cuda_MallocPitch()或其他命令对它赋值,赋值完后怎么在下一个kernel中引用它的元素.我看了下,很复杂哦.你能简单讲讲(最好附个例子).
 感激不尽,打扰你了.
...全文
162 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
hgqsky 2008-12-13
  • 打赏
  • 举报
回复
Thank you very much!!
我会按照你所有的,加紧时间,努力学习好CUDA并将它应用到我的专业中!
hgqsky 2008-12-13
  • 打赏
  • 举报
回复
Thank you very much!!
我会按照你所有的,加紧时间,努力学习好CUDA并将它应用到我的专业中!
OpenHero 2008-12-13
  • 打赏
  • 举报
回复
1.最好了解一下gpu的体系结构,知道他的处理的过程,一条命令的启动是32个thread,组织成了一个warp,但是在内存访问的时候,还有在执行的过程中,又由于sp的执行时钟的限制,还有sp本身只有8个,所以其实是每次执行了8个,这里的执行是说的alu这样的运算执行,是4个周期执行一次,但是不是所有的32个都一起执行,因为这32个有的是取内存,有的是在准备数据,4个周期过后,一起算起来就是32个为一个warp;内存存取的时候是按照16个thread为一组,这里就有了half-warp;
2.这个得看你的gpu上有多少个sm,然后每一个block占用多少资源;一个sm上可以同时分配8个blocks,但是这前提是8个block是资源都够用,这样你可以分一下,就知道一次可以执行几个;
3.pitch方式其实是对齐访问方式,就是把数据都是按照对齐的方式,取出来,这对齐是从内存的0x00000000,位置开始的,所以有的时候,就会传回来一个pitch的offset,这个就是偏移量,这个得理解内存对齐;:)

581

社区成员

发帖
与我相关
我的任务
社区描述
CUDA™是一种由NVIDIA推出的通用并行计算架构,该架构使GPU能够解决复杂的计算问题。 它包含了CUDA指令集架构(ISA)以及GPU内部的并行计算引擎。
社区管理员
  • CUDA编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧