我正在尝试使用8位整数内在函数,如本文所述:https://devblogs.nvidia.com/parallelforall/mixed-precision-programming-cuda-8/
在内核中我只是尝试调用
D = __dp4a(A, B, C);
,这会导致编译器错误
错误:标识符“__dp4a”未定义
接下来我尝试添加头文件
#include <sm_61_intrinsics.h>
但它没有效果。最后,我添加了这一行:
__device__ int __dp4a(char4 srcA, char4 srcB, int c);
然后我得到另一个编译器错误:
使用 mex
时出错ptxas致命:未解决的外部函数'_Z6__dp4a5char4S_i'
我在GeForce GTX 1080 Ti上运行CUDA v8.0,计算能力6.1,它应该支持dp4a。我错过了什么吗?这可能是Mex / Matlab / Visual Studio问题吗?
答案 0 :(得分:1)
事实证明这是一个Matlab 2017a和/或Visual Studio 2012问题。在我的情况下,我通过转到
来修复它C:\程序 文件\ MATLAB \ R2017a \工具箱\ distcomp \ GPU \的extern \ SRC \ MEX \ Win64的\ nvcc_msvcpp2012.xml
文件,编译器设置所在的位置,并修改此行:
ARCHFLAGS =&#34; -gencode =拱= compute_61,代码= sm_61 -gencode = arch = compute_61,code = compute_61 $ NVCC_FLAGS&#34;
我是从this guide复制的。默认设置只有sm_60作为最高架构,我们需要sm_61才能使用__dp4a()。