0

OpenACC計算領域からcuda関数を呼び出しており、cuda関数に入るスレッドの数を指定したいのですが、それを制御する方法がわからなかったようです。

%main.cpp
..

#pragma acc routine vector
extern "C" void CUDA_KERNEL_FUNCTION(double *B, int ldb,const double *A, int lda);
..
#pragma acc parallel loop independent collapse(3) gang vector(128)
  for(int i0 = 0; i0 < size0 - 31; i0+= 32)
     for(int i1 = 0; i1 < size1 - 31; i1+= 32)
        for(int i2 = 0; i2 < size2; i2+= 1)
          CUDA_KERNEL_FUNCTION(B, ldb, A, lda);

..
..


%cuda_code.cu

extern "C" __device__ void CUDA_KERNEL_FUNCTION(double *B, int ldb,const double *A, int lda)
{

    Num_Threads_gpu = blockDim.x * blockDim.y* blockDim.z;

    //Num_Threads_gpu is always 32 
}

コンパイルは問題ありません。しかし、使用するベクトルの長さに関係なく、cuda 関数に入るスレッドの数は常に 32 です。それを指定する方法はありますか?

「cuda/7.0.28」と「pgi/15.10」を使用しています

ありがとう

4

1 に答える 1

1

vector(128) を vector_length(128) に変更してみてください。PGI 15.10 は両方の構文をサポートしていると思いますが、念のため...

それでもうまくいかない場合は、コンパイラの出力を投稿して-Minfo=accel、コンパイラが何をしているかを確認できますか?

于 2015-11-10T22:28:59.027 に答える