<div dir="ltr">Спасибо большое Артём, действительно, это я недоглядел.<div>с уважением,</div><div>фк</div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">Le ven. 18 nov. 2022 à 16:41, anikeev <<a href="mailto:anikeev@ut.mephi.ru">anikeev@ut.mephi.ru</a>> a écrit :<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">On Fri, 2022-11-18 at 15:45 +0300, Philipp Korneev wrote:<br>
> Спасибо, Артём, использую Ваш скрипт, но получаю теперь только <br>
> Hello from process: 0<br>
> <br>
> Директория <br>
> /mnt/pool/5/phkorneev/ANRO/hello/<br>
> <br>
> Вероятно, я что-то неправильно компилирую, потому что с C++ всё<br>
> работает (/mnt/pool/5/phkorneev/ANRO/hello_c).<br>
> Не могли бы Вы посмотреть?<br>
<br>
Проблема в исходном коде - в Fortran нельзя использовать пробелы перед<br>
прагмами:<br>
<br>
phkorneev@master.cherenkov /mnt/pool/5/phkorneev/ANRO/hello $ cat new.f<br>
PROGRAM Parallel_Hello_World<br>
<br>
INTEGER OMP_GET_THREAD_NUM<br>
<br>
!$OMP PARALLEL<br>
<br>
PRINT *, 'Hello from process: ', OMP_GET_THREAD_NUM()<br>
<br>
!$OMP END PARALLEL<br>
<br>
END<br>
phkorneev@master.cherenkov /mnt/pool/5/phkorneev/ANRO/hello $ gfortran<br>
new.f -fopenmp<br>
phkorneev@master.cherenkov /mnt/pool/5/phkorneev/ANRO/hello $<br>
OMP_NUM_THREADS=4 ./a.out <br>
Hello from process: 0<br>
Hello from process: 3<br>
Hello from process: 2<br>
Hello from process: 1<br>
<br>
> Спасибо!<br>
> с уважением,<br>
> фк <br>
> <br>
> <br>
> Le ven. 18 nov. 2022 à 14:02, anikeev <<a href="mailto:anikeev@ut.mephi.ru" target="_blank">anikeev@ut.mephi.ru</a>> a écrit :<br>
> > mpOn Fri, 2022-11-18 at 13:02 +0300, Philipp Korneev wrote:<br>
> > > Артём, спасибо за ответ,<br>
> > > мой скрипт task_hello выглядит так:<br>
> > > > #!/bin/bash<br>
> > > > #SBATCH --job-name=OMP_hello<br>
> > > > #SBATCH --output=slurm.out<br>
> > > > #SBATCH --error=slurm.err<br>
> > > > #SBATCH --nodes=1<br>
> > > > #SBATCH --ntasks-per-node=4<br>
> > > > export OMP_NUM_THREADS=4<br>
> > > > srun --mpi=pmi2 ./hello<br>
> > > > <br>
> > > <br>
> > > Скажите пожалуйста, в каком месте и каким образом можно по-<br>
> > другому<br>
> > > выполнить export OMP_NUM_THREADS=4 внутри скрипта task_hello?<br>
> > > Спасибо<br>
> > > С уважением,<br>
> > > фк<br>
> > <br>
> > В Вашем оригинальном письме не был указан путь до файла. В таком<br>
> > файле<br>
> > действительно расставляются переменные внутри. Для него не нужно<br>
> > выполнять export пред sbatch на управляющем узле.<br>
> > <br>
> > В этом скрипте другая проблема, котора тоже есть в руководстве.<br>
> > Утилита<br>
> > srun (mpirun, mpiexec) и переменные tasks... (--ntasks-per-node,<br>
> > etc.)<br>
> > нужны для MPI, не для OpenMP. Скрипт для задачи, использующей<br>
> > только<br>
> > OpenMP, должен быть таким:<br>
> > <br>
> > #!/bin/bash<br>
> > #SBATCH --job-name=OMP_hello<br>
> > #SBATCH --output=slurm.out<br>
> > #SBATCH --error=slurm.err<br>
> > #SBATCH --nodes=1<br>
> > #SBATCH --ntasks-per-node=1<br>
> > #SBATCH --cpus-per-task=4<br>
> > export OMP_NUM_THREADS=4<br>
> > ./hello<br>
> > <br>
> > Т.е. в оригинальном скрипте Вы запустили 4 экземпляра ./a.out, но<br>
> > зарезервировали для каждого из них только по одному потоку.<br>
> > <br>
> > P.S. Если у Вас еще есть вопросы, укажите, пожалуйста, в какой<br>
> > диретории Вы работаете. Трудно давать советы по файлам, не видя их<br>
> > содержание.<br>
> > <br>
> > P.P.S Чтобы не случайно не задать разные значения в --cpus-per-task<br>
> > и<br>
> > OMP_NUM_THREAD можно использовать прием, предложенный в руководстве<br>
> > пользователя:<br>
> > <br>
> > ...<br>
> > #SBATCH --cpus-per-task=4<br>
> > export OMP_NUM_THREADS=$SLURM_CPUS_PER_TASK<br>
> > <br>
> > Дедупликация всегда желательна - и для экономии врмемени, и для<br>
> > избежания ошибок.<br>
> > <br>
> > > Le ven. 18 nov. 2022 à 12:05, anikeev <<a href="mailto:anikeev@ut.mephi.ru" target="_blank">anikeev@ut.mephi.ru</a>> a<br>
> > écrit :<br>
> > > > On Fri, 2022-11-18 at 11:55 +0300, Philipp Korneev wrote:<br>
> > > > > Добрый день, Артём, подскажите пожалуйста, что я делаю<br>
> > > > неправильно<br>
> > > > > (на cherenkov). Файлы внизу.<br>
> > > > <br>
> > > > Здравствуйте!<br>
> > > > <br>
> > > > > Хочу скомпилировать и запустить с OpenMP программу на<br>
> > фортране.<br>
> > > > > Делаю:<br>
> > > > > 1. $ export OMP_NUM_THREADS=4<br>
> > > > > 2. $ gfortran hello.f -o hello -fopenmp<br>
> > > > > 3. $ sbatch task_hello<br>
> > > > > <br>
> > > > > получаю<br>
> > > > > Hello from process: 0<br>
> > > > > Hello from process: 0<br>
> > > > > Hello from process: 0<br>
> > > > > Hello from process: 0<br>
> > > > > <br>
> > > > > хотя ожидал 0,1,2,3.<br>
> > > > <br>
> > > > Экземпляр интерпретатора командной строки bash, в котором Вы<br>
> > > > работаете<br>
> > > > на головном узле, и экземпляр bash, который Вы запускаете<br>
> > > > (#!/bin/bash)<br>
> > > > внутри скрипта task_hello на вычислительно узле - это разные<br>
> > > > процессы,<br>
> > > > у них разные переменные окруженися. Вам нужно выполнять export<br>
> > > > OMP_NUM_THREADS=4 внутри скрипта task_hello. Эта особенность<br>
> > > > описана в<br>
> > > > руководстве пользователя.<br>
> > > > <br>
> > > > > Спасибо большое!<br>
> > > > > с уважением,<br>
> > > > > фк<br>
> > > > > ___________________________________<br>
> > > > > Файл task_hello:<br>
> > > > > > #!/bin/bash<br>
> > > > > > #SBATCH --job-name=OMP_hello<br>
> > > > > > #SBATCH --output=slurm.out<br>
> > > > > > #SBATCH --error=slurm.err<br>
> > > > > > #SBATCH --nodes=1<br>
> > > > > > #SBATCH --ntasks-per-node=4<br>
> > > > > > <br>
> > > > > > <br>
> > > > > > export OMP_NUM_THREADS=4<br>
> > > > > > srun --mpi=pmi2 ./hello<br>
> > > > > > <br>
> > > > > <br>
> > > > > <br>
> > > > > Файл hello.f:<br>
> > > > > > PROGRAM Parallel_Hello_World<br>
> > > > > > USE OMP_LIB<br>
> > > > > > !$OMP PARALLEL<br>
> > > > > > PRINT *, 'Hello from process: ', OMP_GET_THREAD_NUM()<br>
> > > > > > !$OMP END PARALLEL<br>
> > > > > > END<br>
> > > > > > <br>
> > > > > <br>
> > > > > <br>
> > > > > _______________________________________________<br>
> > > > > hpc mailing list<br>
> > > > > <a href="mailto:hpc@lists.mephi.ru" target="_blank">hpc@lists.mephi.ru</a><br>
> > > > > <a href="https://lists.mephi.ru/listinfo/hpc" rel="noreferrer" target="_blank">https://lists.mephi.ru/listinfo/hpc</a><br>
> > > > <br>
> > > > _______________________________________________<br>
> > > > hpc mailing list<br>
> > > > <a href="mailto:hpc@lists.mephi.ru" target="_blank">hpc@lists.mephi.ru</a><br>
> > > > <a href="https://lists.mephi.ru/listinfo/hpc" rel="noreferrer" target="_blank">https://lists.mephi.ru/listinfo/hpc</a><br>
> > <br>
> > _______________________________________________<br>
> > hpc mailing list<br>
> > <a href="mailto:hpc@lists.mephi.ru" target="_blank">hpc@lists.mephi.ru</a><br>
> > <a href="https://lists.mephi.ru/listinfo/hpc" rel="noreferrer" target="_blank">https://lists.mephi.ru/listinfo/hpc</a><br>
<br>
-- <br>
С уважением,<br>
ведущий инженер отдела UNIX-технологий НИЯУ МИФИ,<br>
к.ф.-м.н. Аникеев Артем.<br>
email: <a href="mailto:aaanikeyev@mephi.ru" target="_blank">aaanikeyev@mephi.ru</a>, <a href="mailto:anikeev@ut.mephi.ru" target="_blank">anikeev@ut.mephi.ru</a><br>
<br>
Best regards,<br>
MEPhI UNIX-technology department lead engineer,<br>
Artem Anikeev, Ph.D.<br>
e-mail: <a href="mailto:aaanikeyev@mephi.ru" target="_blank">aaanikeyev@mephi.ru</a>, <a href="mailto:anikeev@ut.mephi.ru" target="_blank">anikeev@ut.mephi.ru</a><br>
<br>
<br>
<br>
<br>
_______________________________________________<br>
hpc mailing list<br>
<a href="mailto:hpc@lists.mephi.ru" target="_blank">hpc@lists.mephi.ru</a><br>
<a href="https://lists.mephi.ru/listinfo/hpc" rel="noreferrer" target="_blank">https://lists.mephi.ru/listinfo/hpc</a><br>
</blockquote></div>