Я запускаю экспериментальный код A
, который имеет несколько параметров. Для этой задачи я создал сценарий оболочки, который принимает в качестве входных данных исполняемый код A
и набор параметров param
. Идея состоит в том, чтобы запустить скрипт оболочки с разными параметрами в разных процессах.
С другой стороны, сам код состоит из директив openmp следующим образом:
#pragma omp parallel for
for(int i=0; i < vec.size(); ++i) {
// ...
}
Размер вектора не зависит от param
, но время работы зависит от param
. Моя цель - провести эксперимент как можно быстрее. Проблема здесь в том, что каждый процесс пытается получить все потоки, что, я думаю, снижает производительность. Это правильный код, чтобы сделать с несколькими процессами? For l oop занимает примерно 60% -70% всего кода.
В сценарии оболочки exp.sh
я просто выполнил задачу, подобную следующей:
param=$1
./A $param
Затем Я делаю это в другом процессе, созданном из команды screen
:
process 1
: sh exp.sh 1
process 2
: sh exp.sh 2
...