Четверг, 18 Апреля 2024, 09:20

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Форум игроделов » Программирование » C/C++ » Программы на многоядерном процессоре
Программы на многоядерном процессоре
MAKCim565Дата: Понедельник, 13 Августа 2012, 01:41 | Сообщение # 1
почетный гость
Сейчас нет на сайте
Сегодня работая над своей игрой решил побаловаться и поставил на карту очень много юнитов. Запустил и игра начала очень сильно тормозить. Глянул в Диспетчер задач и увидел, что у CPU из двух ядер только одно задействовано полностью.

Как задействовать остальные ядра? smile
НохчиДата: Понедельник, 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)
Как задействовать остальные ядра?


Долбани по ядрам каким-нибудь мощным трояном. Жить захочет, сработает инстинкт самосохранения и активируются все ядра.

Я надеюсь, что у тебя не супер компьютер. А то рискуешь весь район без энергии оставить wink


Наш проект "ИСТОРИЯ АНГЕЛА "
ArchidoДата: Понедельник, 13 Августа 2012, 08:20 | Сообщение # 5
Сэнсэй
Сейчас нет на сайте
Соглашусь с RUNGOGET2THECHOPAH, дело тут не в многопоточности, а в медленной отрисовке. Нужно заменять SDL на нормальный GAPI (Dx \ OGL) или взять готовый 2д движок, типа HGE. И будет все путем smile

C++ - он особенный. С помощью него можно не только выстрелить себе в ногу, но и повеситься в пустой комнате:)
Форум игроделов » Программирование » C/C++ » Программы на многоядерном процессоре
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг