我的代码因访问全局内存中的 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
此致,