Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/sharepoint/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cuda 这是一份声明;在给定SM上运行的所有线程都可以协作;对还是错?_Cuda_Gpu_Gpgpu - Fatal编程技术网

Cuda 这是一份声明;在给定SM上运行的所有线程都可以协作;对还是错?

Cuda 这是一份声明;在给定SM上运行的所有线程都可以协作;对还是错?,cuda,gpu,gpgpu,Cuda,Gpu,Gpgpu,在Udacity上的测验:线程和“并行编程简介”的块中,它询问“在给定SM上运行的所有线程都可以合作解决问题”这句话是真是假。答案是错误的,但我认为应该是正确的,因为: 它使用“可能”而不是“必须” 一些论文正在讨论块间GPU通信 我对它有什么误解吗?并非所有情况下都是这样 在协作线程的典型CUDA意义上,协作线程必须属于同一个块(以便能够使用诸如\uuuu syncthreads()和\uuuu共享内存之类的协作机制) 但是,SM可以包含同时执行的多个块 来自不同区块的线程,即使驻留在同一

在Udacity上的测验:线程和“并行编程简介”的块中,它询问“在给定SM上运行的所有线程都可以合作解决问题”这句话是真是假。答案是错误的,但我认为应该是正确的,因为:

  • 它使用“可能”而不是“必须”
  • 一些论文正在讨论块间GPU通信

我对它有什么误解吗?

并非所有情况下都是这样

在协作线程的典型CUDA意义上,协作线程必须属于同一个块(以便能够使用诸如
\uuuu syncthreads()
\uuuu共享内存之类的协作机制)

但是,SM可以包含同时执行的多个块


来自不同区块的线程,即使驻留在同一个SM上,也无法进行协作,这是典型的CUDA意义上的“协作线程”。

CUDA官方材料[1]提到了Robert Crovella在第8页中所说的:

  • 不同块中的线程无法协作

[1]

本文提出了块间GPU通信。在某些情况下,似乎“在给定SM上运行的所有线程都可以协作解决问题”,是吗?我已经定义了协作线程的含义。我认为这是CUDA线程的常用定义。根据我的定义,我相信我的答案是正确的,而且你引用的论文不允许来自不同块的线程通过
\uuuuu共享\uuuuuu
内存进行通信,因此我认为你的论文与我给出的定义没有任何关联。所有线程都可以通过全局内存相互通信(即使没有你的论文),因此一个替代定义可能适合你的观点。我不同意CUDA中普遍接受的“协作线程”的定义是正确的