控制从 OpenACC 计算区域进入 CUDA 函数的线程

Controlling the threads that go into CUDA function from OpenACC compute region

我正在从 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"

谢谢

尝试将向量 (128) 更改为 vector_length(128)。我认为 PGI 15.10 支持这两种语法,但以防万一...

如果这不起作用,你可以 post 编译器输出 -Minfo=accel 以便我们可以看到编译器在做什么吗?