OpenMP C уточнение программы - PullRequest
0 голосов
/ 02 апреля 2020

Если вы хотите получить доступ к локальным значениям потока приватизированной переменной за пределами параллельной области, вы можете записать их обратно в глобально объявленный вспомогательный массив. Так было описано в книге OpenMP

(2017 - Бертил Шмидт, Хорхе Гонсалес-Домингес, Кристиан Хундт, Мориц Шларб - Параллельное программирование_ Концепции и практика - Морган Кауфманн)

Авторы придумали эту программу -

int main () { 

    // maximum number of threads and auxiliary memory  

    int num = omp_get_max_threads(); 

    int * aux = new int[num]; 

    int i = 1; // we pass this via copy by value 

    #pragma omp parallel firstprivate(i) num_threads(num) { 

        // get the thread identifier j 

        int j = omp_get_thread_num(); 

        i += j; 

        aux[j] = i; 

    } 

    for(k=0; k<num; k++) 

        printf("%d \n", aux[k]); 

} 

Пробовал в Ма c ->

Error message

В чем здесь проблема?

1 Ответ

0 голосов
/ 02 апреля 2020

new не является оператором C. new для C++, в C вы можете выделить память с помощью другой функции, такой как malloc.

, как вы можете видеть в ошибке, она говорит new undeclared, потому что этот оператор не определен в C. (это похоже на использование неизвестного имени)

Так что вы ожидаете, что вы добавите сюда кое-что new int[num];, потому что это похоже на

unknown_name/*add something like ;*/ int[num];

вместо new, Вы можете использовать что-то вроде этого:

int *aux=malloc(sizeof(int)*num);
...