にテクスチャメモリバインディングIサイズのGPU(p7P_NXSTATES)Xようなので(p7P_NXTRANS)上のフロートポイントマトリックス作成:、一度GPUにコピーGPU割り当てマトリックス
// 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テクスチャメモリで作業する場合、メモリにバインドされるメモリは実際には、オフセットを使って行列として機能する単なる配列であるということです。
は、私は、このような
tex2D(texXSC、X、Y)としてそれにアクセスするために、この2Dメモリを結合することcudaBindTexture2D()とcudaCreateChannelDesc()を使用する必要が知ってい
- しかし、私はちょうどその方法がわかりません。何か案は?
ダーン、よく私はそれも動作すると思います。 1Dテクスチャメモリの場合と同じように、1つのマクロの後ろに隠すことでコードを単純化できます。私は上記のコードで述べたこの関数の使い方の例を得ることができます。 – sj755
私の答えを繰り返すには:あなたのコードはデバイスポインタの配列を割り当てており、それらはテクスチャ操作のどんな種類でも使用できないので、私はあなたのコードで言及したものを使用することはできません。 – talonmies