C#使用MPI进行高性能计算
MPI.NET是用于Microsoft.NET环境的高性能、易于使用的消息传递接口(MPI)实现。mpi是编写在分布式内存系统(如计算集群)上运行的并行程序的事实上的标准,并且得到了广泛的实现。大多数MPI实现为在C、C++和FORTRAN中编写MPI程序提供了支持。mpi.net提供了对所有.net语言(尤其是c)的支持,并包含重要的扩展(例如对象的自动序列化),使构建在群集上运行的并行程序更加容易。
MPI.NET
作者的Github:https://github.com/jmp75/MPI.NET
文本代码:等待上传
创建项目
注意Framework版本不要低于 4.6.2!
安装类库
使用Nuget
安装类库:
使用MPI
public void RunMpiAction(string[] args)
{
using (new MPI.Environment(ref args))
{
//切割数据
int rank = Communicator.world.Rank - 1;
int ranks = Communicator.world.Size;
rank += 1;
if (rank == 0){
//数据分为groups组
int groups = 5;
for (int i = 1; i < ranks; i++)
{
Communicator.world.Send(groups, i, i);
}
}
if (rank != 0)
{
int groups = Communicator.world.Receive<int>(0, rank);
Console.WriteLine("rank {0} , groups {1}", rank, groups);
var list = new List<string>() { $"{rank} - a", $"{rank} - b", $"{rank} - c" };
//rank -= 1;
Communicator.world.Send(list, 0, rank);
Console.WriteLine("current rank is {0}", rank);
}
if (rank == 0){
var result = new List<string>();
for (int i = 1; i < ranks; i++)
{
var list = Communicator.world.Receive<List<string>>(i, i);
result.AddRange(list);
}
//接受结果
Console.WriteLine("current rank is {0}", rank);
for (int i = 0; i < result.Count; i++){
Console.WriteLine(result[i]);
}
}
}
}
运行结果
需要安装
msmpi
,不要点击调试运行,需要使用命令执行。
C#使用MPI进行高性能计算的更多相关文章
- [译]学习IPython进行交互式计算和数据可视化(六)
第五章:高性能并行计算 一个反复被提及的反对使用Python进行高性能数值计算的言论是这种语言是动态解释型的,速度太慢.一种编译型低级语言,如C,能提供比它快几个数量级的运算速度.我们在第三章--使用 ...
- mpi4python
转载:https://zhuanlan.zhihu.com/p/25332041 前言 在高性能计算的项目中我们通常都会使用效率更高的编译型的语言例如C.C++.Fortran等,但是由于Python ...
- 【MPI学习2】MPI并行程序设计模式:对等模式 & 主从模式
这里的内容主要是都志辉老师<高性能计算之并行编程技术——MPI并行程序设计> 书上有一些代码是FORTAN的,我在学习的过程中,将其都转换成C的代码,便于统一记录. 这章内容分为两个部分: ...
- MPI基础知识
一.MPI 知识点 1.MPI是什么 MPI是一个跨平台的通信协议,用于编写并行计算机,支持点对点和广播.MPI是一个信息传递应用程序接口,包括协议和语义说明,他们指明其如何在各种实现中发挥其特性.M ...
- MPI集群搭建
高性能计算 ubantu下集群搭建 参考博客:https://blog.csdn.net/u012304016/article/details/52423738(尊重别人的知识产权),一些细节 ...
- 查找素数Eratosthenes筛法的mpi程序
思路: 只保留奇数 (1)由输入的整数n确定存储奇数(不包括1)的数组大小: n=(n%2==0)?(n/2-1):((n-1)/2);//n为存储奇数的数组大小,不包括基数1 (2)由数组大小n.进 ...
- kmeans算法并行化的mpi程序
用c语言写了kmeans算法的串行程序,再用mpi来写并行版的,貌似参照着串行版来写并行版,效果不是很赏心悦目~ 并行化思路: 使用主从模式.由一个节点充当主节点负责数据的划分与分配,其他节点完成本地 ...
- C#在高性能计算领域为什么性能却如此不尽人意
C#的优雅,强大IDE的支持,.net下各语言的二进制兼容,自从第一眼看到C#就被其良好的设计吸引.一直希望将其应用于高性能计算领域,长时间努力却效果却不尽如人意. 对于小的测试代码用例而言,C#用2 ...
- MPI Maelstrom - POJ1502最短路
Time Limit: 1000MS Memory Limit: 10000K Description BIT has recently taken delivery of their new sup ...
随机推荐
- JS遍历表格获取每行数据及每个单元格数据
/** * 遍历表格获取每行数据及每个单元格数据 * @param tableID 表格ID */ function GetTable(tableID) { var milasUrl = {};//新 ...
- Python+request 登录接口reponse的返回值token跨py文件的传递《二》
主要使用场景: 一般我们在进行接口测试时,依赖登录接口后reponse中的某些返回值,因此需要将login接口单独写一个py文件,另外的py文件均可调用login的reponse返回值使用.共用登录接 ...
- harbor批量导出镜像
工作中遇到一个问题,要把某个项目的harbor镜像库全部迁移到其他环境的harbor上,由于网络不通,只能导出来,传给同事,让同事导入到他们的harbor上: 记录下我的操作方法. 参考博客园的一篇博 ...
- Tpcc-mysql 结果解读
原文:https://blog.csdn.net/frockee/article/details/87812329 1. 填坑经验 不要使用tidb的tpcc测试程序(非标准,tidb修改过),使 ...
- GitLab 如何删除 Forked from
在 GitLab 中有 Forked from. 如何删除这个? 在 Settings 中选择 General 然后选择 Advanced 高级选项 然后单击移除 fork 关系的选项,你就可以将这个 ...
- 国庆集训Day1
T1 divide 题意: 有\(n\)个数 \(a_1, a_2,..., a_n\) 有m个数\(b_1, b_2,..., b_n\) 令\(a = a_1\times a_2\,\times ...
- NSMutableArray
NSMutableArray 是一个可变数组,是NSArray的子类,但是不可以添加空值 创建NSMutableArray的方法 +(id)arrarWithCapacity:(NSInteger)n ...
- 十八、centos7网络属性配置
一.为什么需要这个 服务器通常有多块网卡,有板载集成的,同时也有插在PCIe插槽的.Linux系统的命名原来是eth0,eth1这样的形式,但是这个编号往往不一定准确对应网卡接口的物理顺序.为解决这类 ...
- table表格整体居中
代码: <div style="text-align:center"> <table border="1" cellpadding=" ...
- 表单事件集锦-input
最近在写一个手机端提交表单的项目,里面用了不少input标签,因为项目不太忙,所以,想做的完美点,但是遇到了一些问题,比如:页面中的必填项如果有至少一项为空,提交按钮就是不能提交的状态,所以需要对所有 ...