Domanda

Sto cercando di eseguire benchmark NAS-UPC su un cluster a 32 nodi.

Funziona bene nei casi in cui la dimensione del problema è piccola. Quando mi laureo a una dimensione del problema più grande (classe D), ricevo questo errore (per MG Benchmark)

*** Caught a fatal signal: SIGBUS(7) on node 2/32
 p4_error: latest msg from perror: Bad file descriptor
*** Caught a signal: SIGPIPE(13) on node 0/32
    p4_error: latest msg from perror: Bad file descriptor
   p4_error: latest msg from perror: Bad file descriptor

*** FATAL ERROR: recursion failure in AMMPI_SPMDExit
*** Caught a signal: SIGPIPE(13) on node 27/32
*** Caught a signal: SIGPIPE(13) on node 20/32
*** Caught a signal: SIGPIPE(13) on node 21/32
    p4_error: latest msg from perror: Bad file descriptor
*** FATAL ERROR: recursion failure in AMMPI_SPMDExit
*** FATAL ERROR: recursion failure in AMMPI_SPMDExit
*** FATAL ERROR: recursion failure in AMMPI_SPMDExit
*** Caught a signal: SIGPIPE(13) on node 16/32
*** FATAL ERROR: recursion failure in AMMPI_SPMDExit

Qualcuno può spiegare perché questo sta accadendo e se qualcuno ha visto questo errore prima e risolto?

EDIT: ha capito che si tratta di un problema relativo alla memoria. Ma non sono in grado di assegnare la giusta quantità di memoria per l'applicazione al momento della compilazione

È stato utile?

Soluzione 2

Ho pensato che fosse un problema con il benchmark che necessitava di più memoria di quanti ne avessi assegnato durante il tempo di compilazione.

Altri suggerimenti

Controlla a dmesg Output: può essere un problema fuori memoria. O, ancora una volta, può essere un po ' ulimit -a Colpiti, ad esempio uno stacksize (la dimensione dello stack predefinita è troppo piccola per alcune attività NAS).

Se hai una linea come "fuori memoria: processo ucciso ###" in dmesg Output su una qualsiasi delle tue macchine - significa che il tuo programma ha richiesto (e ha provato a utilizzare) molta memoria, più grande di quanto il tuo sistema operativo possa dare all'applicazione. Esistono diversi limiti di memoria:

  1. ulimit -v - Limite dell'utente per la dimensione della memoria virtuale. Seleziona tutto ulimit -a anche limiti, ma sembra che il tuo caso non sia questo
  2. Puoi usare non più memoria di quanto non abbia una RAM totale e tutte le dimensioni degli scambi (controlla free comando). Ma se l'applicazione utilizza più memoria della dimensione della RAM e inizia a scambiare - le prestazioni saranno cattive (nella maggior parte dei casi).
  3. Esistono limiti architettonici della memoria massima, consentito al singolo processo da avere. Per i nodi a 32 bit questo limite può essere da 1 (caso molto raro) a 2, 3, 4 GB. Anche se il tuo sistema a 32 bit ha> 4 GB di memoria, ad esempio con l'uso di PAE - nessun singolo processo può richiedere> 4 GB. Una grande parte dello spazio virtuale da 4 GB assunto anche da OS (da centinaia di MB fino a GBS).
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top