![]() |
|
Модераторы: Rickert |
![]()
|
|
| Tror |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 193 Регистрация: 29.4.2005 Где: Кишинёв Репутация: нет Всего: 4 |
Доброго времени суток, уважаемые игроделы.
Программированием графики занялся недавно и поэтому вопровов пока больше чем ответов. Начал я с уроков NeHe. На днях заметил одну странную особенность программ на OpenGL -- даже каркас приложения неотображающий ничего грузит проц на все 100 %. Сначала я подумал, что хромает моя реализация программы, но потом запустил екзешник от NeHe -- картина та же самая. Почему так происходит? --------------------
Не говори всегда что знаешь, но знай всегда что говоришь. /Клавдий/============================================Кто может -- тот делает. Кто не может... тот получает сертификат MCSE ;) |
|||
|
||||
| DENNN |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3878 Регистрация: 27.3.2002 Где: Москва Репутация: 3 Всего: 43 |
Видеокарта без поддержки 3D, вот оно видимо и грузит проц.
|
|||
|
||||
| srd |
|
||||
![]() Нереварин ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 951 Регистрация: 30.8.2003 Где: Владивосток Репутация: нет Всего: 49 |
Корень зла в цикле выборки сообщений. Следующая программа (заметьте, ничего общего не имеющая с OpenGL, DirectX, 3D и прочим) грузит процессор. В примерах от NeHe используется практически точно такой же код для цикла выборки оконных сообщений.
Проблема в том, что цикл крутится вхолостую даже тогда, когда нет оконных сообшений в очереди. Нагрузку можно снизить так (по мотивам примеров из DirectX SDK):
Идея в том, что когда наше приложение не активно, то очередное оконное сообщение выбирается из очереди функцией GetMessage, а не функцией PeekMessage. GetMessage() не возвращает управление, пока не будет получено оконное сообщение, благодаря чему в неактивном приложении цикл останавливается. У меня на машине первый вариант грузит проц на 100% не зависимо от того, активно ли приложение, или нет. Если работает второй вариант, то стоит переключиться на другое окно, как нагрузка падает до 0%. Это сообщение отредактировал(а) srd - 24.10.2005, 14:05 -------------------- Не смей читать мою подпись!!! |
||||
|
|||||
| Tror |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 193 Регистрация: 29.4.2005 Где: Кишинёв Репутация: нет Всего: 4 |
Ну вроде кое-что проясняется. Но всё же мне не нравится тот
факт, что когда окно активно оно все равно жрёт 100%. Видюха у меня далеко не топовая (GeForce 256 32Mb + дрова от Nvidia), но насколько я знаю у неё есть 3д ускоритель. Насколько я знаю в дровах должна быть аппаратная поддержка OpenGL. Может быть по умолчанию включается софтварный режим. И как вообще это можно узнать? Заранее благодарен. --------------------
Не говори всегда что знаешь, но знай всегда что говоришь. /Клавдий/============================================Кто может -- тот делает. Кто не может... тот получает сертификат MCSE ;) |
|||
|
||||
| maxim1000 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: 2 Всего: 110 |
а почму бы и не съедать 100%, когда человек смотри 3d эффекты
ведь производительность не просто пропадает, она используется для повышения качества... т.е. если пользователь, например, загрузит игрушку, а она ему грузит процессор на 50%, он спросит "почему не используются остальной ресурс процессора, чтобы сделать все еще красивее?" Добавлено @ 15:59 конечно, совсем другое дело, если параллельно должны работать другие потоки или процессы... тогда уже надо как-то специфически регулировать распределение времени процессора... -------------------- qqq |
|||
|
||||
| Mad |
|
||||||
|
Опытный ![]() ![]() Профиль Группа: Эксперт Сообщений: 656 Регистрация: 18.10.2004 Где: Одесса Репутация: нет Всего: 19 |
в обоих фразах нет полного понимания принципа распределения процесорного времени между приложениями. Tror 100% загрузки - это не загрузка проца обним приложением, а показатель того, что все процесорное время занято приложениями (всеми в сумме, а не только этим), к томуже идет реч именно о времени, а не о выч. способности например, несмотря на полную загрузку проца, остальные приложения в это время выполняються у тебя без особых тормозов Добавлено @ 16:56
Режим рендера только аппаратный (софтовая эмуляция присутсвует только в DirectX, в OpenGL ее и в помине нет) |
||||||
|
|||||||
| maxim1000 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: 2 Всего: 110 |
просто я имел в виду такую ситуацию:
у игры (что поделаешь, это - первое что приходит в голову один из них - поток работы с графикой но ведь другой поток вполне может оказаться более важным (ситуации всякие бывают) тогда, нужно будет приостанавливать графический поток, т.к. он работает над полезным, но не необходимым повышением качества
далеко не факт если есть приложение, которому нужно много процессорного времени (например, компиляция чего-то большого), то запуск подобного графического приложения может привести к замедлению первого раза в два... это я и подразумевал под специальными ситуациями... -------------------- qqq |
|||
|
||||
| Mad |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Эксперт Сообщений: 656 Регистрация: 18.10.2004 Где: Одесса Репутация: нет Всего: 19 |
опять таки, не стоит путать понятия процессорное время,и нагрузка процессора, это разные вещи |
|||
|
||||
| maxim1000 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: 2 Всего: 110 |
да, выразился не очень хорошо просто у меня сейчас, например, есть одно приложеньице, которое компилится куча времени и занимает процессор, как может, и это, конечно, сказываетя если я, например решу в это время поархивировать что-нибудь... так что имелось в виду и нагрузка и время -------------------- qqq |
|||
|
||||
| Tror |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 193 Регистрация: 29.4.2005 Где: Кишинёв Репутация: нет Всего: 4 |
Да, признаюсь что тоже выразился не совсем корректно по
поводу процессорного времени, но ситуация для меня потихоньку проясняется. Спасибо всем кто не прошёл мимо и постарался помочь. Но тут по ходу чтения у меня возник ещё один вопросец: Как я понимаю основная ф-ция render() выполняется в отсутствие каких бы то ни было сообщений, т.е. всё свободное время уходит на отрисовку сцены и чем больше раз выполняется render(), тем больше fps. Собственно вопрос: если имеется довольно мощная видюха и проц, то fps бывает зашкаливает за нормальные 50-60(сам видел у друга на X850 fps = 500), т.е. мощность тратится впустую. Можно ли ограничивать fps каким то определённым значением, а всё оставшееся время использовать для расчётов. И, вообще, целесообразно ли исползовать многопоточность в графических приложениях. Если что не так поправьте. Заранее благодарен. --------------------
Не говори всегда что знаешь, но знай всегда что говоришь. /Клавдий/============================================Кто может -- тот делает. Кто не может... тот получает сертификат MCSE ;) |
|||
|
||||
| maxim1000 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: 2 Всего: 110 |
очень просто: 1. делаешь WaitableTimer на 1/50 секунды (для 50 fps) 2. вызываешь render() 3. вызываешь WaitForSingleObject если render() отработала быстрее, оставшееся время поток будет заморожен и процессор ним использоваться не будет если за 1/50 не успела, WaitForSingleObject сразу возвратится, и сразу начнется обработка следующего кадра P.S. про все, что связано с WaitableTimer и WaitForSingleObject можно почитать в MSDN... -------------------- qqq |
|||
|
||||
| srd |
|
|||
![]() Нереварин ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 951 Регистрация: 30.8.2003 Где: Владивосток Репутация: нет Всего: 49 |
maxim1000
А есть гарантия, что в результате "замораживания" основного потока с помощью WaitForSingleObject() активизируются другие потоки именно нашего приложения, а не какого-нибудь постороннего? -------------------- Не смей читать мою подпись!!! |
|||
|
||||
| maxim1000 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: 2 Всего: 110 |
я не знаю тонкостей алгоритмов распределения процессорного времени между потоками и процессами Windows, но думаю, такой гарантии не будет с другой стороны, если в это время не будет запущено каких-то "все время что-то делающих" приложений, наверное, бОльшая часть отойдет нашим (если они не будут замороженны, конечно) Добавлено @ 14:17 можно, конечно, чего-нибудь поколдовать с приоритетами, но я с ними не работал... -------------------- qqq |
|||
|
||||
| DENNN |
|
||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3878 Регистрация: 27.3.2002 Где: Москва Репутация: 3 Всего: 43 |
Вы вообще как себе многозадачность представляете? Это все равно что сравнивать линейное программирование и ООП. На ваш процес выделяется некоторое количество квантов процессорного времени. Другие процессы выполняются теоретически "параллельно". Если ваша задача не будет требовательна к ресурсам, а их в системе будет нехватка, то процеесороное время будет отданно процессу с большим приоритетом. Внутри процееса квант распеределяется между потоками. Не считая того, что процов может быть два или пень с HP. Тогды часть процессов в некоторыемоменты времени может выполняться одновременно для двух разных задач.
Честно говоря в лом разбираться в коде, но нужно иметь в виду, что в хорошем OGL приложении сцена перерисовывается в двух случаях: 1)По требованию ОС перерисовать часть окна или все окно целиком. 2)Если изображение изменилось |
||||
|
|||||
| srd |
|
|||
![]() Нереварин ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 951 Регистрация: 30.8.2003 Где: Владивосток Репутация: нет Всего: 49 |
Тут я запутался. "Квант" выделяется именно процессу, а не потоку? Т.е. под "квантом" подразумевают обычно нечто неделимое, как он может распределяться между потоками? -------------------- Не смей читать мою подпись!!! |
|||
|
||||
![]()
|
| Правила форума "Программирование игр, графики и искуственного интеллекта" | |
|
|
НА ЗЛОБУ ДНЯ: Дорогие посетители, прошу обратить внимание что новые темы касающиеся новых вопросов создаются кнопкой "Новая тема" а не "Ответить"! Любые оффтопиковые вопросы, заданные в текущих тематических темах будут удалены а их авторы, при рецедиве, забанены.
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rickert. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Программирование игр, графики и искусственного интеллекта | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |