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.
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)