我从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.有没有办法指定它?
我使用&#34; cuda / 7.0.28&#34;和&#34; pgi / 15.10&#34;
由于
答案 0 :(得分:1)
尝试将vector(128)更改为vector_length(128)。我认为PGI 15.10支持两种语法,但以防万一...
如果这不起作用,请你用-Minfo=accel
发布编译器输出,以便我们可以看到编译器在做什么?