gpt4 book ai didi

c++ - 执行时间如何取决于使用 OpenMP 库的线程数量的增加?

转载 作者:行者123 更新时间:2023-11-28 04:56:14 25 4
gpt4 key购买 nike

增加线程数会增加而不是减少循环执行时间。

#include <time.h>
#include <stdio.h>
#include <stdlib.h>
#include <omp.h>
#include <limits.h>
#define n 4

int main(int argc, char **argv)
{
FILE * file1 = fopen("output.txt", "w");
if (file1 == NULL){
exit(EXIT_FAILURE);
}

srand(time(NULL));
int matrix[n][n];
int i, j;
for(i = 0; i < n; i++){
for (j = 0; j < n; j++){
matrix[i][j] = rand() % 100 + 1;
fprintf(file1, "%d ", matrix[i][j]);
}
fprintf(file1, "\n");
}
int sum = 0;
int min;
double start;
double end;

开始计算循环时间

    start = omp_get_wtime();

// in num_threads I've changed the number of threads
// and investigate a problem of increasing the time

#pragma omp parallel for private (i, j, min) reduction(+:sum) num_threads(4)
for(i = 0; i < n; i++){
min = INT_MAX;
for (j = 0; j < n; j++){
if(matrix[j][i] < min){
min = matrix[j][i];
}
}
sum += min; // sum of min numbers of each column
}
end = omp_get_wtime();

printf("Time: %lf\n", end - start);

printf("Min sum of matrix = %d", sum);
fclose(file1);
return 0;
}

4个线程
时间:0.000930
3个线程
时间:0.000356
2个线程
时间:0.000533
1 个线程
时间:0.000008

我的 CPU 有 4 个线程。

最佳答案

您有一个非常小的问题 (4x4),并且您正在计时线程创建。我不希望并行性在这种规模上有多大帮助(因为唤醒线程然后在并行结束时再次同步它们的成本将比您尝试做的工作大得多),但是您可以通过添加

从您的测量中删除创建线程池的成本

#pragma omp parallel
;

在定时区域之前。

还有,拜托,拜托,拜托,不要强求线程数。使用可环境的 OMP_NUM_THREADS

关于c++ - 执行时间如何取决于使用 OpenMP 库的线程数量的增加?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47080296/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com