Cuda 使用dp4a()开始使用int8算法

Cuda 使用dp4a()开始使用int8算法,cuda,mex,Cuda,Mex,我正在尝试使用8位整数内部函数,如本文所述: 在内核中,我只是尝试调用 D = __dp4a(A, B, C); 这会导致编译器错误 错误:标识符“\uuu dp4a”未定义 接下来,我尝试添加头文件 #include <sm_61_intrinsics.h> 然后我得到另一个编译器错误: 使用mex时出错 ptxas致命:未解析的外部函数“_Z6__dp4a5char4S_i” 我在GeForce GTX 1080 Ti上运行CUDA v8.0,计算能力6.1,它应该支持dp4

我正在尝试使用8位整数内部函数,如本文所述:

在内核中,我只是尝试调用

D = __dp4a(A, B, C);
这会导致编译器错误

错误:标识符“\uuu dp4a”未定义

接下来,我尝试添加头文件

#include <sm_61_intrinsics.h>
然后我得到另一个编译器错误:

使用mex时出错

ptxas致命:未解析的外部函数“_Z6__dp4a5char4S_i”


我在GeForce GTX 1080 Ti上运行CUDA v8.0,计算能力6.1,它应该支持dp4a。我错过什么了吗?这可能是Mex/Matlab/Visual Studio的问题吗?

事实证明这是Matlab 2017a和/或Visual Studio 2012的问题。在我的情况下,我通过去

C:\程序 Files\MATLAB\R2017a\toolbox\distcomp\gpu\extern\src\mex\win64\nvcc\u msvcpp2012.xml

文件,其中包含编译器设置,并修改此行:

ARCHFLAGS=“-gencode=arch=compute\u 61,code=sm\u 61 -gencode=arch=compute\u 61,code=compute\u 61$NVCC\u标志”


这是我抄袭的。默认设置只有sm_60作为最高体系结构,我们需要sm_61才能使u dp4a()正常工作。

事实证明这是Matlab 2017a和/或Visual Studio 2012的问题。在我的情况下,我通过去

C:\程序 Files\MATLAB\R2017a\toolbox\distcomp\gpu\extern\src\mex\win64\nvcc\u msvcpp2012.xml

文件,其中包含编译器设置,并修改此行:

ARCHFLAGS=“-gencode=arch=compute\u 61,code=sm\u 61 -gencode=arch=compute\u 61,code=compute\u 61$NVCC\u标志”


这是我抄袭的。默认设置只有sm_60作为最高体系结构,我们需要sm_61才能使__dp4a()正常工作。

您是为支持这些内在功能的体系结构编译的吗?我不确定如何设置体系结构。我刚刚尝试过使用mexcuda'-LC:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0\lib\x64——GPU架构=compute_61——GPU代码=compute_61'-lcurand mysource.cu进行编译。这并没有修复错误。我认为直接使用CUDA 8和
\uu dp4a
没有任何问题(即没有matlab/mex)。例如,见。我会假设你的matlab版本或mex总的来说有问题,但我不清楚它是什么。您可能想提供一个示例,说明您是为支持这些内部函数的体系结构而编译的吗?我不确定如何设置体系结构。我刚刚尝试过使用mexcuda'-LC:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0\lib\x64——GPU架构=compute_61——GPU代码=compute_61'-lcurand mysource.cu进行编译。这并没有修复错误。我认为直接使用CUDA 8和
\uu dp4a
没有任何问题(即没有matlab/mex)。例如,见。我会假设你的matlab版本或mex总的来说有问题,但我不清楚它是什么。您可能需要提供一个
__device__ int __dp4a(char4 srcA, char4 srcB, int c);