Я создал матрицу с плавающей запятой на графическом процессоре размером (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);
Эта память, однажды скопированная в графический процессор, никогда не изменяется и только для чтенияот.Таким образом, я решил связать это с текстурной памятью.Проблема в том, что при работе с 2D текстурной памятью связанная с ней память на самом деле является просто массивом, который использует смещения для работы в качестве матрицы.
Я знаю, что мне нужно использовать cudaBindTexture2D () и cudaCreateChannelDesc () связать эту 2D память для доступа к ней как таковой
tex2D (texXSC, x, y)
- но я просто не уверен, как.Есть идеи?