【发布时间】:2013-09-28 07:30:41
【问题描述】:
我的代码因访问全局内存中的 4D 数组而变慢。
我正在使用 PGI 编译器 2010。
我正在访问的 4D 数组是从设备中只读的,并且大小在运行时是已知的。
我想分配给纹理内存,发现我的PGI版本不支持纹理。由于大小仅在运行时才知道,因此也不可能使用常量内存。
在编译时只知道一维,例如MyFourD(100, x,y,z),其中 x,y,z 是用户输入。
我的第一个想法是关于指针,但不熟悉指针 fortran。
如果您有处理这种情况的经验,我将感谢您的帮助。因为只有这样才能使我的代码比预期慢 5 倍
以下是我正在尝试做的示例代码
int i,j,k
i = (blockIdx%x-1) * blockDim%x + threadIdx%x-1
j = (blockIdx%y-1) * blockDim%y + threadIdx%y-1
do k = 0, 100
regvalue1 = somevalue1
regvalue2 = somevalue2
regvalue3 = somevalue3
d_value(i,j,k)=d_value(i,j,k)
& +myFourdArray(10,i,j,k)*regvalue1
& +myFourdArray(32,i,j,k)*regvalue2
& +myFourdArray(45,i,j,k)*regvalue3
end do
最好的问候,
【问题讨论】:
-
当你说'PGI编译器'时,你的意思是你使用OpenACC?您可能想为您的问题添加标签
OpenACC。 -
Eric,不是 OpenACC 而是 mpif90