OpenMP последовательное чтение с диска и параллельная обработка

0

Есть мой вопрос:

У меня много файлов (более 1000) одного размера (несколько Мб). Я должен их прочитать и извлечь некоторую информацию. На этом этапе извлечения информации требуется некоторое время, поэтому я могу использовать (по крайней мере, надеюсь) на этот раз, чтобы прочитать другой файл. Я стараюсь:

#pragma omp parallel for
for (int i=0; i<FilesCount; i++)
{
    myData Data;

    #pragma omp critical
    {
        Data.ReadDataFromFile (FileNames[i]);
    }

    //Operate with the Data and extract some information
}

Это не работает, как я ожидаю. Я также попытался использовать:

#pragma omp ordered

и результат тот же - используется только один поток. Другие OpenMP работают отлично. Может быть, проблема в том, что я использую fstream для чтения?

В чем проблема с этим и как это сделать правильно?

  • 0
    Что вы подразумеваете под ожидаемым? Приведенный выше код будет блокировать каждый поток в чтении данных пула задач OMP (см. Ответ @ Frank ниже.
  • 0
    Вы заметили закомментированную строку под «критическим» разделом? Или вы имеете в виду, что во время обработки блокирует действия других потоков, даже если они прошли этот раздел? Тогда как насчет «заказанного» дела? Не могли бы вы предложить какое-либо решение?
Показать ещё 4 комментария
Теги:
openmp

1 ответ

0

Все в блоке, отмеченном

#pragma omp critical

будет выполняться только одним потоком за раз. Все остальные потоки должны ждать, пока текущий поток не покинет этот блок.

Раздел "критический" в учебнике OpenMP

  • 0
    Вот почему я поставил там только функцию чтения. После этого блока «Данные» содержит информацию, с которой я могу работать, и при этом другой поток может начать читать новый файл.
  • 0
    ОК, извините за недопонимание вашего вопроса. Я думал, что ReadDataFromFile также содержит дорогостоящий материал, который вы хотите выполнять одновременно, и я пропустил комментарий под этим блоком.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню