| 324 | |
| 325 | Pour soumettre une tâche avec !OpenMPI dans l'univers parallel, vous pouvez utiliser un script fourni par !HTCondor et qui se trouve sur les machines de soumission sous : /usr/share/doc/condor/examples/openmpiscript |
| 326 | Il suffit d'indiquer son emplacement dans votre fichier de soumission. |
| 327 | |
| 328 | Dans l'exemple qui suit, on execute un fichier example préalablement compilé à partir d'un fichier source example.c : {{{/usr/lib64/openmpi/bin/mpicc example.c -o example}}} |
| 329 | |
| 330 | **example.c** |
| 331 | {{{ |
| 332 | #include <stdio.h> |
| 333 | #include <mpi.h> |
| 334 | |
| 335 | int main(int argc, char **argv) { |
| 336 | int rank, size; |
| 337 | int local_array[5] = {1, 2, 3, 4, 5}; |
| 338 | int global_sum[5] = {0, 0, 0, 0, 0}; |
| 339 | |
| 340 | MPI_Init(&argc, &argv); |
| 341 | MPI_Comm_rank(MPI_COMM_WORLD, &rank); |
| 342 | MPI_Comm_size(MPI_COMM_WORLD, &size); |
| 343 | |
| 344 | // Chaque processus ajoute son tableau local à global_sum |
| 345 | |
| 346 | MPI_Reduce(local_array, global_sum, 5, MPI_INT, MPI_SUM, 0, MPI_COMM_WORLD); |
| 347 | |
| 348 | // Seul le processus de rang 0 affiche le résultat |
| 349 | if (rank == 0) { |
| 350 | printf("Résultat de la somme globale : "); |
| 351 | for (int i = 0; i < 5; i++) { |
| 352 | printf("%d ", global_sum[i]); |
| 353 | } |
| 354 | printf("\n"); |
| 355 | } |
| 356 | |
| 357 | MPI_Finalize(); |
| 358 | return 0; |
| 359 | } |
| 360 | |
| 361 | }}} |