简介OpenMP是一种用于共享内存并行系统的多线程程序设计方案,本文向大家介绍C++并行计算之OpenMP快速入门,感兴趣的朋友可以参考一下。
OpenMP是一种用于共享内存并行系统的多线程程序设计方案,支持的编程语言包括C、C++和Fortran。OpenMP提供了对并行算法的高层抽象描述,特别适合在多核CPU机器上的并行程序设计。编译器根据程序中添加的pragma指令,自动将程序并行处理,使用OpenMP降低了并行编程的难度和复杂度。当编译器不支持OpenMP时,程序会退化成普通(串行)程序。程序中已有的OpenMP指令不会影响程序的正常编译运行。
在VS中启用OpenMP很简单,很多主流的编译环境都内置了OpenMP。在项目上右键->属性->配置属性->C/C++->语言->OpenMP支持,选择“是”即可。
一般需要并行运算的部分都是大量的循环操作。
#include <omp.h>
#include <iostream>
using namespace std;
int main()
{
#pragma omp parallel
{
printf("C++实战网(www.cppszw.com), I am Thread %d\n", omp_get_thread_num());
}
return 0;
}
结果:(笔者电脑是4核,所以打印4个)
OpenMP还提供了一组API函数用于控制并发线程的某些行为,下面是一些常用的OpenMP API函数以及说明
#include <omp.h>
#include <windows.h>
#include <iostream>
using namespace std;
void Test(int n)
{
for (int i = 0; i < 10000; i++)
{
for (int j = 0; j < 10000; j++)
{
// do nothing, just waste time
}
}
printf("%d, ", n);
}
int main()
{
float startTime = omp_get_wtime();
for (int i = 0; i < 10; i++)
{
Test(i);
}
float endTime = omp_get_wtime();
printf("time without OpenMP: %f\n", endTime - startTime);
startTime = endTime;
#pragma omp parallel for
for (int i = 0; i < 10; i++)
{
Test(i);
}
endTime = omp_get_wtime();
printf("time with OpenMP: %.3f\n", endTime - startTime);
}
结果:
更多例子可前往获取: https://github.com/wipping/openMP_demo
本文向大家介绍一个C++实战项目:基于Duilib的CEF3中C++与JS函数互相调用示例,主要涉及开发技术点为DuiLib界面开发、谷歌浏览器CEF插件开发、C++与JavaScript的相互调用,具有一定的C++实战价值,感兴趣的朋友可以参考一下。
一般好的软件程序是不应该占用太多CPU时间和内存空间的,一般在自己的学习过程中,我们常常忽略这一点,虽然功能实现没有问题,但是程序占用太多CPU时间,这在实际开发中是不允许的,一个好的程序员也应该注意这个问题。本文就CPU使用率问题做一些简单介绍,为开发稳定健壮的程序提供参考。
本文向大家介绍一个C++实战项目:C++实现MD5、DES加密,主要涉及MD5加密、DES加解密算法,具有一定的C++实战价值,感兴趣的朋友可以参考一下。
本文向大家介绍一个C++实战项目:C++11实现多线程下载操作类,很多时候我们需要同时在网络上下载文件,那么就需要一个类来管理多线程下载,提高下载速度,具有一定的C++实战价值,感兴趣的朋友可以参考一下。
本文向大家介绍一个C++实战项目:C++程序崩溃生成Dump文件。在程序运行时候崩溃是头疼的时,本实战项目可在程序运行崩溃时在程序目录下生成Dump文件,具有一定的C++实战价值,感兴趣的朋友可以参考一下。
本文向大家介绍一个C++实战项目:C++制作一个简单的程序依赖DLL打包工具,有时候我们需要对某个程序进行打包,却不知道该程序依赖哪些动态库,这个工具可实现程序的一键打包功能,具有一定的C++实战价值,感兴趣的朋友可以参考一下。