Cuda 什么';图块中的线和扭曲(32条线)之间的区别是什么?

Cuda 什么';图块中的线和扭曲(32条线)之间的区别是什么?,cuda,Cuda,我已经为字符串匹配测试编写了一个程序,用于测试与cpu的性能 我只是通过调用内核,一个块包含一个线程,执行时间是430ms,然后我使用一个块两个线程调用内核,执行时间是303ms,最后,我通过调用内核。首先要指出的是,GPU需要数百或数千个活动线程来隐藏体系结构固有的高延迟,并充分利用可用的算术容量和内存带宽。在一个或两个块中使用一个或两个线程对代码进行基准测试完全是浪费时间 第二点是不存在“块中的线程”这样的东西。线程基本上是以32个线程的扭曲执行的。块由1个或多个扭曲组成,网格由1个或多个块

我已经为字符串匹配测试编写了一个程序,用于测试与cpu的性能


我只是通过
调用内核,一个块包含一个线程,执行时间是430ms,然后我使用一个块两个线程
调用内核,执行时间是303ms,最后,我通过
调用内核。首先要指出的是,GPU需要数百或数千个活动线程来隐藏体系结构固有的高延迟,并充分利用可用的算术容量和内存带宽。在一个或两个块中使用一个或两个线程对代码进行基准测试完全是浪费时间

第二点是不存在“块中的线程”这样的东西。线程基本上是以32个线程的扭曲执行的。块由1个或多个扭曲组成,网格由1个或多个块组成

当您启动包含单个块和一个线程的栅格时,您将启动1个扭曲。此扭曲包含31条被遮罩的“虚拟”线程和一条活动线程。如果启动带有两个线程的单个块,则仍会启动1个扭曲,但现在单个扭曲包含2个活动线程

启动两个块(每个块包含一个线程)时,会产生两个扭曲,每个扭曲包含一个活动线程。因为所有的调度和执行都是在每个扭曲的基础上完成的,所以您现在有两个独立的实体(扭曲),硬件可以独立地调度和执行它们。这允许更多的延迟隐藏和更少的指令管道暂停,因此代码运行速度更快

因此TLDR的答案是1个块=1个扭曲,2个块=2个扭曲,后者不如前者次优