Un suivi Q de: CUDA: Calling a __device__ function from a kernelAppeler un noyau à partir d'un noyau
Je suis en train d'accélérer une opération de tri. Une version pseudo simplifiée suit:
// 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);
}
}
(Note:. Cette version simple ne montre pas les techniques de réduction dans les blocs) L'idée est qu'il est facile (rapide) pour identifier les points d'échange. L'opération d'échange est coûteuse (lente). Utilisez donc un bloc pour trouver/identifier les points d'échange. Utilisez d'autres blocs pour effectuer les opérations d'échange. C'est-à-dire que l'échange est effectué en parallèle. Cela ressemble à un plan décent. Mais si le compilateur inline les appels de l'appareil, il n'y a pas d'échange parallèle. Existe-t-il un moyen de dire au compilateur de ne PAS entrer en ligne un appel de périphérique?
Est-il possible de faire cela sur la dernière version de CUDA (v6.5) et sur NVIDIA Grid K520 avec la capacité de calcul 3.0? –
@talonmies, j'ai attendu 4 ans de votre réponse: D J'espère qu'il y a une solution à cela :-) Pouvez-vous me signaler cela? – Nabin
Peu importe. J'ai trouvé quelque chose – Nabin