Это скорее расширенный комментарий, чем ответ ...
Вы пытаетесь написать параллельный grep или пытаетесь написать grep, который работает с различными параллельными данными?Я могу прочитать ваш вопрос, чтобы предположить, что вы думаете об одном или обоих.Если я прав (учтите, что обычно я ошибаюсь, когда пытаюсь интерпретировать вопросы), я предлагаю вам сначала разделить две проблемы и решить одну, а затем добавить другую.
Если ваш сценарий должен быть запущенgrep для многих маленьких файлов, тогда это будет очень легко распараллеливать, вам просто нужен какой-то планировщик, чтобы разделить работу примерно на равные куски.
Если ваш сценарий предполагает использование grep для одного (или нескольких) больших файловзатем я вижу преимущества чтения файла по частям, по одному на процесс (или).Проблема, которую я вижу с этим, состоит в том, что разрешение некоторых совпадений будет лежать между кусками.Это кажется мне интересной проблемой, но вы - студент университета, у которого есть доступ к новейшей литературе, поэтому вы будете знать лучше, чем я.
Если ваш сценарий - написать параллельный grep, то этоПрограмма, которая использует несколько процессорных ядер при запуске, это, вероятно, еще более интересная (то есть сложная) проблема.Поскольку grep работает путем построения FA, а FA часто моделируются как графы, и поскольку графы (если они удовлетворяют некоторым критериям) можно разложить на подграфы, это, вероятно, выполнимо - вам просто нужно распараллелить построениеFA, порождает темы для подграфов и собирает результаты.Я полагаю, что распределение нагрузки будет затруднено.
У меня нет глубоких знаний о параллельных файловых системах, но я думаю, что я прав, предлагая, что вы получите преимущества только в том случае, если разные узлы на вашемкластер читать разные части файла на DFS.Если вы используете потоки, это означает, что ваши потоки должны находиться на разных узлах кластера?
Теперь, чтобы дать несколько плохих ответов на ваши вопросы.
- Должен ли я беспокоиться оУзкие места ввода / вывода?-- Да, черт возьми.Вы измерили производительность grep на достаточно хорошем уровне, чтобы определить, какие пропорции времени настенных часов тратятся на различных его этапах, включая построение ТВС, чтение входных файлов и т. Д.grep - очень зрелый продукт, на который было потрачено много усилий по оптимизации, поэтому вы поставили перед собой жесткую задачу.Вы также измерили характеристики вашей кластерной файловой системы и время взаимодействия между потоками, такого рода вещи.
- Как использовать преимущества DFS при написании кода C?- Не могу вам помочь, но я бы подумал, что API файловой системы обеспечивает необходимые функции;вы, кажется, пытаетесь обратиться непосредственно к аппаратному обеспечению диска.
- Есть ли способ реализовать масштабируемое параллельное сопоставление grep / regex?- Я уверен, что есть, но вы студент, разве вы не проверили возможности и подводные камни перед началом этого проекта?