Я пытаюсь выяснить, могу ли я использовать сопроцессор Intel Xeon Phi для «распараллеливания» следующей проблемы:
Скажем, у меня есть 2000 файлов, которые нужно обработать однопоточным исполняемым файлом. Для каждого файла исполняемый файл читает его, делает свое дело и выводит его в соответствующий выходной файл, а затем завершает работу.
Например:
FILES=/path/to/*
for f in $FILES
do
# take action on each file
./executable $f outFileCorrespondingTo_f
done
Инструменты не предназначены для многопоточного выполнения или циклического просмотра файлов, и мы пока не хотим ничего менять в их коде. Они написаны на C с некоторыми внешними библиотеками.
Мои вопросы:
Можно ли запустить этот вид «зацикливания сценариев» на собственной ОС Xeon Phi таким образом, чтобы он распараллелил вызовы исполняемого файла, чтобы они выполнялись одновременно на всех его ядрах? Достаточно ли для этого «общего назначения»?
Сами файлы довольно маленькие, поэтому 8 ГБ памяти будет более чем достаточно для хранения данных во время выполнения, но не для хранения всего вывода на устройстве, поэтому мне нужно будет выводить на хост. Итак, мой второй вопрос: возможен ли такой обмен памятью «извне»?
т. е. не закодировано в инструменте, но управляется хост-ОС и устройством для каждого выполнения исполняемого файла.
- Если это возможно, может ли это как-то повысить производительность, или узкие места в распределении памяти и потоков будут слишком интенсивными? В основном каждое выполнение занимает несколько секунд, в зависимости от длины входного файла, но я вполне уверен, что это на несколько порядков больше, чем то, сколько потребуется для передачи файла.