将纹理内存绑定到GPU分配的矩阵

时间:2011-07-31 03:27:15

标签: memory matrix cuda textures

我在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)

- 但我不确定如何。有什么想法吗?

1 个答案:

答案 0 :(得分:1)

简短的回答是你不能将指针数组绑定到纹理。您可以创建CUDA数组并从线性源存储器复制数据,也可以使用直接绑定到纹理的倾斜线性存储器。但是一系列指针不起作用。