()

2017-12-12 19 views
0

https://devblogs.nvidia.com/parallelforall/mixed-precision-programming-cuda-8/()

カーネルの内部で私は単に

D = __dp4a(A, B, C); 

と、この結果を呼び出そう次に

error: identifier "__dp4a" is undefined

コンパイラエラーにIは、ヘッダファイル

を追加しようとしました

でも効果はありませんでした。最後に、私はこの行を追加:

__device__ int __dp4a(char4 srcA, char4 srcB, int c); 

、その後、私は別のコンパイラエラーを取得:

Error using mex

ptxas fatal : Unresolved extern function '_Z6__dp4a5char4S_i'

私はのGeForce GTX 1080チタン上で実行されているCUDA v8.0に、計算能力の6.1を持っている、そしてそれはdp4aをサポートするはずです。何か不足していますか?これはMex/Matlab/Visual Studioの問題でしょうか?

+0

これらの組み込み関数をサポートするアーキテクチャ用にコンパイルしていますか? – talonmies

+0

アーキテクチャの設定方法がわかりません。私はちょうどmexcuda '-LC:\ Program Files \ NVIDIA GPUコンピューティングツールキット\ CUDA \ v8.0 \ lib \ x64でコンパイルしようとしました--gpu-architecture = compute_61 --gpu-code = compute_61' -lcurand mysource.cuエラーを修正しなかった –

+3

CUDA 8と '__dp4a'を直接使用しても問題はありません(つまり、matlab/mexなし)。たとえば、[here](https://devtalk.nvidia.com/default/topic/979016/unable-to-reach-full-throughput-on-titan-x-pascal-for-__dp4a/)を参照してください。私はあなたのmatlabのバージョンやmex一般的な何かがあると仮定しますが、それは私にそれが何であるか明らかではありません。あなたは[mcve] –

答えて

1

これはMatlab 2017aおよび/またはVisual Studio 2012の問題です。私はthis guideからコピー

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

:私の場合は、コンパイラの設定は、この行を変更

C:\Program Files\MATLAB\R2017a\toolbox\distcomp\gpu\extern\src\mex\win64\nvcc_msvcpp2012.xml

ファイル、に行くことによって、それを修正しました。デフォルトの設定は最高のアーキテクチャとしてsm_60しか持っていなかったので、__dp4a()が動作するにはsm_61が必要でした。