Как мы можем минимизировать время многопроцессорной обработки с помощью shell scprit, вызывающего двоичный код с многопоточностью на одной и той же многоядерной машине? - PullRequest
0 голосов
/ 24 января 2020

Я запускаю экспериментальный код 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

...

  • process n: sh exp.sh n
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...