Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/128.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
C++ 如何使用';红色';和';原子';CUDA C和x2B中的PTX指令+;密码?_C++_Cuda_Atomic_Instruction Set_Ptx - Fatal编程技术网

C++ 如何使用';红色';和';原子';CUDA C和x2B中的PTX指令+;密码?

C++ 如何使用';红色';和';原子';CUDA C和x2B中的PTX指令+;密码?,c++,cuda,atomic,instruction-set,ptx,C++,Cuda,Atomic,Instruction Set,Ptx,描述了指令“atom”和“red”,它们执行原子和非原子还原。这对我来说是个新闻(至少在非原子减排方面)。。。我记得不久前学习过。这些指令是否以某种方式反映或包装在CUDA运行时API中?或者其他方式可以用C++代码访问而不必实际编写PTX代码? 这些指令是否以某种方式反映或包装在CUDA运行时API中?或者其他方式可以用C++代码访问而不必实际编写PTX代码? 这些指令中的大多数都反映在中描述的原子操作(内置内部函数)中。如果编译这些原子内部函数中的任何一个,您将在生成的代码中找到编译器在PT

描述了指令“atom”和“red”,它们执行原子和非原子还原。这对我来说是个新闻(至少在非原子减排方面)。。。我记得不久前学习过。这些指令是否以某种方式反映或包装在CUDA运行时API中?或者其他方式可以用C++代码访问而不必实际编写PTX代码? 这些指令是否以某种方式反映或包装在CUDA运行时API中?或者其他方式可以用C++代码访问而不必实际编写PTX代码? 这些指令中的大多数都反映在中描述的原子操作(内置内部函数)中。如果编译这些原子内部函数中的任何一个,您将在生成的代码中找到编译器在PTX或SASS级别发出的
atom
red
指令

当您不显式使用某个原子内部函数的返回值时,通常会使用
red
指令类型。如果显式使用返回值,编译器通常会发出
atom
指令

因此,应该清楚的是,该指令本身并不执行完整的经典并行简化,但如果您希望依赖原子硬件(以及相关限制)进行简化操作,则可以使用它来实现一个。这通常不是并行缩减的最快实现

如果您希望直接访问这些说明,通常的建议是在需要的地方使用

根据要求,以以下为例详细说明:

如果我执行以下操作:

atomicAdd(&x, data);
int offset = atomicAdd(&buffer_ptr, buffer_size);
可能是因为我使用它对设备变量
x
进行典型的基于原子的简化,那么编译器将发出
red
()或
red
()指令,其中包含必要的参数(指向
x
的指针和变量
数据,即2个逻辑寄存器)

如果我执行以下操作:

atomicAdd(&x, data);
int offset = atomicAdd(&buffer_ptr, buffer_size);
也许因为我使用它不是为了一个典型的缩减,而是为了在网格中的各个线程之间共享的缓冲区中保留一个空间(
buffer\u size
),它有一个到共享缓冲区中下一个可用空间的偏移索引(
buffer\u ptr
),那么编译器将发出一个
atom
()或
ATOM
()指令,包括寄存器中的3个参数(
offset
&buffer\u ptr
buffer\u size


红色
表单可以由线程/扭曲发出,然后线程/扭曲可能会继续,并且通常不会由于该指令问题而停止,该指令问题通常不会依赖于后续指令。原子形式OTOH将意味着修改它的3个参数之一(3个逻辑寄存器之一)。因此,随后使用该寄存器中的数据(即内在函数的返回值,即本例中的
偏移量)可能会导致线程/扭曲暂停,直到返回值由原子硬件实际返回为止。

您是否尝试过查看使用atomicAdd CUDA函数时生成的ptx?我现在不能检查它,但我相信它是那样暴露出来的。尽管如此,我还是对原子与红色的区别感到好奇@talonmies链接似乎说明了这一点。你能详细说明一下当我使用原子内在函数的返回值时,为什么/如何使用
red
?或者给出一个(C++代码)示例代码片段?此外,虽然很明显,没有一条指令单独执行并行缩减,但它听起来像是执行了并行缩减的一部分——这在比nvcc使用它的更广泛的上下文中可能会派上用场。