使用dp4a()

时间:2017-12-12 12:10:35

标签: cuda mex

我正在尝试使用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问题吗?

1 个答案:

答案 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()。