2016-11-30 14 views
0

カーネル内で複数のベクトルドットを実行するコードを記述しようとしています。私はcublasSdot関数を使用しています。cublasベクトルドット積を実行するライブラリです。これは私のコードです:"device-function-maxrregcount"メッセージで、CUDAコードをコンパイル中

using namespace std; 
__global__ void ker(float * a, float * c,long long result_size,int n, int m) 
{ 
float *sum; 
int id = blockIdx.x*blockDim.x+threadIdx.x; 
float *out1,*out2; 
int k; 

if(id<result_size) 
     { 
       cublasHandle_t handle; 
       cublasCreate(&handle); 
       out1 = a + id*m; 
       for(k=0;k<n;k++) 
       { 
         out2 =a + k*m; 
         cublasSdot(handle, m,out1,1,out2,1,sum); 
         c[id*n + k]= *sum; 
       } 
     } 
} 
int main() 
{ 
int n=70000,m=100; 
long result_size=n; 
result_size*=n; 
float * dev_data,*dev_result; 
float * data = new float [n*m]; 
float * result = new float [result_size]; 
for (int i = 0; i< n; i++) 
     for(int j = 0; j <m;j++) 
     { 
      data[i*m+j]=rand(); 
     } 

cudaMalloc ((void**)&dev_data,sizeof(float)*m*n); 
cudaMalloc ((void**)&dev_result,sizeof(float)*result_size); 
cudaMemcpy(dev_data, data, sizeof(float) * m* n, cudaMemcpyHostToDevice); 
int block_size=1024; 
int grid_size=ceil((float)result_size/(float)block_size); 
ker<<<grid_size,block_size>>>(dev_data,dev_result,result_size,n,m); 
cudaDeviceSynchronize(); 
cudaMemcpy(result, dev_result, sizeof(float)*(result_size), cudaMemcpyDeviceToHost); 
return 0; 
} 

私はcublas_v2ライブラリを含めて、コードをコンパイルするには、次のコマンドを使用しています

nvcc -lcublas_device -arch=sm_35 -rdc=true askstack.cu -o askstack 

しかし、私は次のようなメッセージだ:

ptxas info : 'device-function-maxrregcount' is a BETA feature 

をすることができ、誰私はこのメッセージに関して何をすべきか教えてください。

+3

何もありません。ちょうど情報のAFAIKです – talonmies

答えて

3

このメッセージは、talonmiesが言ったように情報です。

NVCCこのmaxregcountオプションは、カーネルで使用可能なレジスタと、それが使用するすべてのデバイス機能の制限を指定するために使用される:

カーネルが有するレジスタの特定の数に制限されている場合launch_bounds属性または--maxrregcountオプションを指定すると、カーネルが呼び出すすべての関数は、その数を超えるレジスタを使用してはなりません。制限値を超えると、リンクエラーが発生します。

参照:NVCC Doc : 6.5.1. Object Compatibility

デバイスの機能・maxregcountのみデバイス機能のために、この値を上書きするために使用されているようです。したがって、カーネルとデバイスの機能で許されるレジスタの最大量を変えることができます。

デバイス機能の場合、このオプションは--maxregcountで指定された値を上書きします。

出典:The CUDA Handbook

関連する問題