Циклический просмотр всех файлов в каталоге одновременно

У меня есть цикл внутри цикла Внешний цикл просто проходит через каждый файл в каталоге и запускает внутренний цикл

Могу ли я выбрать несколько файлов и запустить внутренний цикл для этих файлов одновременно?

Я использую 32-ядерный 100-гигабайтный сервер. И в настоящее время я использую только 1% ЦП, выполняя 1 на 1

Я хотел бы ускорить это, запустив несколько файлов одновременно, чтобы получить максимальную отдачу от моего суперкомпьютера и сократить время.


person Lucas    schedule 29.12.2016    source источник
comment
вам нужно использовать несколько потоков, скорее всего (по одному на каждый файл), это не произойдет волшебным образом, выбрав 2 файла, цикл все равно будет синхронным для первого файла, затем для второго.   -  person abdul ahmad    schedule 29.12.2016
comment
ваш вопрос какой-то расплывчатый. Ответ на ваш вопрос: «Да, вы можете выбрать несколько файлов и обрабатывать их асинхронно (одновременно)», но реальный вопрос заключается в том, «как?». Вам, вероятно, потребуется сделать это в нескольких потоках, каждый поток будет обрабатывать каждый отдельный файл независимо. Я не эксперт в Matlab, но вы, вероятно, можете найти много ресурсов, выполнив поиск в Google, вот ссылка на учебник, который я нашел: instructables.com/id/Matlab-Multithreading-EASY   -  person abdul ahmad    schedule 29.12.2016
comment
иногда вы можете использовать parfor вместо for   -  person Datsheep    schedule 29.12.2016
comment
Какую операцию выполняет внутренний цикл? Если это в основном чтение/запись файлов, вы не сэкономите много времени, работая параллельно, поскольку узким местом в любом случае будет ваш дисковый ввод-вывод. Если основное время внутреннего цикла тратится на вычисления ЦП, то распараллеливание может оказаться полезным.   -  person Hoki    schedule 29.12.2016
comment
Ищите «парфор»   -  person Mendi Barel    schedule 29.12.2016
comment
Если каждый файл не слишком велик и большая часть времени уходит на вычисления ЦП, как указал @Hoki, вы можете сначала рассмотреть возможность загрузки всех файлов, а затем выполнить вычисления векторизованным способом (если возможно).   -  person EBH    schedule 29.12.2016


Ответы (1)


Существует несколько вариантов распараллеливания сценария Matlab.

  1. если у вас есть лицензия на набор инструментов параллельных вычислений, вы можете заменить внешний цикл циклом parfor. См. это.
  2. если у вас нет этой лицензии, вы можете использовать сторонний пакет Multicore. Вам нужно будет изменить свой код, чтобы написать код для мастера и для подчиненного устройства. См. это.
  3. если вы не хотите слишком сильно переосмысливать свой код, вы можете удалить внешний цикл и принять имя файла в качестве аргумента. Затем используйте GNU parallel, чтобы запустить столько экземпляров скрипта, сколько процессоров на машинах, и продолжайте это делать, пока не будут обработаны все файлы. Посмотри это.
person damienfrancois    schedule 30.12.2016