MPI群通信与矩阵乘法的Fox算法实现

2023-11-14

原本以为,MPI天生只能在Linux上运行。但这次却发现了Intel MPI Library 这个好用的东西。基本不需要设置,安上之后,用自己能登录windows的帐号和密码注册就行了。虽然不是局域网上的机器,但也可以让我的双核CPU达到100%(平时开个Matlab什么的都才是50%,软件优化真是关键啊)。

FOX算法有一些恶心的要求:输入的矩阵必须是方阵,而且进程必须为平方数,方阵必须能均匀划分给每个进程。其实方阵的条件并不一定必须,只是会增加编程复杂性。

MPI中,虽然最精华的就6条语句,但仅用这6条,还是比较麻烦的。使用一些高级语句,能提高程序性能或是简化代码。

MPI_Bcast,这个是必须要提的。能把这样的语句 if (task_id == root) { send to child_id } else { recieve from root} 仅用个bcast就替换了。

MPI_Isend/MPI_Irecv是异步发送和接收的语句,显然比MPI_Send/MPI_Recv这样的阻塞语句更可能提高性能。另外,还可以避免循环死锁。当然,避免循环死锁的方法还有使用奇偶法、MPI_Sendrecv等。

虽然,理解MPI_Cart_create等一系列的笛卡尔结构操作还是有些难度的,但却是十分有用的进程逻辑功能划分方法。特别在FOX算法中,每行是个通信子域,每列也是。这样就会有n+n个子域(尽管有划分重叠),每个域的进程都仅与域中的其它进程有信息交换,这样仅用bcast一语就能传完数据。

以下是代码。比较简单。就不说明了。

//  MatrixMulFox.cpp
//  Jarod 2007.12.3

#include 
" mpi.h "

#include 
< algorithm >
#include 
< fstream >
#include 
< cmath >

const   int  root_id  =   0 ;
const   int  max_procs_size  =   16 ;

int  main( int  argc, char   * argv[])
... {
    
double start_time, end_time, time;
    
int procs_id, procs_size;
    MPI_Status status;
    MPI_Request reqSend, reqRecv;
    MPI_Init(
&argc,&argv);
    start_time 
= MPI_Wtime();
    MPI_Comm_size(MPI_COMM_WORLD,
&procs_size);
    MPI_Comm_rank(MPI_COMM_WORLD,
&procs_id);

    
// 参数检查
    int N=0;
    
...{
        
for (int i=1; i<argc; ++i ) ...{
            
char * pos =strstr(argv[i], "-N=");
            
if ( pos!=NULL) 
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MPI群通信与矩阵乘法的Fox算法实现 的相关文章

  • 从 Java 运行 MATLAB 函数

    我在 MATLAB 中有一个 m 文件 我想从 Java 调用该文件 并以字符串或 Java 中的任何形式获取解决方案 这听起来很简单 但由于某种原因我无法让它发挥作用 我试过这个 matlab nosplash wait nodeskto
  • MATLAB - GUI 和 OPC 服务器

    我想在 MATLAB 中设计一个图形用户界面 可以使用 MATLAB 的过程控制对象链接和嵌入 OPC 工具箱连续读取数据 我怎样才能实现这个 我已经设计了图形用户界面 但我无法将数据读入图形用户界面 就这样做 type opctoolMA
  • Codility 钉板

    尝试了解 Codility NailingPlanks 的解决方案 问题链接 https app codility com programmers lessons 14 binary search algorithm nailing pla
  • 检索受“rowspan”影响的行的列索引的最有效方法是什么?

    考虑下表 table thead tr th th th A th th B th th C th tr thead tbody tr th 1 th td Apples td td Oranges td td Pears td tr tb
  • 如何从一组重叠的圆计算多边形集?

    这个问题是一些计算细节的扩展这个问题 https stackoverflow com questions 1667310 combined area of overlapping circles 假设有一组 可能重叠的 圆 并且希望计算这组
  • 如何将无向图转换为 DAG?

    The 维基页面 http en wikipedia org wiki Directed acyclic graph Relation to other kinds of graphs says 任何无向图都可以通过为其顶点选择总顺序并将每
  • 高维最近邻搜索的最佳数据结构

    我实际上正在处理高维数据 50 000 100 000 个特征 并且必须对其执行最近邻搜索 我知道随着维度的增长 KD 树的性能很差 而且我还了解到 一般来说 所有空间分区数据结构都倾向于对高维数据执行详尽的搜索 此外 还有两个重要事实需要
  • 固定大小集以包含给定集的最大数量

    我有大约 1000 组尺寸 1 4 1 3 3 5 6 4 5 6 7 5 25 42 67 100 是否有可能找到包含最大数量的给定集合的大小为 20 的集合 检查每一个100 80 20 集 效率低下 我不太确定这是 NP 完全的 考虑
  • Matlab颜色检测

    我试图一致地检测同一场景的图像之间的某种颜色 这个想法是根据颜色配置文件识别一组对象 因此 例如 如果给我一个带有绿色球的场景 并且我选择绿色作为我的调色板的一部分 我想要一个具有反映它检测到球的矩阵的函数 任何人都可以为这个项目推荐一些
  • 解释一下从 N 个给定集合中的每一个中给出第 K 个最大数字的示例?

    今天我尝试解决一个Facebook 编程挑战赛 https facebook interviewstreet com recruit challenges 我遇到的挑战是 酒吧问题 可以找到here https github com alo
  • 有人可以解释以下异或属性

    我的一个论坛提到给定的数组n数字 arr 0 n 1 以下条件成立 is the xor运算符 f l r f 0 r f 0 l 1 where f l r arr l arr l 1 arr r 我检查了上面的数组数量和不同的值l an
  • getappdata 在 MATLAB 中返回空矩阵

    我有一段代码 我在其中使用setappdata然后我使用以下方式调用数据getappdata即使它不为空 它也会返回一个空矩阵 我的一段简化代码如下 function edit1 Callback hObject eventdata han
  • 在Matlab中对字符进行分组并形成矩阵

    我有 26 个字符 A 到 Z 我将 4 个字符组合在一起 并用空格分隔以下 4 个字符 如下所示 abcd efgh ijkl mnop qrst uvwx yz 我的Matlab编码如下 str abcdefghijklmnopqrst
  • 在 C++ 中通过引用传递 std 算法谓词

    我正在尝试从 a 中删除元素std list并保留已删除元素的一些统计信息 为此 我使用列表中的remove if 函数 并且我有一个谓词 我想使用这个谓词来收集统计数据 这是谓词的代码 class TestPredicate privat
  • Python 或 C 语言中的 Matlab / Octave bwdist()

    有谁知道 Matlab Octave bwdist 函数的 Python 替代品 此函数返回给定矩阵的每个单元格到最近的非零单元格的欧几里得距离 我看到了一个 Octave C 实现 一个纯 Matlab 实现 我想知道是否有人必须用 AN
  • 0-1背包算法

    以下 0 1 背包问题是否可解 浮动 正值和 浮动 权重 可以是正数或负数 背包的 浮动 容量 gt 0 我平均有 这是一个相对简单的二进制程序 我建议用蛮力进行修剪 如果任何时候你超过了允许的重量 你不需要尝试其他物品的组合 你可以丢弃整
  • 如何仅使用单个数组在 JavaScript 中模拟调用堆栈

    我正在看维基百科页面 https en wikipedia org wiki Call stack在调用堆栈上 并尝试理解这个图像 据我所知 哈哈 const memory memory 0 3 top of stack pointer m
  • 异或交换可以扩展到两个以上的变量吗?

    我一直在尝试将异或交换扩展到两个以上的变量 例如n变量 但我没有得到比这更好的地方3 n 1 对于两个整型变量x1 and x2你可以像这样交换它们 swap x1 x2 x1 x1 x2 x2 x1 x2 x1 x1 x2 所以 假设你有
  • 在常数空间中创建 1..N 的随机排列

    我正在寻找枚举固定空间中数字 1 N 的随机排列 这意味着我无法将所有数字存储在列表中 原因是 N 可能非常大 超过可用内存 我仍然希望能够一次遍历这样一个数字的排列 只访问每个数字一次 我知道对于某些 N 可以这样做 许多随机数生成器随机
  • 如何有效地找到距给定点最远的点(从一组点中)?

    我正在寻找一种算法或数据结构来解决以下问题 给你一组点 S 然后你会得到另一个点形式的 Q 查询 对于每个查询 找到集合中距离给定点最远的点 集合中最多有 10 5 个点和 10 5 个查询 所有点的坐标都在 0 到 10 5 范围内 我想

随机推荐

  • MYSQL中概念模型的基本概念_数据库基本概念

    一 数据抽象 物理抽象 概念抽象 视图级抽象 内模式 模式 外模式 模型是对现实世界的抽象 在数据库技术中 我们用数据模型的概念描述数据库的结构和语义 对现实世界的数据进行抽象 从现实世界的信息到数据库存储的数据以及用户使用的数据是一个逐步
  • Qt中传引用

    定义函数 void ProcessA QByteArray buf int start pos QVector
  • Redis 7 第八讲 集群模式(cluster)架构篇

    集群架构 Redis 集群架构图 集群定义 Redis 集群是一个提供在多个Redis节点间共享数据的程序集 Redis集群可以支持多个master 应用场景 Redis集群支持多个master 每个master又可以挂载多个slave 读
  • go 调用dll char*传输

    参考 http www voidcn com article p ofnbgvoa bpv html https stackoverflow com questions 53721215 syscall mustloaddll mustfi
  • 基于EasyCode 的mybatis-plus 的代码生成器, 支持多表多条件分页查询

    注意mapper xml不要用 AS 来定义表的别名字段的别名 where标签不要用大写 ew是mybatisplus写死的 不要修改 使用mybatis的 Select注解来写page有bug 例子 Select
  • BZOJ4817 [Sdoi2017]树点涂色(洛谷P3703)

    LCT 线段树 BZOJ题目传送门 洛谷题目传送门 码力不行啊 操作1就是access啦 操作2就是 w x w y 2 w lca x y 1 w x w y 2
  • 利用Libev写一个简单的client和server程序

    利用Libev写一个简单的client和server程序 common h程序 ifndef COMMON H define COMMON H include
  • 15 移动端app自动化测试 - 软件测试

    软件测试所有内容笔记正在陆续更新中 笔记已经在本地记录 全部为自己手动记录的笔记及总结 正在开始更新中 后续会逐步更新并完善到 软件测试学习内容总结 专栏 本节内容 移动端app自动化测试 文章目录 1 appium环境安装与架构介绍 1
  • linux常用命令:文本编辑

    目录 三 文本编辑 1 vim三种工作模式 2 常用命令 3 插入文本快捷键 4 查找文本快捷键 5 查找文本效果图 6 替换文本快捷键 7 删除文本快捷键 8 复制和粘贴文本快捷键 9 保存退出文本命令 10 参考文章 三 文本编辑 一般
  • 二值分类模型的评价指标

    二值分类模型的评价指标主要有 Precision Recall F Score ROC and AUC ROC Receiver Operating Characteristic ROC曲线的横坐标为false positive rate
  • linux gsoap服务端,gsoap linux下服务器端代码生成与测试

    二 解压压缩包 ios 三 进入cd gSoap gsoap 2 8 gsoap bin linux386函数 四 建立一个头文件serverTest h测试 gsoap ns service name calc gsoap ns serv
  • Python selenium错误:ElementNotInteractableException: Message: element not interactable: Element is not

    脚本没问题 但是执行时报错 selenium common exceptions ElementNotInteractableException Message element not interactable Element is not
  • [Python图像处理] 五.图像融合、加法运算及图像类型转换

    该系列文章是讲解Python OpenCV图像处理知识 前期主要讲解图像入门 OpenCV基础用法 中期讲解图像处理的各种算法 包括图像锐化算子 图像增强技术 图像分割等 后期结合深度学习研究图像识别 图像分类应用 希望文章对您有所帮助 如
  • javascript的深拷贝和浅拷贝

    当我们将一个变量的值赋给另外一个变量时 需要注意用的是深拷贝还是浅拷贝 深拷贝是另外开辟地址空间 浅拷贝是和被拷贝数据地址一样 详见 https github com YvetteLau Step By Step issues 17
  • element-ui 的confirm用法

    在点击函数里变嵌入一下代码 this confirm 确认删除 系统提示 confirmButtonText 确定 cancelButtonText 取消 cancelButtonClass btn custom cancel type w
  • 解决websocket使用@Autowired、@Value获取值为null解决方法

    解决webSocker中使用 Value获取配置文件中值为null 1 常规写法 在webSocker中使用 Value 取值为null 2 原因分析 3 解决问题 1 常规写法 在webSocker中使用 Value 取值为null Co
  • 浏览器渲染原理

    页面渲染流程 浏览器收到web网页的内容后会开始下载 HTML CSS JS 并绘制 DOM 树和 CSS 树 当两颗树都绘制完成后会合并成一个渲染树 然后再经过Layout Paint Composite 最终完成渲染 HTML 解析会被
  • hortonworks/registry配置详解

    1 美图 2 配置 deploy demo db registry cat conf registry yaml registries configuration modules name schema registry className
  • 什么是CSRF攻击,以及如何防御

    什么是CSRF攻击 以及如何防御 1 CSRF攻击的概念 2 CSRF攻击简单案例 2 1 银行网站项目 2 2 危险网站的项目 2 3 测试 3 默认的CSRF防御策略 4前后端分离的CSRF防御策略 1 CSRF攻击的概念 1 CSRF
  • MPI群通信与矩阵乘法的Fox算法实现

    原本以为 MPI天生只能在Linux上运行 但这次却发现了Intel MPI Library 这个好用的东西 基本不需要设置 安上之后 用自己能登录windows的帐号和密码注册就行了 虽然不是局域网上的机器 但也可以让我的双核CPU达到1