串行代码的并行MPI实现
Parallel MPI Implementation of Serial Code
我有这样的代码,它使用欧拉方法来解决简单的ODE-dy/dt=2y-2t^2-3。串行代码获取y_0的随机值并计算结果。我想使用MPI向每个节点发送它自己的y_0值并收集结果。我只需要使用MPI_SEND和MPI_RECV吗?这是我的序列号。
#include <iostream>
#include <cmath>
using namespace std;
double tmax = 2.0; //max time value
double h = 0.00000005; //grid spacing
double imax = tmax/h;
double tarray [40000000] = {0}; //array for time values
double xarray [40000000] = {0}; //array for x values
double yarray [40000000] = {0}; //array for y values
//serial calculation for euler's method problem 1.7.1
void final171(double y0)
{
yarray [0] = y0;
for (int k = 0; k < imax; k++) {
tarray[k+1] = tarray[k] + h;
yarray[k+1] = yarray[k] + h * (2 * yarray[k] - 2 * tarray[k] * tarray[k] - 3);
}
cout << "Our Solution Euler: " << yarray[int(imax)];
}
int main(int argc, const char * argv[])
{
clock_t serialStart;
double serialTotal;
srand((unsigned)time(0));
serialStart = clock();
for (int i = 0; i < 128; i++) {
double floor = 0.5, ceiling = 3.5, range = (ceiling - floor);
double rnd = floor + double((range * rand()) / (RAND_MAX + 1.0));
final171(rnd);
cout << ", for y0 = " << rnd << endl;
}
serialTotal = (double)(clock() - serialStart) / (double)(CLOCKS_PER_SEC);
cout << endl << "N = " << imax << endl;
cout << "Serial Time (s)" << serialTotal << endl;
return 0;
}
使用MPI_SEND
/MPI_RECV
当然可以。您也可以使用MPI_SCATTER
,因为它可以做同样的事情,但更有效。
相关文章:
- 如果没有malloc,链表实现将失败
- 如何在c++中实现处理器调度模拟器
- 如何在c++中使用引用实现类似python的行为
- 实现无开销push_back的最佳方法是什么
- 使用简单类型列表实现的指数编译时间.为什么
- 用MacOS Mojave编译C++:致命错误:mpi.h:没有这样的文件或目录
- 如何在BST的这个简单递归实现中消除警告
- 实现一个在集合上迭代的模板函数
- 我应该实现右值推送功能吗?我应该使用std::move吗
- 如何正确实现和访问运算符的各种自定义枚举器
- MPI突然停止了对多个核心的操作
- C++Union/Struct位域的实现和可移植性
- 这个极客对极客的trie实现是否存在内存泄漏问题
- 在c++中实现LinkedList时,应出现未处理的错误
- 为左值和右值的包装器实现C++范围
- 串行代码的并行MPI实现
- MPI实现进行验证
- 我已经寻找了MPI函数Scatterv的实现,但是我发现了任何可以帮助我编写自己的函数的东西
- 有效地实现mpi所有到所有的分散/收集
- 如何使用OpenMP / MPI实现并行Dijkstra算法