Как распараллелить цикл for с помощью OpenMP?

Распараллелить цикл for с помощью OpenMP можно следующим образом.

OpenMP предоставляет набор директив и функций, которые позволяют распараллелить программу на несколько потоков. Для распараллеливания цикла for в C с помощью OpenMP, можно использовать директиву #pragma omp parallel for.

Пример:

#include <stdio.h>
#include <omp.h>

int main() {
    int i;
    int N = 10;
    int arr[N];

    // Директива для распараллеливания цикла
    #pragma omp parallel for
    for (i = 0; i < N; i++) {
        arr[i] = i;
        printf("Thread %d executed iteration %dn", omp_get_thread_num(), i);
    }

    // Вывод результатов
    printf("nArray:n");
    for (i = 0; i < N; i++) {
        printf("%d ", arr[i]);
    }
    printf("n");
    
    return 0;
}

В данном примере, директива #pragma omp parallel for позволяет распараллелить цикл for, чтобы различные итерации выполнялись параллельно разными потоками. Количество потоков определяется переменной окружения OMP_NUM_THREADS.

Для компиляции такой программы с использованием OpenMP можно использовать флаг -fopenmp (для GCC):

gcc -fopenmp parallel_for.c -o parallel_for

Вывод программы может быть различным для разных запусков, так как потоки могут выполнять итерации в произвольном порядке. Однако, результаты должны быть корректными.