2009-09-11 2 views
2

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

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

+0

Непрерывная очередь? УБЕГАЙ!!!! – 2009-09-11 16:59:30

ответ

0

Вы пробовали использовать тот же код под XP и Windows 7?

У меня есть многопоточный код, который выводит на экранные совместимые растровые изображения. Каждый поток отображает его собственное совместимое растровое изображение. Однако по какой-то нечетной причине этот рисунок принимает AGES на Vista. Я теряю более 50% времени обработки до GDI-рендеринга. В Win 7 и XP у меня таких проблем нет. Интересно, что я столкнулся с this article, что подразумевает, что многопоточный рендеринг GDI под Vista безнадежно нарушен. В какой-то момент я попытаюсь придумать метод, в котором весь рендеринг выполняется моим основным потоком, а не из вспомогательных потоков, чтобы проверить, улучшает ли производительность Vista. Это было бы огромным кошмаром вещи, чтобы закодировать, хотя и мой основной рынок использует XP, поэтому я не al; который суетился на данный момент ...

+0

Я еще не тестировал его под XP, но он делает то же самое в Windows 7. Так как замедление происходит случайным образом, с теми же вещами, происходящими с каждым фреймом, я действительно не понимаю, почему происходит замедление. На самом деле это меньше похоже на замедление и больше похоже на что-то блокирует поток в течение некоторого времени. Отрисовка начинает заикаться, а частота кадров падает примерно с 370 до 200, а затем поднимается до нормального уровня. – 2009-09-11 20:22:53

+0

i reckon получение профиля - ваш единственный путь вперед ... – Goz

+0

VTune 30-дневная демоверсия, вероятно, лучшая вещь, но вам потребуется больше всего этих 30 дней, чтобы интерпретировать данные, которые вы возвращаете ... – Goz

1

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

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

Visual Studio 2010 beta1 имеет отличный профайлер, который идеально подходит для понимания того, что вызывает замедление, если оно находится в вашем приложении, Hazim Shafi's blog просматривает, как его использовать.

Вы также можете посмотреть на инструмент XPERF, который доступен в windows performance toolkit (вы должны использовать программу установки платформы SDK, но вы только необходимо установить этот узел, так что это на самом деле довольно быстро).

+0

Я не знаю, t, как сон, находящийся там, и я ищу способ избавиться от них и правильно исправить проблему. Я буду смотреть на VS 2010, я искал хороший профилировщик, который выполняет потоки, но я мог найти только профилировщик Intel, который стоит слишком дорого. Причина, по которой я предполагаю, что это что-то с Vista, заключается в том, что замедление происходит даже тогда, когда для рендеринга есть только одна задача, а второе ядро ​​остается бездействующим. В задании рендеринга все настроено на то, где он просто передает данные в DirectX, не выделяет, не блокирует или ничего, что может вызвать замедление. – 2009-09-11 20:17:45

+0

vs 2010 в бета-версии прямо сейчас, так что это эффективно бесплатно.инструментарий производительности Windows (xperf) также свободен, оба должны показать источник замедления, но я думаю, что его легче найти в профилировщике vs 2010. Я думаю, что amd также имеет профилировщик нити, который является бесплатным. – Rick

Смежные вопросы