Моя программа читает текстовые файлы по строкам, выделяя определенные типы слов в каждой строке (важно, в какой строке это слово было найдено). Что было бы лучше, отдельные потоки по файлам (каждый поток будет читать другой файл) или разделять их по строкам (каждый поток будет читать другую строку из того же файла)?C++ #pragma omp parallel: большие задачи или маленькие?
ответ
Если у вас нет нескольких жестких дисков, возможно, ни того, ни другого.
Жесткий диск по своей сути однопоточный - то есть он производит только один поток данных в любой момент времени. При наличии реального жесткого диска с вращающимся диском и головы, которая ищет вокруг диска, ваша лучшая пропускная способность, как правило, поступает от чтения последовательно. Поиск в файле или между отдельными файлами в разных местах может существенно снизить пропускную способность.
Если у вас несколько дисков, это будет зависеть от того, как ваши данные распределяются между дисками, но в идеале вы, вероятно, захотите что-то вроде потока, предназначенного для чтения данных с каждого физического диска.
Если у вас есть достаточная обработка для обработки данных после ее чтения, вы можете иметь один поток, считывающий данные, и помещать эти данные в какую-то очередь с потоком. Оттуда у вас есть потоки обработки, которые берут отдельные элементы данных, обрабатывают их и записывают результат в ... везде, где вы хотите свой вывод.
Если это вернется к файлу (или нескольким файлам), вы, вероятно, захотите более или менее обратного здесь: один поток для записи вывода на каждый диск результата, а потоки обработки делят свои данные в какой-то очереди. В типичном случае это будет приоритетная очередь, упорядоченная порядком, в котором данные должны быть записаны в выходной файл, поэтому выходной поток всегда записывает данные последовательно.
В зависимости от количества файлов и количества строк на каждый файл.
Если у вас относительно мало строк в каждом файле, то параллелизация не будет стоить накладных расходов. То же самое происходит, если вы обрабатываете относительно немного файлов.
Всегда мог бы параллелировать оба.
Как всегда в вопросах производительности, вы должны, вероятно, попробовать оба и измерить, если это возможно. Но вот что говорит моя интуиция:
Если файлы имеют одинаковый размер/время, затрачиваемое на обработку, каждый поток может быть лучшим.
Многие потоки, обращающиеся к одному файлу, вероятно, стоят того, только если время вычисления доминирует над временем ввода-вывода файла.
Но опять же, вы должны измерить. Догадываться о производительности идет не так часто. Как @Jerry Coffinpoints out, вполне возможно, что ни одна из них вам не поможет, но, с другой стороны, файлы могут быть предварительно загружены в ОЗУ, и в этом случае его точка может или не может применяться (в полной мере). Действительно, просто попробуй и посмотри. Это широкое поле и трудно предсказать.
- 1. C pragma omp parallel
- 2. Понимание #pragma omp parallel
- 3. pragma omp for inside pragma omp master или single
- 4. #pragma omp parallel никогда не заканчивается
- 5. OpenMP #pragma omp parallel for медленнее
- 6. pragma omp ярлыки в c
- 7. pragma omp for/parallel не работает?
- 8. замена #pragma OMP критической (C++)
- 9. Условный «pragma omp»
- 10. с использованием #pragma omp parallel для медленной работы программы
- 11. не удалось создать несколько потоков с #pragma omp parallel для
- 12. Векторизация & #pragma omp simd
- 13. #pragma omp барьер, вставленный препроцессором?
- 14. Настройка pragma omp на окнах
- 15. OpenMP Кодирование: предупреждение: игнорирование #pragma OMP параллельно
- 16. #pragma OMP критического VS CPU использования 100%
- 17. Как объявить массивы в omp pragma
- 18. OMP Serial vs Parallel Riemann Zeta
- 19. Показаны большие/маленькие Endian?
- 20. прагма OMP параллели против прагма OMP параллельно
- 21. Как игнорировать письма большие или маленькие?
- 22. В чем преимущество «#pragma omp master» в отличие от «#pragma omp single»?
- 23. Смешивание pragma omp параллельно для кода SSE: как сбросить FPU?
- 24. OpenMP «общий» не является допустимым для «#pragma OMP
- 25. Почему «omp parallel» и «omp single» не отменяют друг друга? (OpenMP)
- 26. Вложенные для циклов в OMP C
- 27. параллельные секции openmp в пределах omp parallel для?
- 28. Проблемы с производительностью #pragma omp atomic с OMP_NUM_THREADS = 1
- 29. Уменьшить OpenMP fork/join overhead, разделив #omp parallel и #omp на
- 30. Маленькие и большие значения Endian
Внедрите и запустите несколько тестов при перестановке количества файлов и их размеров. –