Tag: mpi

致命错误:mpi.h:没有这样的文件或目录#include

当我只编译脚本时 #include 它告诉我没有这样的文件或目录。 但是当我包含mpi.h的路径时 #include “/usr/include/mpi/mpi.h” (路径是正确的)它返回: In file included from /usr/include/mpi/mpi.h:2087:0, from lbm.cc:7: /usr/include/mpi/openmpi/ompi/mpi/cxx/mpicxx.h:35:17: fatal error: mpi.h: No such file or directory #include “mpi.h” ^ compilation terminated. 有人知道怎么修这个东西吗?

带有C的MPI:被动RMA同步

因为到目前为止我没有找到我的问题的答案,并且我对这个问题感到疯狂,我只是问这个问题折磨我的想法;-) 我正在研究已经编程的节点消除算法的并行化。 目标环境是一个集群。 在我的并行程序中,我区分主进程(在我的情况下为0级)和工作从属(除了0之外的每个等级)。 我的想法是,主人正在跟踪哪些奴隶可用并发送然后工作。 因此,出于某些其他原因,我尝试建立一个基于具有锁定 – 放置 – 解锁序列的被动RMA的工作流程。 我使用一个名为schedule的整数数组,其中表示等级的数组中的每个位置对于工作进程为0或对于可用进程为1(因此如果schedule [1] = 1则可用于工作)。 如果一个进程完成了它的工作,它将主数据放入1,表示它的可用性。 我试过的代码如下: MPI_Win_lock(MPI_LOCK_EXCLUSIVE,0,0,win); // a exclusive window is locked on process 0 printf(“Process %d:\t exclusive lock on process 0 started\n”,myrank); MPI_Put(&schedule[myrank],1,MPI_INT,0,0,1,MPI_INT,win); // the line myrank of schedule is put into process 0 printf(“Process %d:\t put operation called\n”,myrank); MPI_Win_unlock(0,win); // the window […]

使用MPI,在发送消息之前,似乎已收到消息

在我的测试程序中,我正在从一个进程向另一个进程发送消息。 跟踪printfs似乎表明在发送之前收到的消息是什么,为什么会这样? #include #include #include /* Run with two processes */ void main(int argc, char *argv[]) { int rank, i, count; float data[100],value[200]; MPI_Status status; MPI_Init(&argc,&argv); MPI_Comm_rank(MPI_COMM_WORLD,&rank); printf(“before if:%d\n”,rank); if(rank==1) { printf(“in if:%d\n”,rank); for(i=0;i<100;++i) data[i]=i; MPI_Send(data,100,MPI_FLOAT,0,55,MPI_COMM_WORLD); } else { printf("else:%d\n",rank); MPI_Recv(value,200,MPI_FLOAT,MPI_ANY_SOURCE,55,MPI_COMM_WORLD,&status); printf("P:%d Got data from processor %d \n",rank, status.MPI_SOURCE); MPI_Get_count(&status,MPI_FLOAT,&count); printf("P:%d Got %d elements \n",rank,count); […]

MPI IO读写块循环矩阵

我有一个学校项目在hpc分布式系统上进行矩阵乘法。 我需要从并行IO系统读取矩阵并使用pblacs在许多计算节点(处理器)上并行执行矩阵乘法。 必须使用MPI IO命令读取数据。 我知道PBlacs使用块循环分布来执行乘法。 教授没有向我们提供有关MPI IO的更多信息,而且我很难在其上找到更多的信息/资源。 具体来说,是否有方法以块循环方式从并行io系统中读取矩阵并轻松将其插入到pblacs pdgemm中? 任何指向有用资源的指针都会非常感激。 我的时间有点短暂,对这个项目缺乏方向感到沮丧。

如何通过MPI加速这个问题

(1)。 我想知道如何使用MPI在下面的代码循环中加速耗时的计算? int main(int argc, char ** argv) { // some operations f(size); // some operations return 0; } void f(int size) { // some operations int i; double * array = new double [size]; for (i = 0; i < size; i++) // how can I use MPI to speed up this loop to […]

如何在MPI中创建新类型

我是MPI的新手,我想为Residence struct创建一个新的数据类型。 我只是想看看我是否可以正确地创建新类型。 struct Residence {double x; 双y; }; 我的新MPI类型 MPI_Datatype createRecType() { // Set-up the arguments for the type constructor MPI_Datatype new_type; int count = 2; int blocklens[] = { 1,1 }; MPI_Aint indices[2]; //indices[0]=0; MPI_Type_extent( MPI_DOUBLE, &indices[0] ); MPI_Type_extent( MPI_DOUBLE, &indices[1] ); MPI_Datatype old_types[] = {MPI_DOUBLE,MPI_DOUBLE}; MPI_Type_struct(count,blocklens,indices,old_types,&new_type); MPI_Type_commit(&new_type); }

如何使用cmake编译包含c程序的MPI

我正在尝试将openmp和mpi技术应用于开源C程序,该程序需要构建“cmake。&& make”。 我已经找到了如何在CMake的try_compile函数中为OpenMP设置链接器标志如何包含-fopenmp标志但仍然混淆了mpi。 我该怎么办?

MPI中的动态内存分配

我是MPI的新手。 我写了一个简单的代码来显示使用多个进程的矩阵。 如果我有一个8×8的矩阵并用4个进程启动MPI程序,我的第1个进程将打印第2个2行,第2个线程将由第2个线程打印,然后将其自身分开。 #define S 8 MPI_Status status; int main(int argc, char *argv[]) { int numtasks, taskid; int i, j, k = 0; MPI_Init(&argc, &argv); MPI_Comm_rank(MPI_COMM_WORLD, &taskid); MPI_Comm_size(MPI_COMM_WORLD, &numtasks); int rows, offset, remainPart, orginalRows, height, width; int **a; // int a[S][S]; if(taskid == 0) { cout<<taskid<<endl; height = width = S; a = (int **)malloc(height*sizeof(int […]

Openmpi mpmd获得通信大小

我有两个openmpi程序,我这样开始 mpirun -n 4 ./prog1 : -n 2 ./prog2 现在我如何使用MPI_Comm_size(MPI_COMM_WORLD, &size)使得我得到大小值 prog1 size=4 prog2 size=2. 到目前为止,我在两个节目中都获得了“6”。

如何从C使用MPI_Scatter和MPI_Gather?

到目前为止,我的应用程序正在读取带有整数列表的txt文件。 这些整数需要由主进程存储在数组中,即排名为0的处理器。这样可以正常工作。 现在,当我运行程序时,我有一个if语句检查它是否是主进程,如果是,我正在执行MPI_Scatter命令。 根据我的理解,这将使用数字细分数组并将其传递给从属进程,即所有rank> 0。 但是,我不知道如何处理MPI_Scatter 。 从属进程如何“订阅”以获取子数组? 如何告诉非主进程对子数组执行某些操作? 有人可以提供一个简单的例子来向我展示主进程如何从数组中发出元素然后让奴隶添加总和并将其返回给主数据库,将所有总和加在一起并将其打印出来? 我的代码到目前为止: #include #include //A pointer to the file to read in. FILE *fr; int main(int argc, char *argv[]) { int rank,size,n,number_read; char line[80]; int numbers[30]; int buffer[30]; MPI_Init(&argc, &argv); MPI_Comm_rank(MPI_COMM_WORLD, &rank); MPI_Comm_size(MPI_COMM_WORLD, &size); fr = fopen (“int_data.txt”,”rt”); //We open the file to be read. if(rank […]