当前位置: 代码迷 >> 多核软件开发 >> OpenMp并行计算,为嘛双核没单核快,还比单核慢三倍解决思路
  详细解决方案

OpenMp并行计算,为嘛双核没单核快,还比单核慢三倍解决思路

热度:8086   发布时间:2013-02-26 00:00:00.0
OpenMp并行计算,为嘛双核没单核快,还比单核慢三倍
这个是没使用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(...)
{
...
}
}