C, OpenMP, alterar tipo de agendamento, setenv
Pergunta
Existe uma maneira de mudar o schedule
digite um pragma omp for
loop, usando uma função em C?eu estava tentando fazer setenv("OMP_SCHEDULE", "guided", 1);
antes da instrução paralela, mas não tenho certeza se funciona, pois os tempos que obtenho do meu código são muito semelhantes.O que eu queria fazer é usar um for
loop alterando o tipo de agendamento para comparar os horários, dando dynamic
, auto
, etc.como uma string no setenv
função.
Solução
Você pode usar agendamento (tempo de execução) e definir OMP_SCHEDULE.
De https://computing.llnl.gov/tutorials/openMP/
Tempo de execução A decisão de agendamento é adiada até o tempo de execução pela variável de ambiente omp_schedule.É ilegal especificar um tamanho de bloco para esta cláusula.
Deixe-me citar Hristo Iliev, já que ele já disse isso melhor aquiOpenMP:para agendamento
Como o código pré-compilado pode ser executado em várias plataformas, seria bom se o usuário final pudesse controlar o agendamento.É por isso que o OpenMP fornece a cláusula especial de agendamento (tempo de execução).Com o agendamento de tempo de execução, o tipo é obtido do conteúdo da variável de ambiente OMP_SCHEDULE.Isso permite testar diferentes tipos de agendamento sem recompilar o aplicativo e também permite que o usuário final ajuste sua plataforma.
Outras dicas
Não existe uma maneira padrão de fazer isso, mas se você estiver usando a biblioteca da Intel, poderá usar o kmp_set_defaults()
extensão.Isso leva uma série de opções separadas por |
caracteres e substitui o comportamento padrão do OpenMP.No seu exemplo, kmp_set_defaults("OMP_SCHEDULE=guided")
deveria realizar o que deseja.