Salta al contingut

    ↑ ↓ per moure't↵ per obrir

    Descomposició de tasques · 3.1

    Regió paral·lela

    Passes de la teoria al codi amb OpenMP. Tot comença a la regió paral·lela: un bloc que crea un team de threads, amb una barrera implícita al final.

    Conceptes clau

    • OpenMP
    • #pragma omp parallel
    • Team de threads: master i workers
    • num_threads(N)
    • Barrera implícita

    Fins ara ens hem centrat en com ha de ser una bona descomposició en tasques: mida, repartiment i estructura. Ara passem a la pràctica i veurem com es creen i s’executen aquestes tasques en codi. Ho farem amb OpenMP, una API estàndard per a programació paral·lela en memòria compartida (principalment en C/C++ i Fortran).

    En OpenMP, el punt de partida és la regió paral·lela: un bloc que crea el conjunt de threads que compartiran la càrrega de treball i dins del qual es generen i s’executen les unitats de treball.

    La directiva #pragma omp parallel delimita una regió que s’executa amb un team de NN threads. Un d’ells és el master (id 0) i la resta actuen com a workers. Tots els threads comparteixen el mateix espai de memòria, i el runtime d’OpenMP s’encarrega de crear el team i gestionar-ne l’execució.

    El nombre de threads el decideix el runtime per defecte (normalment, un per core disponible), però es pot especificar explícitament amb la clàusula num_threads:

    // codi sequencial
    #pragma omp parallel [num_threads(N)]
    {
        ... // codi executat dins la regio paral·lela
    
    } // barrera implicita: espera tots els threads
    // codi sequencial

    La regió parallel incorpora una barrera implícita al final: cap thread pot sortir-ne fins que tots han acabat. Això garanteix que l’execució seqüencial no es reprèn mentre algun thread encara treballa dins del bloc.