Jump to content
aelius

Open MPI [Open Source High Performance Computing]

Recommended Posts

The Open MPI Project is an open source MPI-2 implementation that is developed and maintained by a consortium of academic, research, and industry partners. Open MPI is therefore able to combine the expertise, technologies, and resources from all across the High Performance Computing community in order to build the best MPI library available. Open MPI offers advantages for system and software vendors, application developers and computer science researchers.

Features implemented or in short-term development for Open MPI include:

- Full MPI-3 standards conformance

- Thread safety and concurrency

- Dynamic process spawning

- Network and process fault tolerance

- Support network heterogeneity

- Single library supports all networks

- Run-time instrumentation

- Many job schedulers supported

- Many OS's supported (32 and 64 bit)

- Production quality software

- High performance on all platforms

- Portable and maintainable

- Tunable by installers and end-users

- Component-based design, documented APIs

- Active, responsive mailing list

- Open source license based on the BSD license

Official page: Open MPI: Open Source High Performance Computing

Documentation: Open MPI v1.6.4 documentation

Link to comment
Share on other sites

Acum cativa ani am scris un tutorial despre OpenMPI

  
i OpenMPI, How Does Work?
ii Building a distributed resource cluster
iii Setting up OpenMPI
iiii Running the code
iiiii John the Ripper with OpenMPI

Cod pentru exemplul din tutorial

/* test of MPI */  
#include "mpi.h"
#include <stdio.h>
#include <string.h>

int main(int argc, char **argv)
{
char idstr[2232]; char buff[22128];
char processor_name[MPI_MAX_PROCESSOR_NAME];
int numprocs; int myid; int i; int namelen;
MPI_Status stat;

MPI_Init(&argc,&argv);
MPI_Comm_size(MPI_COMM_WORLD,&numprocs);
MPI_Comm_rank(MPI_COMM_WORLD,&myid);
MPI_Get_processor_name(processor_name, &namelen);

if(myid == 0)
{
printf("WE have %d processors\n", numprocs);
for(i=1;i<numprocs;i++)
{
sprintf(buff, "Hello %d", i);
MPI_Send(buff, 128, MPI_CHAR, i, 0, MPI_COMM_WORLD); }
for(i=1;i<numprocs;i++)
{
MPI_Recv(buff, 128, MPI_CHAR, i, 0, MPI_COMM_WORLD, &stat);
printf("%s\n", buff);
}
}
else
{
MPI_Recv(buff, 128, MPI_CHAR, 0, 0, MPI_COMM_WORLD, &stat);
sprintf(idstr, " Processor %d at node %s ", myid, processor_name);
strcat(buff, idstr);
strcat(buff, "reporting for duty");
MPI_Send(buff, 128, MPI_CHAR, 0, 0, MPI_COMM_WORLD);
}
MPI_Finalize();

}

  • Upvote 1
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



×
×
  • Create New...