-pthread и OpenMP независимо и неявно влияют на время работы программы - PullRequest
0 голосов
/ 21 июня 2020

Я пытаюсь изучить изменение скорости с OpenMP и без него.
Для этого я написал следующую программу:
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <omp.h>
#include <time.h>

#define ARRAY_SIZE 1024

struct timespec start_time = {0}, finish_time = {0};
long time_delta = 0;

void bubble_sort(unsigned int* array) {
    unsigned int tmp = 0;
    bool no_swap = 0;
    for (unsigned int i = ARRAY_SIZE - 1; i >= 0; --i)
    {
        no_swap = 1;
        {
            for (unsigned int j = 0; j < i; j++)
            {
                if (array[j] > array[j + 1])
                {
                    tmp = array[j];
                    array[j] = array[j + 1];
                    array[j + 1] = tmp;
                    no_swap = 0;
                }
            }
        }
        if (no_swap)
            break;
    }
}

int main(int argc, char* argv[]) {
    (void)argc;
    (void)argv;
    srand(time(NULL));
    unsigned int* array = malloc(sizeof(unsigned int) * ARRAY_SIZE);
    if(!array) { return -1; }
    for(unsigned int i = 0; i < ARRAY_SIZE; ++i) {
        array[i] = rand() % ARRAY_SIZE;
    }
    clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &start_time);
    
    bubble_sort(array);

    clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &finish_time);
    time_delta = (1000000000 * (finish_time.tv_sec - start_time.tv_sec)) + (finish_time.tv_nsec - start_time.tv_nsec);
    printf("Time: %li\n", time_delta);
    free(array);
    return 0;
}

Для нормальной компиляции с использованием:
g cc main. c -o prog
для n в {1..10}; делать ./prog; done
Я получаю такой результат:

Time: 2278455
Time: 1979448
Time: 2070140
Time: 2266056
Time: 2600376
Time: 2049736
Time: 2067162
Time: 2076334
Time: 2241909
Time: 2088248

Однако, если я добавлю -fopenmp и не изменю код, я получу следующий результат со временем :

Time: 1333565
Time: 1894499
Time: 1278883
Time: 1966811
Time: 1281771
Time: 1290650
Time: 1470460
Time: 1392590
Time: 1277663
Time: 1273773

Почему программа стала работать быстрее только при добавлении OpenMP в компилятор?
Таким образом, я не могу адекватно измерить влияние каких-либо директив OpenMP на мое рабочее время.
Я заметил, что -pthread автоматически включает -fopenmp , и именно это заставляет программу работать в программе быстрее, сама по себе.

Спасибо.

...