Распараллеливание программного обеспечения с OpenMP против планирования Affinity?

Сценарий: у меня есть программа, которая может быть без труда распараллеленный с использованием OpenMP, допустим, что основной цикл программы представляет собой цикл for и независимые данные внутри него, поэтому распараллеливание его будет тривиальным. Однако в настоящее время я не распараллелить его, и вместо этого использовать планирование сходства.

Эта программа выполняет работу с некоторыми входными файлами, указанными в папке в аргументах командной строки. Чтобы запустить эту программу параллельно, кто-то может создать файл bat следующим образом:

start \affinity 1 "1" bat1
start \affinity 2 "2" bat2
start \affinity 3 "3" bat3
start \affinity 4 "4" bat4

где bat1 — 4 — файл bat, который вызывает main.exe с другой входной папкой для каждого файла bat. Так что в этом случае было бы 4 случая main.exe работает на input_folder1, input_folder2, input_folder3, input_folder4 соответственно.

Каковы преимущества использования такой библиотеки, как OpenMP, вместо планирования аффинности?? Я полагаю

  • Меньше использования памяти, одного стека и кучи для одного экземпляра программы, в отличие от n экземпляры программы для n ядра
  • Лучшее масштабирование

Но ожидаю ли я увидеть повышение производительности? Почему если так?

0

Решение

Если ваша проблема является просто параллельной, без взаимодействия между данными в отдельных входных файлах, то вы, вероятно, не увидите ускорения с OpenMP и даже можете увидеть замедление, так как выделение памяти и другие вещи должны быть потокобезопасным. Однопоточные процессы могут получить большую эффективность, и фактически это происходит в GNU libc, где связывание в поддержке потоков POSIX означает, что вы также получаете более медленную реализацию malloc

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]