这个是没使用OpenMp的代码:50万*5000*次乘法运算 cpu占用50%也就是一个核心,耗费大概十秒
- C/C++ code
#include "stdafx.h" #include <Windows.h> int _tmain(int argc, _TCHAR* argv[]) { unsigned long ticks1,ticks2; ticks1 = GetTickCount(); unsigned long a=1; for (int i = 1; i < 500000; i++) { for (int i = 1; i < 5000; i++) { a=1; a=a*i; } } printf("%d\n",a); ticks2 = GetTickCount(); ticks1=ticks2-ticks1; printf("程序经过毫秒数:%d",ticks1); getchar(); return 0; }
这个是使用OpenMp的运算。
添加omp文件头
将 Project 的Properties中C/C++里Language的OpenMP Support开启
在要使用openmp的地方 添加 #pragma omp parallel
结果:cpu占用100%两个核心,但是耗时30秒。。。。。。。搞不懂呀
#include "stdafx.h"
#include <Windows.h>
#include <omp.h>
int _tmain(int argc, _TCHAR* argv[])
{
unsigned long ticks1,ticks2;
ticks1 = GetTickCount();
unsigned long a=1;
#pragma omp parallel for
for (int i = 1; i < 500000; i++)
{
for (int i = 1; i < 5000; i++)
{
a=1;
a=a*i;
}
}
printf("%d\n",a);
ticks2 = GetTickCount();
ticks1=ticks2-ticks1;
printf("程序经过毫秒数:%d",ticks1);
getchar();
return 0;
}
------解决方案--------------------------------------------------------
不会,#pragma omp 有问题吧?
大概你是每个核心都算了一遍。
#pragma omp parallel 后面写公有或似有变量
{
#pragma omp for
for(...)
{
...
}
}