帮我理解cuda
我在使用cuda理解NVIDIA gpu体系结构中的线程时遇到一些问题 请任何人澄清这些信息: 8800 gpu有16条短信,每条短信有8个SP。所以我们有128个SP 我正在观看斯坦福大学的视频演示,它说每个SP目前都能运行96个线程。这是否意味着它(SP)可以同时运行96/32=3个扭曲 此外,由于每个SP可以运行96个线程,并且每个SM中有8个SP。这是否意味着每个SM可以同时运行96*8=768个线程??但是,如果每个SM一次可以运行一个块,并且一个块中的最大线程数是512,那么并发运行768个线程并具有最大512个线程的目的是什么帮我理解cuda,cuda,gpu,parallel-processing,Cuda,Gpu,Parallel Processing,我在使用cuda理解NVIDIA gpu体系结构中的线程时遇到一些问题 请任何人澄清这些信息: 8800 gpu有16条短信,每条短信有8个SP。所以我们有128个SP 我正在观看斯坦福大学的视频演示,它说每个SP目前都能运行96个线程。这是否意味着它(SP)可以同时运行96/32=3个扭曲 此外,由于每个SP可以运行96个线程,并且每个SM中有8个SP。这是否意味着每个SM可以同时运行96*8=768个线程??但是,如果每个SM一次可以运行一个块,并且一个块中的最大线程数是512,那么并发运行
一个更普遍的问题是:如何将块、线程和扭曲分布到SMs和SP?我了解到,每个SM一次执行一个块,块中的线程被分为多个线程(32个线程),SP执行多个线程。一开始有点让人困惑,但知道每个SP执行类似于4路SMT的操作很有帮助-它在4个线程中循环,每个时钟发出一条指令,每条指令上有4个周期的延迟。这就是为什么在8个SP上运行每个扭曲32个线程的原因 不要用经纱、方块、线段等来浏览所有的东西,我会向你推荐,这种问题经常出现,已经有一些很好的解释。 < P>你应该在英伟达网站上查看一下,你可以参加现场会议或查看预先录制的会议。下面是一个快速的概述,但我强烈建议您观看网络研讨会,它们将非常有帮助,因为您可以看到图表并同时对其进行解释 当您在GPU上执行函数(内核)时,它将作为线程块的网格执行
- 线程是最精细的粒度,每个线程在块中都有一个唯一的标识符(threadIdx),用于选择要对哪些数据进行操作。线程可以有相对大量的寄存器,也可以有一个称为本地内存的私有内存区域,用于寄存器文件溢出和任何大型自动变量
- 块是一组在批处理中一起执行的线程。这种粒度级别的主要原因是块中的线程可以通过使用快速共享内存进行通信进行协作。每个块都有一个唯一的标识符(blockIdx),它与threadIdx一起用于选择数据
- 网格是一起执行GPU操作的一组块
- 一条经线内的线被绑定在一起,如果一条经线内的一条线沿着if-else块的“if”侧走,而其他的线沿着“else”侧走,那么实际上所有32条线都会沿着两边走。从功能上来说,没有问题,那些不应该走分支的线被禁用,因此您将始终得到正确的结果,但如果双方都是多头,那么表现惩罚就很重要
- 扭曲内的线程(实际上是半扭曲,但如果你对扭曲正确,那么你在下一代上也是安全的)从内存一起获取数据,因此,如果您可以确保所有线程获取同一“段”内的数据,那么您将只支付一个内存事务,如果它们都从随机地址获取数据,那么您将支付32个内存事务。有关此方面的详细信息,请参阅演示文稿,但仅当您准备好时
- 扭曲内的线程(在当前GPU上也是半扭曲)一起访问共享内存,如果您不小心,就会出现“银行冲突”,线程必须排在后面才能访问内存
很抱歉让人脑筋急转弯,请观看网络研讨会-这会更容易!希望我在回答中已经解释过,但重要的一点是,每个SM在任何给定时间都可以执行多个块。此外,数字96是一条红鲱鱼,不必担心每个SP的线程数,只需担心每个SM的线程数,并让硬件处理fi详细信息。@Tom:Sever