parallel-processing - 如何将 MPI 与共享内存一起使用?
问题描述
我有两个要相乘的矩阵。我想将 MPI 与共享内存一起使用,但不明白我该如何做到这一点。
我不明白我应该在准备阶段做什么。如果我的流的rank是0,那么我需要初始化窗口,但是如果rank不是0呢?
如果一个窗口是所有线程的共享内存位置,那么如何同步它的使用?
另外,我不明白如何并行化乘法,我知道线程数。应该如何改变循环的参数?
我一块一块地整理了几个例子,但我怀疑我的代码是否正确。请给我一个提示。谢谢!
real :: a(5,6), b(6,4), result(5,6)
call MPI_INIT(ierror)
call MPI_COMM_SIZE(MPI_COMM_WORLD, size_Of_Cluster, ierror) ! get count of process
call MPI_COMM_RANK(MPI_COMM_WORLD, process_Rank, ierror) ! get if of current process
MPI_Win window;
MPI_Win_create(&result, sizeof(&result), sizeof(&result), MPI_INFO_NULL, MPI_COMM_WORLD, &window);
do i = 1,5
result[i,j] = 0
do j = 1,6
result[i,j] = result[i,j] + a[i,j] * b[j,i]
end do
end do
MPI_Win_fence(0, window);
if(process_Rank> 0)
{
// Push my value into the first integer in MPI process 0 window
MPI_Accumulate(&result, 1, MPI_INT, 0, 0, 1, MPI_INT, MPI_SUM, window);
}
MPI_Win_fence(0, window);
if(my_rank == 0)
{
printf("[MPI process 0] result ");
}
MPI_Win_free(&window);
MPI_Finalize();
解决方案
推荐阅读
- vue.js - 如何使用参数解决 Vue 路由器更改错误?
- dart - Dart RegExp 不返回匹配项
- excel-formula - 如果今天的日期介于日期范围之间,则突出显示一个单元格
- swift - 在 Swift 中按下按钮时多次更新标签文本
- excel - 无法将表格与 Excel 中的 VBA 表头一起导出为 CSV
- typescript - 无法从 Firestore 获取文档
- java - 构建一个接受任何类型请求的休息包装器
- azure-databricks - 创建 DataBricks Delta 表时检测 CSV 标头?
- python - 导入 scipy 和 sklearn 模块的语法
- php - 使用 laravel elequent 在 MySQL 中搜索波斯语字符串