Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Multiple cores writing on the used input file #7

Open
lcrippa opened this issue Jun 13, 2024 · 5 comments
Open

Multiple cores writing on the used input file #7

lcrippa opened this issue Jun 13, 2024 · 5 comments

Comments

@lcrippa
Copy link
Collaborator

lcrippa commented Jun 13, 2024

Ciao,

c'è una strana condizione che si verifica nel caso real-space DMFT se ogni core sta risolvendo un sito diverso: a riga 198-200 di ED_MAIN.f90 c'è

#ifdef _MPI    
    if(check_MPI().AND.fmpi_)call ed_set_MpiComm()
#endif

Questa condizione non è mai verificata, perch'è fmpi_ è settato a false all'interno di ed_solve_lattice. Di conseguenza il comunicatore interno non è inizializzato, e ok.

Il problema penso che sia sotto, a riga 207, dove c'è

if(MpiMaster)call save_input_file(str(ed_input_file))

perchè ogni core crede di essere il Master e quindi tutti scrivono nel logfile.

Prima domanda, è necessario che il file venga riscritto adesso? Viene già fatto in ED_read_input...?

Se fosse necessario, bisognerebbe o far scrivere ad ogni core su un inputfile diverso, o mettere questa print dentro a una if come if(check_MPI().AND.fmpi_) e fare fare il print in questo specifico caso all'interno di ed_solve_lattice.

Che ve ne pare?

@SamueleGiuli
Copy link
Contributor

SamueleGiuli commented Jun 13, 2024 via email

@lcrippa
Copy link
Collaborator Author

lcrippa commented Jun 13, 2024

Ciao Samuele,

sono d'accordo che sarebbe una cosa utile, anche perchè ci sono delle possibilità che in questo momento o sono hardcoded o non sono accessibili (e.g. una U diversa per ogni sito). Però questo richiederebbe un secondo di riflessione, perchè dovremmo decidere ad esempio se l'utente debba scriversi N input file diversi, o se le quantità site-dependent possono essere inserite in un unico input file, o se il codice deve essere in grado di accettare input file diversi (chiamati come?) ma può defaultare a uno.

Una soluzione che avrei per il problema così com'è adesso è che nella ed_solve_single si mette un if(fmpi_) prima di salvare l'input, e poi, solo nel caso specifico in cui fmp_ (cioè mpi_lanc) sia false, in ed_solve lattice mettere il print da parte del master (che non è lo stesso master di ed_solve_single quando il sito è uno solo)

@SamueleGiuli
Copy link
Contributor

SamueleGiuli commented Jun 13, 2024 via email

@lcrippa
Copy link
Collaborator Author

lcrippa commented Jun 13, 2024

Ah ok, ora capisco cosa intendi. Probabilmente la soluzione più pulita sarebbe una cosa tipo:
ci aspettiamo variabili di inputfile diverse per ogni core (magari decidendo un suffisso tipo quello di hamiltonian.restart). Se queste sono tutte uguali impediamo a tutti i core tranne uno di scrivere. Per decidere quale core scrive probabilmente ha senso mettere il write in ed_solve_lattice, magari verso linea 347 (supponendo che in ed_solve_single non venga fatto nulla di rilevante prima che save_input_file venga chiamata)

@SamueleGiuli
Copy link
Contributor

SamueleGiuli commented Jun 13, 2024 via email

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants