openMP met cuda waardoor segmentatie fout optreedt bij het uitvoeren van een andere gpu in plaats van 0

Ik werk met cuda en gebruik openMP voor parallel threading:

#pragma omp parallel
{
    unsigned int cpu_thread_id = omp_get_thread_num();
    cudaSetDevice(cpu_thread_id);

    if(cpu_thread_id==0) 
    {
       //call kernel function
    }
}

Het werkt altijd met cpu_thread_id = 0 zelfs als ik 4 GP's heb. Dus als ik de cpu_thread_id verander in een ander nummer 1,2 en 3 om te testen. Ik heb: segmentatiefout. met deze fout, heb ik geen idee waarom het het probleem is.

Heb je iets opgemerkt?

Bij voorbaat dank

2
Weet je zeker dat al je CUDA GPU's correct worden gedetecteerd? Probeer een oproep naar cudaGetDeviceCount en kijk of het het juiste aantal GPU's oplevert.
toegevoegd de auteur Tudor, de bron
Kun je de vraag bewerken om wat informatie op te nemen over hoe de argumenten die je doorgeeft in de kernel worden toegewezen (vooral threading)? En met welke CUDA-versie doe je dit?
toegevoegd de auteur talonmies, de bron

1 antwoord

Ik heb een mutex toegevoegd tussen de threads en het werkt. Ik weet niet waarom het zo is ...

0
toegevoegd
U zou kunnen proberen de Cuda API te gebruiken om de laatst ondervonden Cuda-fout te bepalen en deze af te drukken.
toegevoegd de auteur Tudor, de bron