来自: CUDA:从内核调用 __device__ 函数的后续 Q
我正在尝试加快排序操作。一个简化的伪版本如下:
// 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);
}
}
(注意:这个简单的版本没有显示块中的减少技术。)这个想法是很容易(快速)识别交换点。交换操作成本高(缓慢)。所以使用一个块来查找/识别交换点。使用其他块进行交换操作。即并行进行实际交换。这听起来像是一个不错的计划。但如果编译器内联设备调用,则不会发生并行交换。有没有办法告诉编译器不要内联设备调用?