OpenMp并行计算,为嘛双核没单核快,还比单核慢三倍
这个是没使用OpenMp的代码:50万*5000*次乘法运算 cpu占用50%也就是一个核心,耗费大概十秒
这个是使用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;
}
#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;
}
...全文
相关推荐
双核编程介绍
并行部分是 OpenMP 程序的核心,使用 OpenMP 指令和函数来控制并行计算的执行。
并行计算程序设计
- **多核优化**:对单核程序进行多核化改造,并实现性能优化。- **多核硬件评估**:理解软件如何在多核硬件上运行。- **扩展处理器视野**:了解不同类型处理器及其编程差异。
OpenMP多线程比较
在本文中,我们使用 OpenMP 在 Win7(X86)+ VS 2008 SP1 环境下进行测试,使用 i5 460m 双核四线程处理器,2.43G 内存。
基于多核CPU的并行计算设计
例如,在双核CPU上,至少需要使用两个线程来确保每个核心都被充分利用。2. **单核CPU的多线程效果**:即使是在单核CPU上,使用多线程也不会降低运行效率。
多核处理器平台上使用OpenMP编译指令优化n皇后算法.pdf
例如,对于一个100步的循环,如果在双核环境下,两个线程分别处理50步,理论上可以将执行时间减半。文章指出,使用OpenMP的一个关键优点是代码的可移植性和可读性。


进程/线程/DLL

