J'ai un noyau lancé plusieurs fois, jusqu'à ce qu'une solution soit trouvée. la solution sera trouvée par au moins un bloc.
donc lorsqu'un bloc trouve la solution, il doit informer le CPU que la solution est trouvée, de sorte que le CPU imprime la solution fournie par ce bloc.
donc ce que je suis actuellement en train de faire est la suivante:utilise cudaHostAlloc bon pour mon cas
__global__ kernel(int sol)
{
//do some computations
if(the block found a solution)
sol = blockId.x //atomically
}
maintenant à chaque appel au noyau i copier sol sur la mémoire hôte et vérifiez sa valeur. si elle est définie sur 3 par exemple, je sais que blockid 3 a trouvé la solution, donc je sais maintenant où commence l'index de la solution, et recopie la solution vers l'hôte.
Dans ce cas, l'utilisation de cudaHostAlloc sera-t-elle une meilleure option? plus de copierait la valeur d'un seul entier à chaque appel du noyau ralentit mon programme?
Avec CUDA 4.0, c'est 'cudaDeviceSynchronize()', 'cudaThreadSynchronize()' est obsolète. – harrism
OK, corrigé. Merci! – CygnusX1
@harrism Une idée sur quelle est la différence entre cudaDeviceSynchronize() et cudaThreadSynchronize()? Je suppose qu'ils ont l'intention de faire la même chose, mais pourquoi changer le nom? –