Я написал код для моделирования системы связи. В этой системе связи есть часть, которую я запускаю параллельно с помощью pthreads. Он в основном исправляет ошибки, вызванные каналом.Как улучшить производительность времени кода C++ pthread, который использует барьеры
Когда я получаю фрейм битов, три компонента алгоритма работают над битами. Обычно они запускаются один за другим, что приводит к оптимальной производительности, но огромная задержка.
Идея состоит в том, чтобы заставить их работать параллельно. Но для достижения оптимальной производительности 3 компонента обрабатывают каждый бит одновременно.
Если я просто запускаю их параллельно, я получаю плохие результаты, но довольно быстрая производительность. Поэтому я использовал барьеры для синхронизации процесса, когда каждый бит обрабатывается тремя компонентами, прежде чем позволить им перейти к следующему бит.
Производительность этого метода является оптимальной. Но код работает очень медленно, я занимаю еще медленнее, чем серийная реализация.
Код работает на Ubuntu с компилятором GCC.
РЕДАКТИРОВАТЬ: Еще один вопрос, проделывают ли нитки, пока они ждут открытия барьера? и если да, то как я их помешаю?
входной буфер должен быть доступен только для всех потоков, и каждый поток должен иметь выходной буфер для своих собственных. таким образом вам не понадобятся блокировки и могут обрабатываться параллельно. – SHR
Это отличное решение, однако компоненты зависят друг от друга, они рекурсивны по своей природе. – user304584
Как вы создаете темы? вы используете какой-то пул потоков? – SHR