Bonjour, j'ai fait un prgm qui résoud N systèmes d'équations différentielles non linéaires où N est une donnée de l'utilisateur. Après avoir codé une version séquentielle, j'en ai codé une autre en parallèle en utilisant MPI (sur une grappe de 26 processeurs). Comme j'ai 2 bi-processeurs sur mon PC, j'aimerais apprendre à coder en multi-thread. J'ai donc lu la page suivante http://emmanuel-delahaye.developpez.com/pthreads.htm ainsi que qq poly téléchargés du net. Mais j'ai trois questions de fond :
1) avec MPI l'exécutable est copié sur les n processeurs où n est donné comme option lors de l'exécution (mpirun -np n executable). Est-ce que par défaut, un prgm multi-thread prendra tous les processeurs du PC ou dois-je le lui dire (n'en prends que 3 sur mes 4 par exemple) ?
2) avec MPI l'exécutable est copié sur les n processeurs. Mais en multi-thread, j'ai l'impression qu'il n' y a qu'un seul exécutable. Je prends l'exemple ci-dessous (issus de http://emmanuel-delahaye.developpez.com/pthreads.htm) :
Comment est-ce que le PC gère : le thrad ta est en train de se lancer, donc lancer le thread tb sur un au tre processeur ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 pthread_create (&ta, NULL, task_a, NULL); pthread_create (&tb, NULL, task_b, NULL);
Avec MPI, chaque processeur a un rang et donc je faisais
3) Enfin, question de pratique : le nombre de système que je dois résoudre (N) est une donnée de l'utilisateur.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 if(rang == 0) blabla else if (rang == k) blabla
Si je fais
est-ce qu'ils vont tous s'exécuter en parallèle ? Est-ce la même chose que décrire
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 for(i=0;i<N;++i) lancer le thread numéro i
Merci.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 pthread_create (&t1, NULL, task_1, NULL); pthread_create (&t2, NULL, task_2, NULL); ... pthread_create (&tN, NULL, task_N, NULL);
Partager