使用OpenMP库,执行时间如何取决于线程数量的增加
How time executing depends of increasing of number of threads with using OpenMP library?
线程数量的增加增加了循环执行的时间,而不是减少了它。
#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: %lfn", end - start);
printf("Min sum of matrix = %d", sum);
fclose(file1);
return 0;
}
4个线程
时间:0.000930
3个线程
时间:.000356
2个线程1个线程
我的CPU有4个线程。
您遇到了一个非常小的问题(4x4),您正在对线程创建进行计时。无论如何,我不希望并行性在这种规模上有多大帮助(因为仅仅唤醒线程然后在并行结束时再次同步它们的成本就会比你试图做的工作大得多),但你可以通过添加来从你的测量中去除创建线程池的成本
#pragma omp parallel
;
在定时区域之前。
而且,请,请,不要强迫线程的数量。使用令人羡慕的OMP_NUM_THREADS
。
相关文章:
- 从不同线程使用int64的不同字节安全吗
- 琐碎并发代码的吞吐量不会随着线程数量的增加而增加
- 多线程文件 IO 程序在线程数增加时行为不可预测
- C++ - 线程参数无缘无故增加
- 随着线程数量的增加,OpenMP的实现速度越来越慢
- 原子增加和比较线程安全
- 使用OpenMP库,执行时间如何取决于线程数量的增加
- 如何使用pthreads在Solaris上增加C 线程堆栈的大小
- openmp:线程数量的增加会降低性能
- 为什么在 Linux 上使用更多线程时内存消耗会增加?(C++)
- 可以在多个线程中使用WSAEventSelect()来增加套接字限制吗
- 在 Xcode 中增加 OpenMP 中的线程数
- 如何增加进程中运行的线程数
- 增加线程数时CUDA内核错误
- 一个有两个线程的程序,一个线程增加全局变量,另一个线程减少相同的变量,变量是否总是正确的
- CUDA中增加每个线程工作量的示例
- Qt:如何让一个线程等待临时包障,并暂时增加另一个线程的优先级以删除 roadbock?
- 如何在Qt中增加线程的堆栈大小- QThread::setStackSize()似乎不起作用
- 在solaris上为pthreads增加子线程的堆栈大小
- TBB线程池意外增加