简述

之前写过一个只能在2幂次数的节点环境下使用的树形结构求和
【MPI编程】2幂节点的树形求和(高性能计算)
稍微修改了一下对应代码,就可以使用了。其实就是在逻辑上扩充一下为2的幂数。也就是说接受节点上的只要不越界就是任然要接受。如果越界了,就说明对应的在后面的节点是不存在的。那么就保留当前节点就好了。

运行效果

输入为一个文件:
内容为:

19
1 2 3 4 5 6 7 8 9 10
2 3 4 5 6 7 0 0 2

代码

#include<stdio.h>
#include<string.h>
#include<mpi.h>
#pragma warning(disable : 4996)
#define MAX_STRING 100
using namespace std;
#include <fstream>
#include <iostream>int main(void) {int len;double scalar, local_sum = 0;int comm_sz;int my_rank;int divided_len;int last_divided;int begin_i;int oper_N = 2;MPI_Init(NULL, NULL);MPI_Comm_size(MPI_COMM_WORLD, &comm_sz);MPI_Comm_rank(MPI_COMM_WORLD, &my_rank);// 假设 n % comm_sz = 0 整除// 只有一个线程的时候不操作if (comm_sz <= 1) {MPI_Finalize();return 0;}ifstream cin("D:\\C++\\VS\\repo\\MPI-DEMO\\MPI-DEMO\\input.txt");cin >> len; // 输入数据长度divided_len = len / comm_sz;last_divided = len % comm_sz;if (my_rank < last_divided) {divided_len++;begin_i = my_rank * divided_len;}else {begin_i = (my_rank - last_divided) * divided_len + ((divided_len + 1)* last_divided);}// 局部和for (int i = 0; i < len; ++i) {cin >> scalar;if (i < begin_i || i >= begin_i + divided_len) continue;else {local_sum += scalar;}}// 假设comm_sz不一定是2的幂// 树形求和while (oper_N <= comm_sz || (oper_N > comm_sz && oper_N / 2 < comm_sz)) {//  recieve if (my_rank % oper_N == 0) {// 只需要控制有些收,有些不收即可if (my_rank + oper_N / 2 < comm_sz) {MPI_Recv(&scalar, 1, MPI_DOUBLE, my_rank + oper_N / 2, 0, MPI_COMM_WORLD, MPI_STATUSES_IGNORE);local_sum += scalar;}}// sendelse if (my_rank % oper_N == oper_N / 2) {MPI_Send(&local_sum, 1, MPI_DOUBLE, my_rank - oper_N / 2, 0, MPI_COMM_WORLD);}else { break; }oper_N *= 2;}if (my_rank == 0) {cout << local_sum << endl;}MPI_Finalize();return 0;
}

【MPI编程】任意数节点的树形求和(高性能计算)相关推荐

  1. 【MPI编程】矩阵向量乘法--解法二(高性能计算)

    简述 有留心过的朋友可能会发现,其实我没写过解法一. 因为解法一就是大家最直观的感受的一种解法. 将矩阵按照行划分,之后,再每个线程都用整个向量跟这个块做内积.之后,传回来一个数值. 这里的方法二, ...

  2. 【MPI编程】矩阵向量乘法--解法三(子矩阵块分解)【高性能计算】

    简述 子矩阵分解,就是说,将原来的矩阵给分解为更小的矩阵块. 让所有的线程都共享有向量(但不共享矩阵) 为了试验简单,这里做了几个简单的假设 矩阵为方阵(n*n) comm_sz(线程数量)和n满足下 ...

  3. 【MPI编程】任意节点数的蝶形求和(高性能计算)

    简述 对于任意情况下的蝶形求和,本质上和任意的树形求和是一样的.只需要做逻辑上的抽象,假设那些点存在补全就好了,然后再加一个限定条件就ok了 代码 #include<stdio.h> #i ...

  4. MPI编程及性能优化

    第1节 MPI简介 1.1 MPI及其历史 与OpenMP相似,消息传递接口(Message Passing Interface,简称MPI)是一种编程接口标准,而不是一种具体的编程语言.该标准是由消 ...

  5. 不许用%和/来实现求任意数除以3的余数

    转载请注明出处,声明如下: 作者:peizhongyou 前几天参加一个编程竞赛,涉及到部分位运算的知识,准备不足挂了.事后在网上搜了一下位运算的介绍看到<位运算之美>这篇博客,其中提到了 ...

  6. 高性能MPI编程实验

    文章目录 一.实验目的 二.实验要求 三.华为云平台的功能特性和实践关键步骤 四.高性能MPI编程开发关键过程 五.WordCount算法的MPI实现关键点 六.MPI编程与MapReduce的比较分 ...

  7. shell编程5-函数与正则表达式

    shell编程5-函数与正则表达式 一.case语句 二.函数 1.函数定义 2.函数的调用 3.应用案例 四.正则表达式 1.什么是正则表达式 2.第一类正则 3.第二类正则 4.实践操作 5.正则 ...

  8. 在winform中从外部拖动节点到树形结构(treeview和listview相互拖动)(一)

    最近一个项目要用到从listview向treeview拖动item,达到从外部拖动图标成为树形结构的一部分,通过查阅资料总结了一些实现方式,分享给大家.这是winform中的例子. 在进行拖放操作之前 ...

  9. C语言输入一个任意数求各位数的和

    C语言输入一个任意数求各位数的和 int main(void) {int x, r, s = 0;scanf("%d", &x);while (x>0){r = x ...

最新文章

  1. <a>标签带参数跳转并在下一个页面接收
  2. Analytic Functions 分析函数(rank over)
  3. 怎么学python-如何轻松学习Python数据分析
  4. 【3.1】学习C++之再逢const
  5. 操作iframe里面的标签内容
  6. 基于Active Directory的用户验证
  7. python写安卓app控制蓝牙_Python脚本利用adb进行手机控制的方法
  8. 字典的定义、字典的特性(成员操作符)
  9. 直播源批量生成小工具.c
  10. spring boot校园商铺系统 毕业设计源码论文+答辩PPT
  11. iOS-常用的第三方库以及实例
  12. stm32f407与计算机的usb通讯,STM32F407 USB通信程序 USB Device 虚拟串口 CDC类 Cubemx生成...
  13. 四成单身、平均年薪19万、最爱买房,原来真实的程序员是这个样子的…...
  14. hao123首页源码 html,html css应用高仿hao123网站
  15. C语言程序软件电脑版,C语言宝典PC版-C语言宝典电脑版下载 v1.7.3--PC6电脑版
  16. 微信小程序 - [完整源码] 全屏左右菜单联动效果,左侧分类与右侧内容联动,类似美团饿了么的点餐页面 “左边菜单,右边内容“ 效果(开箱即用的示例源码,代码干净整洁且注释详细)
  17. 使用JedisClusters批量高效删除redis中的key
  18. python 生成可执行文件_在Cython中创建一个可执行文件
  19. DSP CCS 12.00 芯片:TMS320F28335 建立工程 ,使LED 灯闪烁
  20. 一文带你看懂JAVA IO流,史上最全面的IO教学啦(附送JAVA IO脑图

热门文章

  1. 【Android】MTK Android 编译命令
  2. Android:Plug-in com.android.ide.eclipse.adt was unable to load class android
  3. initWithNibName/awakeFromNib/initWithCoder
  4. JSP自定义标签渲染时报Illegal to flush错误
  5. ArcGIS 10 许可配置
  6. MSSQL 2008 数据库变成可疑状态
  7. ASA防火墙11 应用层检测
  8. 生产环境碰到系统CPU飙高和频繁GC,你要怎么排查?
  9. 初学Windows编程笔记1——窗口和消息
  10. (转载)机器学习知识点(二十九)LDA入门级学习笔记