2015-04-06 2 views
0

Я разрабатываю эффективный разреженный матричный решатель, который использует концепцию многопоточности (C++ 11 std :: thread) за последний год. Выполнение самостоятельного теста на моем коде работает отлично, и все ожидания превышены. Однако при связывании кода (как статической библиотеки) с программным обеспечением, которое я разрабатываю, производительность была намного хуже и из того, что я вижу в загрузках ЦП в диспетчере задач, все потоки работают на одном ядре, которое не было в ходе автономного тестирования. Имеет ли системная нагрузка какое-либо отношение к этому?Изменение поведения многопоточности при связывании статической библиотеки с программой

У меня нет доступа к программному коду.

У кого-нибудь есть какие-либо советы или какие-либо объяснения?

+2

, если все потоки работают на одном ядре, это может быть из-за 'SetProcessAffinityMask()' вызывается где-то в приложении –

+0

@Slava Zhuyko, приложение написано в FORTRAN, а SetProcessAffinityMask() не поддерживается на этом языке. – Anas

ответ

1

Вы считали компромиссы между контекстным переключателем и фактической рабочей нагрузкой каждого потока? Эта проблема может возникнуть, если переключение контекста будет более интенсивным, чем фактическая загрузка каждого потока. Попробуйте увеличить работу каждого потока и посмотреть, не решена ли проблема

+0

Рабочая нагрузка, которую я использую во время моего тестирования, одинакова в обоих случаях (автономная и с приложением). В автономном случае я могу увидеть прирост до 80%, но с приложением производительность хуже, чем последовательный код. – Anas