Aller au contenu

débutant avec mpi


fahmi2008

Messages recommandés

Posté(e)

Bonjour,

En fait je suis débutant en mpi et je l'ai installé sous machine ubuntu 8.10.

Commandes utuilisés : apt-get install mpich-bin mpich-mpd-bin mpich-shmem-bin mpi-doc et

apt-get install libmpich-mpd1.0-dev libmpich-shmem1.0-dev libmpich1.0-dev

Maintenant j'ai essayé de compiler et d'exécuter le simple programme de HelloWorld mais ça marche pas :

Lorsque je fait "mpicc -o hello hello.c" pour compiler ça me donne

helloC.c: In function ‘main’:

helloC.c:12: error: expected declaration specifiers or ‘...’ before ‘&’ token

helloC.c:12: error: expected declaration specifiers or ‘...’ before ‘&’ token

Je ne sais pas où est le pb.

mon code est:

/* C Example */
#include <stdio.h>
#include <mpi.h>


int main (argc, argv)
 int argc;
 char *argv[];
{
 int rank, size, 

 MPI_Init (&argc, &argv);	/* starts MPI */
 //MPI_Comm_rank (MPI_COMM_WORLD, &rank);	/* get current process id */
 //MPI_Comm_size (MPI_COMM_WORLD, &size);	/* get number of processes */
 printf( "Hello world from process"); //%d of %d\n", rank, size );
 MPI_Finalize();
 return 0;
}

Merci de m'aider.

Posté(e)

Ca fait des années que je n'ai pas fait de C, mais à vue de nez, ta déclaration de la méthode main est incorrecte. Elle devrait plutôt ressembler à :

int main( int argc, const char* argv[] )
{ 
... 
}

Posté(e)

Merci pour vos réponses.

EN fait, j'ai fait des modifs et le code devient

/* C Example */
#include <stdio.h>
#include <mpi.h>


int main (int argc,const char* argv)
 //int argc;
 //char *argv[];
{
 //int rank, size;

 MPI_Init (&argc, &argv);	/* starts MPI */
 //MPI_Comm_rank (MPI_COMM_WORLD, &rank);	/* get current process id */
 //MPI_Comm_size (MPI_COMM_WORLD, &size);	/* get number of processes */
 printf( "Hello world from process"); //%d of %d\n", rank, size );
 MPI_Finalize();
 return 0;
}

La compilation donne

"helloC.c: In function ‘main’:

helloC.c:12: warning: passing argument 2 of ‘MPI_Init’ from incompatible pointer type"

Merci encore pour votre aide.

Posté(e)

voila j'ai reussi à trouver un code qu'est bien compilé.

#include <stdio.h>
#include <mpi.h>

int main(int argc, char ** argv) {

 MPI_Init(&argc, &argv);
 // note that argc and argv are passed by address

 printf("Hello MPI!\n");

 MPI_Finalize(); 
}

Maintenant lors de l'exécution de ce code j'ai reçu ce message d'erreur :

0 - MPI_INIT : MPIRUN chose the wrong device ch_p4; program needs device ch_p4mpd

Segmentation fault

Je ne comprend pas la source de cette erreur.

Je travaille sur ma machine core duo en fait et j'exécute avec la simple commande "mpirun ./hello".

Merci encore.

Posté(e)

Ca fait deux ans que je n'ai pas utilisé MPI, mais il ne fallait pas plus d'arguments pour lancer l'executable? Ou une configuration a faire pour MPI quelque part? Le mieux serait de demander à celui qui t'a fourni ce bout de code

Posté(e)

bonour,

quelqu modif a faire :

#include <stdio.h>
#include <mpi.h>

int main(int argc, char ** argv) {

 MPI_Init(&argc, &argv);
 // note that argc and argv are passed by address
/* les commentaires en C sont entre /* et */ a moins que tu soit en C99 mais il y a tres peut de compilo c99 */

 printf("Hello MPI!\n");

 MPI_Finalize(); 
/* on retourne une valeur en fin de main */
	return EXIT_SUCCESS;
}

pour la premiere syntaxe de main, ca marche c'est le style Kerniggan&Ritchie (K&R) bon c'est un peu obsolète m'enfin...

Pour le seg fault, si tu dois passer les arguments du main c'est que la fonction d init de MPI a besoin de paramètres pour s'initialiser proprement, donc de loin je dirais que soit tu ne passes pas de parametres, soit des mauvais.

La ce sont ceux que tu passe a ton propre programme qui sont envoyés, il doit falloir que tu appelles ton programme avec les bons arguments.

Archivé

Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.

×
×
  • Créer...