Сценарий: у меня есть программа, которую можно легко распараллелить с помощью 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
ядер. - Лучшее масштабирование
Но могу ли я ожидать повышения производительности? Почему, если так?