forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Xors3D (http://forum.boolean.name/forumdisplay.php?f=126)
-   -   Не полная загрузка системы (http://forum.boolean.name/showthread.php?t=20458)

tirarex 27.10.2016 23:51

Не полная загрузка системы
 
Решил продолжить разработку своего хоррора.
Столкнулся с проблемой. Фпс конечно стабильный и высокий,
Но загруженность цп/гпу всего 50-60%, оперативки свободно много, проект на ссд, подгрузок в риалтайме не делает.

Собсно что может быть причиной такого поведения ?
Как заставить игру юзать все ресурсы пк ?

ОРИГИНАЛ СКРИНШОТА ТУТ https://www.dropbox.com/s/cizhygorht1svic/%D0%A1%D0%BA%D1%80%D0%B8%D0%BD%D1%88%D0%BE%D1%82%2 02016-10-27%2023.47.35.png?dl=0

и более корректный https://www.dropbox.com/s/japxhmhtbv...28.22.png?dl=0


Randomize 28.10.2016 00:42

Ответ: Не полная загрузка системы
 
Delay(1) в цикл впердоль

tirarex 28.10.2016 01:07

Ответ: Не полная загрузка системы
 
Цитата:

Сообщение от Randomize (Сообщение 309529)
Delay(1) в цикл впердоль

та же хрень

moka 28.10.2016 01:08

Ответ: Не полная загрузка системы
 
А ты уверен что Xors3D + Blitz3D умеет мульти-поточно?
Если там и есть пару потоков, и они не динамично создаются, а изначально выделены под разные сферы, там может быть не эфективно распределено, и приводит к тому что не все ресурсы используются.

Но я сомневаюсь что там вообще что-либо мульти-поточно.

Randomize 28.10.2016 01:21

Ответ: Не полная загрузка системы
 
Нет, не та же.
Если убрать Delay, то будет сжираться всё процессорное время первого ядра как на первом скрине.

tirarex 28.10.2016 01:27

Ответ: Не полная загрузка системы
 
Цитата:

Сообщение от Randomize (Сообщение 309537)
Нет, не та же.
Если убрать Delay, то будет сжираться всё процессорное время первого ядра как на первом скрине.

я второй скрин кинул, на первом я альттабался кое куда.

Цитата:

Сообщение от moka (Сообщение 309534)
А ты уверен что Xors3D + Blitz3D умеет мульти-поточно?
Если там и есть пару потоков, и они не динамично создаются, а изначально выделены под разные сферы, там может быть не эфективно распределено, и приводит к тому что не все ресурсы используются.

Но я сомневаюсь что там вообще что-либо мульти-поточно.

Так проц отдыхает по полной, вся нагрузка на видеокарте. А они тоже ничего особо не делает. Если включить все пост эффекты то фпс проседает, но нагрузка не поднимается.

Вангую ограничение ксорса. Но как его убрать...

Randomize 28.10.2016 02:55

Ответ: Не полная загрузка системы
 
Минуточку, плохо прочитал первый пост:
Цитата:

Столкнулся с проблемой. Фпс конечно стабильный и высокий,
Но загруженность цп/гпу всего 50-60%
Советую почитать каким образом происходит расчёт этих показателей и что такое единица вычислительной мощности.

tirarex 28.10.2016 04:08

Ответ: Не полная загрузка системы
 
В общем, хз как считает ProcessExplorer, но Msi afterburner показывает 100% нагрузку, что странно...

Еще вроде hyper threading делает свое дело и нагрузка идет не на 1 ядро а на 2.

pax 28.10.2016 07:20

Ответ: Не полная загрузка системы
 
У тебя какой-то твининг используется (не знаю есть ли он в ксорсе)? Установи для него больше кадров в секунду.

ABTOMAT 28.10.2016 13:38

Ответ: Не полная загрузка системы
 
Блиц всю жизнь был однопоточный.
Ни hyper-threading, ни большое количество ядер процессора не смогут его заставить работать на больше чем одно ядро.
В лучшем случае будет Блиц на одном ядре, всё остальное — на другом (если их два).
Если в Блице включена вертикальная синхронизация, то FPS ограничен 60 Гц, и, если кадр отрисовался быстрее, то Блиц будет просто ждать, пока не придёт время делать новый кадр и в этот момент процессор грузить не будет, поэтому при включённой ВС Блиц не может сожрать больше определённого процессорного времени. Если отключить, то будет жрать сколько найдёт (а надо ли?).

Arton 28.10.2016 17:49

Ответ: Не полная загрузка системы
 
Цитата:

Сообщение от ABTOMAT (Сообщение 309544)
то FPS ограничен 60 Гц...

Извините, не могу не уточнить, ограничения по монитору(!), и не как иначе, если монитор 75Гц или больше, столько и FPS будет.

impersonalis 29.10.2016 02:01

Ответ: Не полная загрузка системы
 
Цитата:

Сообщение от ABTOMAT (Сообщение 309544)
Блиц всю жизнь был однопоточный.
Ни hyper-threading, ни большое количество ядер процессора не смогут его заставить работать на больше чем одно ядро.
В лучшем случае будет Блиц на одном ядре, всё остальное — на другом (если их два).

Скрупулёзности ради: физическое ядро, на котором крутится приложение может меняться операционной системой хоть каждый момент получения процессорного времени, если только не задана жёсткая привязка. (отсюда и известная проблема с QPC)
Опять-таки: что понимать под "блитц". Например, я всю логику (а она, в моей задаче, существенно тяжелее картинки) выпихивал в Си-шную DLL, там делал сколько надо потоков. Блитц, в "нужный момент" вызывал блокирующую функцию из длл-ки, которая поднимала volatile флаг, отслеживаемый потоками (вычисления шли беспрерывно) и уходила в спячку. Поток, обнаружив флаг, отгружал в память последние расчётные данные, опускал флаг и возбуждал событие, вызывающая функция просыпалась по событию и разблокировала выполнение Блитца. Память для обмена создавала длл-ка и сообщала адрес "блитцу".
Но если речь о рендере движком (а не подготовке данных для этого) - то да: блитц однопоточен.

ABTOMAT 29.10.2016 21:04

Ответ: Не полная загрузка системы
 
Ок, я говорил только про самый общий случай.
ЭЛТ-моник 120-герцовый сейчас мало у кого.
Самодельные крестовые либы с потоками как правило тоже не рассматриваются

DarkInside 04.11.2016 02:33

Ответ: Не полная загрузка системы
 
:-D Поделить экран на 4 и рендерить в 4 отдельных процессах с бесшовными окнами, синхронизацией и глобальной мышью через winapi?

Arton 04.11.2016 04:31

Ответ: Не полная загрузка системы
 
Цитата:

Сообщение от DarkInside (Сообщение 309705)
:-D Поделить экран на 4 и рендерить в 4 отдельных процессах с бесшовными окнами, синхронизацией и глобальной мышью через winapi?

О боже! Нет! Как тебе это в голову пришло!
Месье знает толк... Уж лучше библиотеку FastPointer использовать.

DarkInside 13.11.2016 18:11

Ответ: Не полная загрузка системы
 
Как dll в отдельном потоке исполнять? Можно без обертки обойтись? (в виде еще одного exe, который вызывает dll и передает данные в главный exe)

impersonalis 13.11.2016 20:29

Ответ: Не полная загрузка системы
 
Основная программа выделяет память для обмена и передаёт её адрес в качестве параметра командной строки для запуска второй программы.
Вторая программа запускается, парсит адрес памяти для обмена, начинает главный цикл. В цикле выполняется (блокирующая) функция из DLL; после каждого выполнения, результаты сохраняются в память для обмена.
В той же памяти для обмена можно выделить бит, для сигнализации о необходимости остановки: главная программа поднимает бит, а вторичная, в очередной раз перезаписывая данные, его проверяет.

Но мне это не нравится: тут много потенциально опасных мест из-за отсутствия адекватной синхронизации (например, на случай расширения ТЗ). Думаю, антивирусные системы просто взвоют. К тому же - вторичную программу сможет использовать злоумышленник, если не шифровать параметры её запуска.

DarkInside 13.11.2016 20:59

Ответ: Не полная загрузка системы
 
Ну я примерно так и представлял обертку.

Только хотел какой-то готовый интерфейс для обмена использовать. Кстати, какой интерфейс лучше (с минимальной задержкой и при этом наиболее надежный)? WIN_MESSAGE можно или может TCP/IP поднять с отчетом о доставке, чтобы синхронизацию обеспечить? Есть еще вариант через консольную утилиту невидимый ram-disk создать и обмениваться через простое чтение-запись файлов.

UAC может мозг вынести, но его легко можно обойти через ring 2 (RunAsSystem). Если основное приложение запущено от имени системы, оно может творить что угодно (запускать exe), UAC не будет вмешиваться.

Цитата:

вторичную программу сможет использовать злоумышленник, если не шифровать параметры её запуска.
если он обладает навыками, чтобы выцепить, с какими параметрами exe должен запускаться, то он так же в состоянии выцепить параметры, с которыми должна вызываться сама dll, не вижу тут принципиальной разницы

mr.DIMAS 13.11.2016 23:58

Ответ: Не полная загрузка системы
 
Насколько мне известно, блиц уже сто лет как опенсорс. Берем его потрошка, прикручиваем многопоточность, параллельно переводя на C++14. Хотя кому оно надо

DarkInside 14.11.2016 00:03

Ответ: Не полная загрузка системы
 
Не, блиц тут не при чем.

impersonalis 14.11.2016 12:47

Ответ: Не полная загрузка системы
 
Цитата:

Сообщение от DarkInside (Сообщение 310069)
Ну я примерно так и представлял обертку.

Только хотел какой-то готовый интерфейс для обмена использовать.

Ну или непосредственно сырую память (new/delete все дела) или Виндовую надстроечку - OpenFileMapping сотоварищи (Разделяемая память):
Цитата:

В операционной системе Windows для создания разделяемой памяти используется функция CreateSharedMemory[13] из пакета Win32-SDK. C другой стороны, возможно использование функций CreateFileMapping и MapViewOfFile[14] из MSDN.
Это, конечно, не предел мечтаний, с другой стороны - под стать архитектуре с двумя приложениями :(


Часовой пояс GMT +4, время: 03:28.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot