我在GPU上创建了一个浮点数矩阵(p7P_NXSTATES)x(p7P_NXTRANS),如下所示:
// Special Transitions
// Host pointer to array of device pointers
float **tmp_xsc = (float**)(malloc(p7P_NXSTATES * sizeof(float*)));
// For every alphabet in scoring profile...
for(i = 0; i < p7P_NXSTATES; i++)
{
// Allocate memory for device for every alphabet letter in protein sequence
cudaMalloc((void**)&(tmp_xsc[i]), p7P_NXTRANS * sizeof(float));
// Copy over arrays
cudaMemcpy(tmp_xsc[i], gm.xsc[i], p7P_NXTRANS * sizeof(float), cudaMemcpyHostToDevice);
}
// Copy device pointers to array of device pointers on GPU (matrix)
float **dev_xsc;
cudaMalloc((void***)&dev_xsc, p7P_NXSTATES * sizeof(float*));
cudaMemcpy(dev_xsc, tmp_xsc, p7P_NXSTATES * sizeof(float*), cudaMemcpyHostToDevice);
此内存一旦复制到GPU,就永远不会被更改,只能从中读取。因此,我决定将其绑定到纹理内存。问题是当使用2D纹理内存时,绑定到它的内存实际上只是一个使用偏移量作为矩阵的数组。
我知道我需要使用cudaBindTexture2D()和cudaCreateChannelDesc()绑定这个2D内存才能以此方式访问它
tex2D(texXSC,X,Y)
- 但我不确定如何。有什么想法吗?
答案 0 :(得分:1)
简短的回答是你不能将指针数组绑定到纹理。您可以创建CUDA数组并从线性源存储器复制数据,也可以使用直接绑定到纹理的倾斜线性存储器。但是一系列指针不起作用。