MPI_RUBY 的引入

MPI_RUBY 是一个MPI的ruby实现版本,它利用了ruby语言的一些强项来简化mpi编程。它不需要你管理在c++中 

buffer和datatype,它都是把要传递的数据当作对象。不管运行效率如何,它看起来很简洁,适合于在开发c++版本之前的原型开发&验证(我想这是有好处的)。我有意在机上安装一个,这就是本文的目的。

以下是一个例子:Allreduce所有的id

printf("Hello, I am %d of %d/n", MPI::Comm::WORLD.rank(), MPI::Comm::WORLD.size())

$rank = MPI::Comm::WORLD.rank()
$sum = MPI::Comm::WORLD.allreduce($rank, MPI::Op::SUM)
puts "sum of the ranks = #{$sum}"

注意:在这个环境下,它不需要什么MPI_Init 和 MPI_Finalize ,环境会帮我们搞定。

同时也不需要管理buffer&类型,而且它很面向对象的写法很不错!

另外一个例子:求PI

# Parallel computation of pi in Ruby

PI25DT = 3.141592653589793238462643
NINTERVALS = 10000

$rank = MPI::Comm::WORLD.rank()
$size = MPI::Comm::WORLD.size()

$startwtime = MPI.wtime()
$h = 1.0 / NINTERVALS
$sum = 0.0
($rank + 1).step(NINTERVALS, $size) do |i|
 x = $h * (i - 0.5)
 $sum += (4.0 / (1.0 + x**2))
end
mypi = $h * $sum

$pi = MPI::Comm::WORLD.reduce(mypi, MPI::Op::SUM, 0)

if $rank == 0 then
 printf "pi is ~= %.16f, error = %.16f/n", $pi, ($pi - PI25DT).abs
 $endwtime = MPI.wtime()
 puts "wallclock time = #{$endwtime-$startwtime}"
end

看起来是不是很不错?!

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值