Программы на многоядерном процессоре
|
|
MAKCim565 | Дата: Понедельник, 13 Августа 2012, 01:41 | Сообщение # 1 |
почетный гость
Сейчас нет на сайте
| Сегодня работая над своей игрой решил побаловаться и поставил на карту очень много юнитов. Запустил и игра начала очень сильно тормозить. Глянул в Диспетчер задач и увидел, что у CPU из двух ядер только одно задействовано полностью.
Как задействовать остальные ядра?
|
|
| |
Нохчи | Дата: Понедельник, 13 Августа 2012, 02:03 | Сообщение # 2 |
заслуженный участник
Сейчас нет на сайте
| В принципе можно привязать поток к любому процессору/ядру, гугли SetThreadAffinityMask.
Многие вопросы по Windows отпадут, если посмотреть тут
Сообщение отредактировал Нохчи - Понедельник, 13 Августа 2012, 02:23 |
|
| |
RUNGOGET2THECHOPAH | Дата: Понедельник, 13 Августа 2012, 02:30 | Сообщение # 3 |
участник
Сейчас нет на сайте
| Грамотно (так, чтобы был получен прирост производительности, а не наоборот) распараллелить готовое приложение оче сложно, лучше оптимизируй свой код - наверняка кучу ненужной хрени рисуешь. И да, если эта игра - LostLand из твоей подписи, то спешу тебя обрадовать: проблема в SDL. Алгоритмы этой библиотеки достаточно медленно отрисовывают графон (потому что вообще используется DirectDraw). При малом количестве объектов это не сильно заметно, а вот отрисовка нескольких сотен спрайтов приводит к заметным просадкам фпс. Поэтому сейчас SDL в основном используют не для игр, а для демок и прочих подобных вещей. Так что тут три выхода: 1. Вместо SDL использовать какой-нибудь API поновее (SFML, например, объектно-ориентированная замена SDL. Правда не знаю, есть ли у нее подобного рода траблы с большим количеством спрайтов, но на форумах по этому поводу вроде не жалуются). 2. Использовать SDL только для создания окна, получения пользовательского ввода и воспроизведения звука. Для вывода графона использовать чистый OpenGL (http://lazyfoo.net/SDL_tutorials/index.php тут в последнем туториале показано, как, собственно, "подключить" OpenGL к SDL проекту. Остальное легко найти в туториалах к самому OpenGL, коих навалом в интернете - тот же NeHe). 3. Не спаунить очень много юнитов. Есть, правда, еще одно решение: существует библиотека glSDL (если мне память не изменяет), которая заменяет все медленные функции отрисовки SDL на новые оптимизированные. Я ей не пользовался, но многие нахваливают. Даже в коде, говорят, ничего менять не приходится, просто подключаешь библиотеку в готовый проект, пересобираешь и все.
|
|
| |
FERAMON | Дата: Понедельник, 13 Августа 2012, 02:41 | Сообщение # 4 |
Dansy Riter
Сейчас нет на сайте
| Quote (MAKCim565) Как задействовать остальные ядра?
Долбани по ядрам каким-нибудь мощным трояном. Жить захочет, сработает инстинкт самосохранения и активируются все ядра.
Я надеюсь, что у тебя не супер компьютер. А то рискуешь весь район без энергии оставить
Наш проект "ИСТОРИЯ АНГЕЛА "
|
|
| |
Archido | Дата: Понедельник, 13 Августа 2012, 08:20 | Сообщение # 5 |
Сэнсэй
Сейчас нет на сайте
| Соглашусь с RUNGOGET2THECHOPAH, дело тут не в многопоточности, а в медленной отрисовке. Нужно заменять SDL на нормальный GAPI (Dx \ OGL) или взять готовый 2д движок, типа HGE. И будет все путем
C++ - он особенный. С помощью него можно не только выстрелить себе в ногу, но и повеситься в пустой комнате:)
|
|
| |