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 ...
随机推荐
- 记录一下关于DQN的想法
下载了几份代码,就两份没有报错通过了 DQN玩FlappyBird https://github.com/yenchenlin/DeepLearningFlappyBird DQN玩Cartpole ...
- java-利用BitSet查找素数
高效存储为序列可以使用位积,由于位集将位包装在字节里,所以位集要比使用Boolean对象的ArrayList更高效. 自己的代码,素数是false public class Sieve { @Test ...
- nginx中ngx_http_core_module模块
http核⼼心模块指令:套接字相关的配置3.1 server{ }设置虚拟服务器器的配置Syntax: server { ... }Default: —Context: httpserver {lis ...
- 五、vue基础--生命周期函数
1.创建阶段: a.beforeCreate:Vue已经创建了,但是data,methods都还没有被创建好 b.created:datamethods都被创建好了 c.beforeMount:模板经 ...
- c++代码中“引用”的使用
这些上机实验在Qt5.9上完成的,具体步骤 结构体引用 #include <iostream> #include<stdlib.h> using namespace std; ...
- Codeforces Round #596 (Div. 2, based on Technocup 2020 Elimination Round 2) B2. TV Subscriptions (Hard Version)
链接: https://codeforces.com/contest/1247/problem/B2 题意: The only difference between easy and hard ver ...
- python自动华 (二)
Python自动化 [第二篇]:Python基础-列表.元组.字典 本节内容 模块初识 .pyc简介 数据类型初识 数据运算 列表.元组操作 字符串操作 字典操作 集合操作 字符编码与转码 一.模块初 ...
- LINQ to Entities不识别C#语法报错
错误:报错不识别string.Join…… var QueryWithStandard=from a in listA join b in listB on a.ID equals b.AID int ...
- 019-020_STM32程序移植之_W5500连接noenet
(一)本次实验是将数据通过W5500模块传输到onenet平台上面去 (二)显示内容,onenet平台数据变化曲线 (三)相关网站: 1.onenet网站:https://open.iot.10086 ...
- [Luogu] 打砖块
题面:https://www.luogu.org/problemnew/show/P1174 题解:https://www.zybuluo.com/wsndy-xx/note/1145569