Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.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多架构编译洗牌功能_Cuda - Fatal编程技术网

CUDA多架构编译洗牌功能

CUDA多架构编译洗牌功能,cuda,Cuda,我在CUDA代码中使用了\uuuu shfl*函数,还使用了替换(较慢)函数,以便与CUDA设备兼容

我在CUDA代码中使用了
\uuuu shfl*
函数,还使用了替换(较慢)函数,以便与CUDA设备兼容 在我实际使用
函数之前,我的头文件如下所示

#include <cuda.h>
#define _SR_MAX_BLOCK (512)
#if !defined(__CUDA_ARCH__) || __CUDA_ARCH__ < 300
...
... replacement functions defined here
...
#endif

...
... __shfl* functions used here
问题
:nvcc是否为不同的体系结构编译不同的代码?如果是这样的话,我是否保证只有当运行时CUDA设备的性能低于3.0时,才会执行较慢的替换代码,否则将使用快速的内在随机函数

问题:nvcc是否为不同的体系结构编译不同的代码

如果是这样,我是否可以保证较慢的更换代码将被删除 仅当运行时CUDA设备的容量小于 3.0和快速内在洗牌功能是否可以使用

pragma#ifdef块中的代码将仅针对满足该条件的体系结构进行编译。使用编译行,您将为列出的每个体系结构获得不同的编译过程

问题:nvcc是否为不同的体系结构编译不同的代码

如果是这样,我是否可以保证较慢的更换代码将被删除 仅当运行时CUDA设备的容量小于 3.0和快速内在洗牌功能是否可以使用


pragma#ifdef块中的代码将仅针对满足该条件的体系结构进行编译。使用编译行,您将为列出的每个体系结构获得不同的编译过程。

cuda为您提供的每个
-gencode
开关编译单独的代码路径。该代码路径可能由SASS或PTX代码(或两者)组成,但它将以gencode交换机中指定的体系结构为目标。至于你的第二个问题,像你展示的东西应该会给你你想要的,但是你展示的确切安排不是我想要的。如果您的示例代码至少能够显示函数原型的安排,那么其他人可以指导您,这将非常有用。这:
#define\u SR\u MAX\u BLOCK(512)
与您的问题有什么关系吗?如果您只是使用您所展示的内容构建了一个测试用例,我想您自己会发现它不会完全像您所展示的那样工作。编译器将在对cc2.0代码路径使用shuffle函数时抛出错误,因为您的shuffle函数定义没有条件编译结构,无法阻止它们在cc2.0代码路径中编译。@RobertCrovella:我已经在使用
#if!定义(uuu CUDA_ARCH_uuuuu)| uuuu CUDA_ARCH_uu300
为该条件。因此,当
\uuuuushfl*
未定义时,即
\uuucuda\u ARCH\uuu300
,将使用替换的
\uuushfl*
定义。我想知道如果
条件是如何触发的。它是只触发一次还是多次触发,每个gencode触发一次?传递给nvcc的每个架构都有一个完整的预处理器传递。因此,如果它不起作用,您需要cuda为您提供的每个
-gencode
开关编译一个单独的代码路径。该代码路径可能由SASS或PTX代码(或两者)组成,但它将以gencode交换机中指定的体系结构为目标。至于你的第二个问题,像你展示的东西应该会给你你想要的,但是你展示的确切安排不是我想要的。如果您的示例代码至少能够显示函数原型的安排,那么其他人可以指导您,这将非常有用。这:
#define\u SR\u MAX\u BLOCK(512)
与您的问题有什么关系吗?如果您只是使用您所展示的内容构建了一个测试用例,我想您自己会发现它不会完全像您所展示的那样工作。编译器将在对cc2.0代码路径使用shuffle函数时抛出错误,因为您的shuffle函数定义没有条件编译结构,无法阻止它们在cc2.0代码路径中编译。@RobertCrovella:我已经在使用
#if!定义(uuu CUDA_ARCH_uuuuu)| uuuu CUDA_ARCH_uu300
为该条件。因此,当
\uuuuushfl*
未定义时,即
\uuucuda\u ARCH\uuu300
,将使用替换的
\uuushfl*
定义。我想知道如果条件是如何触发的。它是只触发一次还是多次触发,每个gencode触发一次?传递给nvcc的每个架构都有一个完整的预处理器传递。因此,如果它不起作用,您需要一个具有明确含义的,在本例中不适用的,因此编辑。具有明显的含义,但在本例中不适用,因此编辑。
-gencode arch=compute_20,code="sm_20,compute_20";-gencode arch=compute_20,code="sm_21,
compute_20";-gencode arch=compute_30,code="sm_30,compute_30";-gencode arch=compute_35,
code="sm_35,compute_35";-gencode arch=compute_52,code="sm_52,compute_52"