fahmi2008 Posted November 16, 2008 Share Posted November 16, 2008 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. Link to comment Share on other sites More sharing options...
Sentinel Posted November 16, 2008 Share Posted November 16, 2008 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[] ) { ... } Link to comment Share on other sites More sharing options...
fabien29200 Posted November 16, 2008 Share Posted November 16, 2008 Je dirai aussi qu'il faut un ';' à la fin de la ligne "int rank, size, ". Link to comment Share on other sites More sharing options...
fahmi2008 Posted November 16, 2008 Author Share Posted November 16, 2008 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. Link to comment Share on other sites More sharing options...
fahmi2008 Posted November 16, 2008 Author Share Posted November 16, 2008 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. Link to comment Share on other sites More sharing options...
quelqu'un Posted November 16, 2008 Share Posted November 16, 2008 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 Link to comment Share on other sites More sharing options...
Sentinel Posted November 17, 2008 Share Posted November 17, 2008 En fait ce serait bien de : 1. Apprendre à coder en C "normal". Quand même la signature de la méthode main est mauvaise, c'est mal barré... 2. Lire la doc de MPi, par exemple ces tutos : https://computing.llnl.gov/tutorials/mpi/ Link to comment Share on other sites More sharing options...
ermitesansh Posted November 21, 2008 Share Posted November 21, 2008 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. Link to comment Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.