Сценарий: у меня есть программа, которая может быть без труда распараллеленный с использованием 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
ядраНо ожидаю ли я увидеть повышение производительности? Почему если так?
Если ваша проблема является просто параллельной, без взаимодействия между данными в отдельных входных файлах, то вы, вероятно, не увидите ускорения с OpenMP и даже можете увидеть замедление, так как выделение памяти и другие вещи должны быть потокобезопасным. Однопоточные процессы могут получить большую эффективность, и фактически это происходит в GNU libc, где связывание в поддержке потоков POSIX означает, что вы также получаете более медленную реализацию malloc
Других решений пока нет …