【问题标题】:Getting started with int8 arithmetic using dp4a()使用 dp4a() 开始使用 int8 算术
【发布时间】:2018-05-26 02:53:55
【问题描述】:

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

【问题讨论】:

  • 您是否正在为支持这些内在函数的架构进行编译?
  • 我不确定如何设置架构。我刚刚尝试使用 mexcuda '-LC:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0\lib\x64 --gpu-architecture=compute_61 --gpu-code=compute_61' -lcurand mysource.cu 进行编译没有修复错误
  • 我认为直接使用 CUDA 8 和 __dp4a 没有任何问题(即没有 matlab/mex)。例如,请参阅here。我会假设您的 matlab 版本或一般的 mex 发生了一些事情,但它对我来说并不明显。您可能需要提供minimal reproducible example

标签: cuda mex


【解决方案1】:

原来这是 Matlab 2017a 和/或 Visual Studio 2012 的问题。就我而言,我通过转到

来修复它

C:\程序 文件\MATLAB\R2017a\toolbox\distcomp\gpu\extern\src\mex\win64\nvcc_msvcpp2012.xml

文件,编译器设置所在的位置,并修改这一行:

ARCHFLAGS="-gencode=arch=compute_61,code=sm_61 -gencode=arch=compute_61,code=compute_61 $NVCC_FLAGS"

我从this guide 复制的。默认设置只有 sm_60 作为最高架构,我们需要 sm_61 才能让 __dp4a() 工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多