まず、私は CUDA プログラミングにかなり慣れていないので、このような単純な質問をお詫びします。GPU カーネル呼び出しで dimGrid と dimBlock を決定する最良の方法を調査しましたが、何らかの理由でうまく動作しません。
私の自宅の PC には、GeForce GTX 580 ( Compute Capability 2.0 ) があります。ブロックあたり 1024 スレッドなど。この PC でコードを適切に実行できます。私の GPU は、サイズ 988*988 の距離配列を設定しています。以下はコードの一部です。
#define SIZE 988
__global__ void createDistanceTable(double *d_distances, double *d_coordinates)
{
int col = blockIdx.x * blockDim.x + threadIdx.x;
int row = blockIdx.y * blockDim.y + threadIdx.y;
if(row < SIZE && col < SIZE)
d_distances[row * SIZE + col] =
acos(__sinf(d_coordinates[row * 2 + 0])*
__sinf(d_coordinates[col * 2 + 0])+__cosf(d_coordinates[row * 2 + 0])*
__cosf(d_coordinates[col * 2 + 0])*__cosf(d_coordinates[col * 2 + 1]-
d_coordinates[row * 2 + 1]))*6371;
}
メインのカーネル呼び出し:
dim3 dimBlock(32,32,1);
dim3 dimGrid(32,32,1);
createDistanceTable<<<dimGrid, dimBlock>>>(d_distances, d_coordinates);
私の問題は、このコードをラップトップで適切に実行する方法を見つけられなかったことです。私のラップトップの GPU はGeForce 9600M GT ( Compute Capability 1.1 ) です。ブロックあたり 512 スレッドなど。ラップトップでのカーネル呼び出しのために、dimBlock と dimGrid にアプローチする方法を理解するのに役立つガイダンスをいただければ幸いです。アドバイスをありがとう!