2010-06-16 11 views
7

Ho un pezzo di codice (che fa parte di un'applicazione) che sto cercando di ottimizzare usando OpenMP, sto provando varie politiche di schedulazione. Nel mio caso, ho notato che la clausola schedule(RUNTIME) ha un vantaggio rispetto ad altri (non sto specificando un chunk_size). Ho due domande:Clausola di pianificazione in OpenMP

  1. Quando non specificare chunk_size, c'è una differenza tra schedule(DYNAMIC) e schedule(GUIDED)?

  2. In che modo OpenMP determina la pianificazione specifica dell'implementazione predefinita archiviata nella variabile OMP_SCHEDULE?

Ho appreso che se non viene specificato uno schema di pianificazione, viene utilizzato automaticamente il valore predefinito schedule(STATIC). Quindi, se non modifico la variabile OMP_SCHEDULE e utilizzo schedule(RUNTIME) nel mio programma, lo schema di programmazione dovrebbe essere schedule(STATIC) tutte le volte o OpenMP ha un modo intelligente di concepire dinamicamente la strategia di pianificazione e cambiarla di volta in volta?

risposta

5
  1. Sì, se non si specifica una dimensione pezzo poi dinamico renderanno le dimensioni di tutti i blocchi 1. Ma GUIDATA farà la dimensione del blocco minimo di 1, ma altre dimensioni chunk saranno a carico di attuazione. Forse potresti capire la tua situazione eseguendo alcuni esperimenti o leggendo la documentazione.

  2. Come ho capito la situazione: se la variabile di ambiente OMP_SCHEDULE non è impostata, la pianificazione runtime dipende dall'implementazione. Penso che sarebbe molto strano se lo stesso programma non fosse scelto per ogni esecuzione del programma. Non credo che OpenMP, che è un insieme di direttive in fase di compilazione, abbia modo di comprendere le prestazioni di runtime del tuo programma e di scegliere un programma basato su tali informazioni.

+0

Grazie Marco. Nei miei test, DYNAMIC era alcuni punti sopra GUIDED e RUNTIME era il vincitore tutte le volte. – Sayan

+0

Ho ricevuto questa risposta da un utente gentile al forum OpenMP - http://openmp.org/forum/viewtopic.php?f=3&t=880 – Sayan

+1

OpenMP, che è un insieme di direttive in fase di compilazione, potrebbe generare codice che monitora le prestazioni e regola la pianificazione in base a tali informazioni. Non sto dicendo che lo faccia attualmente, ma non può essere escluso semplicemente perché è un insieme di direttive in fase di compilazione. – Shahbaz