Я работаю над программой, которая должна вычислить foobar
для многих файлов, foobar
может быть выполнена параллельно или последовательно для одного файла, программа получит много файлов (, который может иметь различный размер! ) и применять вычисления foobar
параллельно или последовательно к каждому из них с указанным числом потоков.
Вот как запускается программа на 8 файлах с тремя потоками.
./program 3 file1 file2 file3 file4 file5 file6 file7 file8
Планирование по умолчанию, которое я реализовал, заключается в параллельном воздействии на один поток в каждом файле для выполнения вычислений (так теперь работает моя программа!).
Редакция: вот расписание по умолчанию, которое я использую
#pragma omp parallel for private(i) schedule(guided,1)
for (i = 0; i < nbre_file; i++)
foobar(files[i]); // according to the size of files(i) foobar can react as a sequential or a parallel program (which could induce nested loops)
См. Изображение ниже
На изображении выше последнее время - это время, затрачиваемое на последовательное решение foobar
для самого большого файла file8 .
Я думаю, что лучшее планирование, которое будет эффективно работать с рабочим балансом, могло бы заключаться в применении вычисления foobar
для большого файла параллельно. Как на рисунке ниже, где tr i представляет поток.
таким образом, что в последний раз будет потрачено время на решение foobar
параллельно ( на изображении выше мы использовали два потока! ) для самого большого файла file8
Мой вопрос:
можно ли сделать такое планирование с помощью openmp?
Спасибо за любой ответ!