OpenMP não é possível usar vários encadeamentos, nenhum erro associado à compilação

4

Estou usando o openMP para minhas atribuições de laboratório e tudo funcionou bem algumas semanas atrás, mas agora ele é executado apenas em um thread, eu li e acho que isso é devido ao conflito entre os pacotes. Este é o código abaixo:

#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;
    }
}

Eu recebo a saída:

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

Eu tentei reinstalar gcc , mas não ajudei.

    
por Ankit Singhaniya 27.02.2015 / 19:42

1 resposta

4

Existem dois erros no seu código, por isso você não consegue usar vários threads.

Primeiro erro é um erro de digitação em OMP Compiler Directives . Você escreveu

#pragma omp parallal

O correto deve ser, (a palavra é paralela e não paralela)

#pragma omp parallel

Segundo erro é um return 0 inválido dentro do bloco estruturado do OpenMP. O código correto deve ser semelhante,

#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;
}

Compilação:

$ gcc prog.c -fopenmp
$ ./a.out
Hello (0)World (0)
Hello (2)World (2)
Hello (1)World (1)
Hello (3)World (3)
    
por souravc 27.02.2015 / 20:46