Многопоточный движок Оконное случайное замедление - PullRequest
2 голосов
/ 11 сентября 2009

У нас установлен многопоточный движок на основе задач, в котором планировщик передает задачу в очередь без блокировки потоков. Движок находится в C ++ с DirectX для рендеринга, и мы используем boost :: thread для создания потоков. В оконном режиме он случайным образом замедляется на секунду или около того, а затем снова ускоряется. Кажется, что это то, что Vista, кажется, вызывает, но мы не можем понять, как решить это правильно.

Одна вещь, которую мы попробовали, которая, казалось, помогла со случайными замедлениями, заставляла поток спать в течение миллисекунды после обработки каждой задачи, но это вызывает другие проблемы и не является действительно хорошим решением.

Ответы [ 2 ]

1 голос
/ 11 сентября 2009

Первое, что я бы порекомендовал сделать, это понять, что вызывает замедление при профилировании.

Бросать в случайные сны редко бывает хорошей идеей (если судить по этому опыту, да, я сделал это, и да, я исправил это позже), и ни один из них не рассуждает об источниках проблем производительности, особенно в многопоточной среде.

Visual Studio 2010 beta1 имеет отличный профилировщик, который идеально подходит для понимания причин замедления работы приложения, В блоге Хазима Шафи рассказывается, как его использовать.

Вы также можете взглянуть на инструмент xperf, который доступен в Windows Performance Toolkit (вам нужно использовать установщик sdk платформы, но вам нужно только , чтобы установить этот узел так, это на самом деле довольно быстро).

0 голосов
/ 11 сентября 2009

вы пытались запустить один и тот же код под XP и Windows 7?

У меня есть несколько многопоточных кодов, которые отображаются в закадровых совместимых растровых изображениях. Каждый поток рендерится в собственное совместимое растровое изображение. Однако по какой-то непонятной причине этот рисунок занимает ВОЗРАСТ на перспективу. Я теряю более 50% своего времени на рендеринг GDI. Под Win 7 и XP у меня таких проблем нет. Интересно, что я наткнулся на эту статью , которая подразумевает, что многопоточный рендеринг GDI в Vista безнадежно нарушен. В какой-то момент я попытаюсь найти способ, при котором весь рендеринг выполняется моим основным потоком, а не вспомогательными потоками, чтобы проверить, улучшается ли производительность Vista. Хотя это было бы огромным кошмаром для кодирования, и мой основной рынок использует XP, так что я не все; что суетилось на данный момент ...

...