OpenMP是使用多线程的接口。
以c语言程序举例,即ba.c文件如下:
#include <omp.h> #include <stdio.h> #include <stdlib.h> #include <windows.h> void Test(int n) { int j; for (int i = 0; i < 100000000; ++i) { //do nothing, just waste time j++; } printf("%d, ", n); } int main(int argc, char *argv[]) { int i; #pragma omp parallel for for (i = 0; i < 100; ++i) Test(i); system("pause"); return 1; }
在编译时,参数如下:
编译结果如下:
耗时:9s
注意:我的电脑为双核,所以开启了4个线程分别运行。
未优化的如下:
// #include <omp.h> #include <stdio.h> #include <stdlib.h> #include <windows.h> void Test(int n) { int j; for (int i = 0; i < 100000000; ++i) { //do nothing, just waste time j++; } printf("%d, ", n); } int main(int argc, char *argv[]) { int i; // #pragma omp parallel for for (i = 0; i < 100; ++i) Test(i); system("pause"); return 1; }
在编译时,参数如下:
编译结果如下:
耗时: 24s
不难得知,此程序使用的为单核单线程 ,所以运行速度远远低于使用多核多线程的速度。