フォローアップ Q から: CUDA: Calling a __device__ function from a kernel
ソート操作を高速化しようとしています。簡略化された疑似バージョンは次のとおりです。
// some costly swap operation
__device__ swap(float* ptrA, float* ptrB){
float saveData; // swap some
saveData= *Adata; // big complex
*Adata= *Bdata // data chunk
*Bdata= saveData;
}
// a rather simple sort operation
__global__ sort(float data[]){
for (i=0; i<limit: i++){
find left swap point
find right swap point
swap<<<1,1>>>(left, right);
}
}
(注: この単純なバージョンでは、ブロック内のリダクション テクニックは示されていません。) アイデアは、スワップ ポイントを簡単 (高速) に特定できるようにすることです。スワップ操作はコストがかかります (遅い)。したがって、1 つのブロックを使用して、スワップ ポイントを見つけて識別します。他のブロックを使用してスワップ操作を行います。つまり、実際のスワッピングを並行して行います。これはまともな計画のように聞こえます。ただし、コンパイラがデバイス呼び出しをインライン化する場合、並列スワッピングは行われません。デバイス呼び出しをインライン化しないようにコンパイラに指示する方法はありますか?