我试图使用OpenMP进行矩阵乘法和计数排序,但添加处理器并没有加快速度(这是我的目标)。所以我决定做一个简单的例子,事实证明即使是那个简单的for循环也不会加速!所以我的问题是,为什么这段代码没有加速?
#include <omp.h>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(int argc, char** argv){
int num_threads = 4;
long num_numbers;
char* size = argv[1];
char* threads = argv[2];
num_numbers = atoi(size);
num_threads = atoi(threads);
double start_time = clock();
int i =0;
#pragma omp parallel for num_threads(num_threads) default(none) private(i) shared(num_numbers)
for(i =0; i < num_numbers; i++){
//nothing
}
double end_time = clock();
double result_time = (end_time - start_time) / CLOCKS_PER_SEC;
printf("Time: %f\n", result_time);
return 0;
}
我正在编译:
gcc -fopenmp -Wall openmp.c -o openmp.o
启动:
./openmp.o 500000000000 2
时间:
1 thread: 4.0s
2 threads: 5.0s
3 threads: 5.4s
为什么程序没有加速?
解决方案: 我将clock()更改为omp_get_wtime(),现在速度加快。