当前位置: 首页 > news >正文

windows C++-并行编程-将使用缩减变量的 OpenMP 循环转换为使用并发运行时

此示例介绍如何将使用 reduction 子句的 OpenMP parallelfor loop 转换为使用并发运行时。

OpenMP reduction 子句允许指定一个或多个线程专用变量,这些变量受并行区域末尾的缩减操作的约束。 OpenMP 预定义一组缩减运算符。 每个减量变量必须是标量(例如 int、long 和 float)。 OpenMP 还定义了一些限制,说明如何在并行区域中使用缩减变量。

并行模式库 (PPL) 提供 concurrency::combinable 类,此类提供了可重用的线程本地存储,该存储允许你执行细化的计算,然后将这些计算合并为最终的结果。 类 combinable 是对标量和复杂类型执行操作的模板。 若要使用 combinable 类,请在并行构造的正文中执行子计算,然后调用 concurrency::combinable::combine 或 concurrency::combinable::combine_each 方法生成最终结果。 combine 和 combine_each 方法都采用组合函数来指定如何组合每对元素。 因此,类 combinable 不限于一组固定的缩减运算符。

示例

此示例使用 OpenMP 和并发运行时来计算前 35 个 Fibonacci 数字的总和。

// concrt-omp-fibonacci-reduction.cpp
// compile with: /EHsc /openmp
#include <ppl.h>
#include <iostream>using namespace concurrency;
using namespace std;// Computes the nth Fibonacci number.
// This function illustrates a lengthy operation and is therefore
// not optimized for performance.
int fibonacci(int n)
{if (n < 2)return n;// Compute the components in parallel.int n1, n2;parallel_invoke([n,&n1] { n1 = fibonacci(n-1); },[n,&n2] { n2 = fibonacci(n-2); });return n1 + n2;
}// Uses OpenMP to compute the sum of Fibonacci numbers in parallel.
void omp_parallel_fibonacci_sum(int count)
{int sum = 0;#pragma omp parallel for reduction(+ : sum)for (int i = 0; i < count; ++i){sum += fibonacci(i);}wcout << L"The sum of the first " << count << L" Fibonacci numbers is " << sum << L'.' << endl;
}// Uses the Concurrency Runtime to compute the sum of Fibonacci numbers in parallel.
void concrt_parallel_fibonacci_sum(int count) 
{combinable<int> sums;parallel_for(0, count, [&sums](int i){sums.local() += fibonacci(i);});wcout << L"The sum of the first " << count << L" Fibonacci numbers is " << sums.combine(plus<int>()) << L'.' << endl;
}int wmain()
{const int count = 35;wcout << L"Using OpenMP..." << endl;omp_parallel_fibonacci_sum(count);wcout << L"Using the Concurrency Runtime..." << endl;concrt_parallel_fibonacci_sum(count);
}

本示例生成以下输出。

Using OpenMP...
The sum of the first 35 Fibonacci numbers is 14930351.
Using the Concurrency Runtime...
The sum of the first 35 Fibonacci numbers is 14930351.
编译代码

复制示例代码,并将它粘贴到 Visual Studio 项目中,或粘贴到名为 concrt-omp-fibonacci-reduction.cpp 的文件中,再在 Visual Studio 命令提示符窗口中运行以下命令。

cl.exe /EHsc /openmp concrt-omp-fibonacci-reduction.cpp

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 71-java 导致线程上下文切换的原因
  • TensorRT-LLM高级用法
  • 2024 年高教社杯全国大学生数学建模竞赛 C 题 农作物的种植策略(详细思路+matlab代码+python代码+论文范例)
  • android系统源码12 修改默认桌面壁纸--SRO方式
  • ELK学习笔记(二)——使用K8S部署Kibana8.15.0
  • uniapp小程序下载缓存服务器上的图片
  • iPhone手机清理软件:照片清理功能全解析
  • Mysql数据库表结构迁移PostgreSQL
  • [论文笔记]Making Large Language Models A Better Foundation For Dense Retrieval
  • Nginx跨域运行案例:云台控制http请求,通过 http server 代理转发功能,实现跨域运行。(基于大华摄像头WEB无插件开发包)
  • Mac+Pycharm配置PyQt6教程
  • 调研-libevent
  • github 工作流自动编译 ffmpeg for windows on arm
  • Python中的属性装饰器:解锁更优雅的编程之道
  • 数据结构--经典排序之选择排序(超详细!!)
  • [js高手之路]搞清楚面向对象,必须要理解对象在创建过程中的内存表示
  • 【译】理解JavaScript:new 关键字
  • JavaScript 奇技淫巧
  • Less 日常用法
  • Puppeteer:浏览器控制器
  • Python实现BT种子转化为磁力链接【实战】
  • Sublime Text 2/3 绑定Eclipse快捷键
  • Swift 中的尾递归和蹦床
  • UMLCHINA 首席专家潘加宇鼎力推荐
  • 基于Dubbo+ZooKeeper的分布式服务的实现
  • 解决jsp引用其他项目时出现的 cannot be resolved to a type错误
  • 码农张的Bug人生 - 初来乍到
  • 前端技术周刊 2019-02-11 Serverless
  • 使用Gradle第一次构建Java程序
  • 手写一个CommonJS打包工具(一)
  • 思维导图—你不知道的JavaScript中卷
  • 移动端唤起键盘时取消position:fixed定位
  • 06-01 点餐小程序前台界面搭建
  • gunicorn工作原理
  • 微龛半导体获数千万Pre-A轮融资,投资方为国中创投 ...
  • 曾刷新两项世界纪录,腾讯优图人脸检测算法 DSFD 正式开源 ...
  • ​LeetCode解法汇总2808. 使循环数组所有元素相等的最少秒数
  • #### go map 底层结构 ####
  • #### golang中【堆】的使用及底层 ####
  • #[Composer学习笔记]Part1:安装composer并通过composer创建一个项目
  • (13)[Xamarin.Android] 不同分辨率下的图片使用概论
  • (2.2w字)前端单元测试之Jest详解篇
  • (4) PIVOT 和 UPIVOT 的使用
  • (arch)linux 转换文件编码格式
  • (pycharm)安装python库函数Matplotlib步骤
  • (Pytorch框架)神经网络输出维度调试,做出我们自己的网络来!!(详细教程~)
  • (二)换源+apt-get基础配置+搜狗拼音
  • (十二)devops持续集成开发——jenkins的全局工具配置之sonar qube环境安装及配置
  • (十三)MipMap
  • (四)库存超卖案例实战——优化redis分布式锁
  • ***监测系统的构建(chkrootkit )
  • .net core 6 集成 elasticsearch 并 使用分词器
  • .NET Core6.0 MVC+layui+SqlSugar 简单增删改查
  • .NET CORE使用Redis分布式锁续命(续期)问题
  • .net6 webapi log4net完整配置使用流程