root 9 ヶ月 前
コミット
a9e51ea3f8
3 ファイル変更113 行追加0 行削除
  1. BIN
      step2/elementary
  2. 90 0
      step2/elementary.c
  3. 23 0
      step2/script_elementary.sh

BIN
step2/elementary


+ 90 - 0
step2/elementary.c

@@ -0,0 +1,90 @@
+#include <mpi.h>
+#include <stdio.h>
+#include <signal.h>
+#include <unistd.h>
+#include <stdlib.h>
+
+char buffer[100];
+int writeToFile(const char* text) {
+    FILE *file;
+
+    // Ouverture du fichier en mode écriture (efface le contenu existant)
+    file = fopen("/tmp/output.txt", "a");
+
+    // Vérifier si l'ouverture du fichier a réussi
+    if (file == NULL) {
+        perror("Erreur lors de l'ouverture du fichier");
+        return 1;
+    }
+
+    // Écriture dans le fichier
+    fprintf(file, "%s", text);
+
+    // Fermeture du fichier
+    fclose(file);
+
+    printf("Données écrites dans le fichier avec succès.\n");
+
+    return 0;
+}
+
+
+void handle_sigterm(int signum) {
+    printf("Received SIGTERM (%d).\n", signum);
+    snprintf(buffer,sizeof(buffer), "Received SIGTERM (%d).\n",signum);
+    writeToFile(buffer);    
+    // Ajoutez ici le code de nettoyage ou de gestion du signal SIGKILL
+
+    // Exemple : Fermez les fichiers, libérez la mémoire, etc.
+    // ...
+
+    // Terminez proprement le programme
+    exit(EXIT_SUCCESS);
+}
+
+void handle_sigint(int signum) {
+    printf("Received SIGINT (%d).\n", signum);
+    exit(EXIT_SUCCESS); 
+}
+
+int main() {
+    // Installez le gestionnaire de signal pour SIGKILL
+    if (signal(SIGTERM, handle_sigterm) == SIG_ERR) {
+        perror("Erreur lors de l'installation du gestionnaire de signal");
+        return EXIT_FAILURE;
+    }
+    if (signal(SIGINT, handle_sigint) == SIG_ERR) {
+       perror("Erreur lors de l'installation du gestionnaire de signal pour SIGINT");
+       return EXIT_FAILURE;
+    }
+    MPI_Init(NULL, NULL);
+
+    // Get the number of processes
+    int world_size;
+    MPI_Comm_size(MPI_COMM_WORLD, &world_size);
+
+    // Get the rank of the process
+    int world_rank;
+    MPI_Comm_rank(MPI_COMM_WORLD, &world_rank);
+
+    // Get the name of the processor
+    char processor_name[MPI_MAX_PROCESSOR_NAME];
+    int name_len;
+    MPI_Get_processor_name(processor_name, &name_len);
+
+    // Print off a hello world message
+    printf("Hello world from processor %s, rank %d out of %d processors\n",
+           processor_name, world_rank, world_size); 
+    printf("Le programme est en cours d'exécution. PID: %d\n", getpid());
+
+    // Simulation d'une tâche en cours d'exécution
+    while (1) {
+        // Votre code ici...
+
+        // Ajoutez une pause pour éviter une utilisation intensive du processeur
+        sleep(1);
+    }
+    MPI_Finalize();
+    return EXIT_SUCCESS;
+}
+

+ 23 - 0
step2/script_elementary.sh

@@ -0,0 +1,23 @@
+#!/bin/bash
+#SBATCH --job-name=mon_job       # Nom de la tâche
+# #SBATCH --nodes=1                # Nombre de nœuds
+#SBATCH --ntasks=1               # Nombre de tâches
+# #SBATCH --cpus-per-task=4        # Nombre de processeurs par tâche
+# #SBATCH --mem=4G                 # Mémoire par tâche
+#SBATCH --time=00:00:10          # Temps limite (HH:MM:SS)
+# #SBATCH --partition=nom_partition # Partition spécifique
+
+# Chargez les modules nécessaires (facultatif, selon votre configuration)
+# module load module1
+# module load module2
+
+# Commandes à exécuter sur chaque nœud
+# (remplacez ces lignes par les commandes réelles de votre script)
+echo "Hello, this is my Slurm job!"
+echo "Running on host: $(hostname)"
+echo "Current directory: $(pwd)"
+mpirun /data/elementary
+sleep 120
+echo "fin"
+# Fin du script
+