web-dev-qa-db-fra.com

OpenMP incapable d'utiliser plusieurs threads, aucune erreur associée à la compilation

J'utilise openMP pour mes travaux de laboratoire et tout a bien fonctionné il y a quelques semaines, mais maintenant, il ne fonctionne que sur un seul thread, je l'ai lu et je suppose que cela est dû à un conflit entre les packages. C'est le code ci-dessous:

#include "omp.h"
#include <stdio.h>
int main()
{
    omp_set_num_threads(4);
    #pragma omp parallal
    {
        int id = omp_get_thread_num();
        printf("Hello (%d)", id );
        printf("World (%d)\n", id);
        return 0;
    }
}

Je reçois la sortie:

$ gcc -fopenmp hello.c
$ ./a.out
Hello (0)World (0)

J'ai essayé de réinstaller gcc, mais sans aide.

4
Ankit Singhaniya

Il y a deux erreurs dans votre code, c'est pourquoi vous ne pouvez pas utiliser plusieurs threads.

Première erreur est une faute de frappe dans OMP Compiler Directives. Vous avez écrit

#pragma omp parallal

Le correct devrait être, (le mot est parallèle pas parallèle)

#pragma omp parallel

Deuxième erreur est un return 0 non valide à l'intérieur du bloc structuré OpenMP. Le code correct devrait ressembler,

#include "omp.h"
#include <stdio.h>
int main()
{
    omp_set_num_threads(4);
    #pragma omp parallel
    {
        int id = omp_get_thread_num();
        printf("Hello (%d)", id );
        printf("World (%d)\n", id );
    }
return 0;
}

Compilation:

$ gcc prog.c -fopenmp
$ ./a.out
Hello (0)World (0)
Hello (2)World (2)
Hello (1)World (1)
Hello (3)World (3)
4
souravc