【发布时间】:2011-10-16 18:33:00
【问题描述】:
我在 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)
-- 但我只是不确定如何。有什么想法吗?
【问题讨论】:
标签: memory matrix cuda textures