IPB

Помощь по разделу

Сайт S.T.A.L.K.E.R. Inside / [ЗП] Параметры командной строки / Распаковщик ресурсов

 
>

[ТЧ,ЧН,ЗП] Многоядерность

, Используем два и более ядер

 
 Stalker_Monolit
сообщение 10.08.2015, 17:08
Сообщение #1


Опытный Геймер
*******

Группа: Участник
Сообщений: 161
Регистрация: 08.03.2015
Из: Украина
Пользователь №: 21427



Перед прочтением прошу сильно не ругать если что это моя первая тема тут (IMG:style_emoticons/default/unsure.gif)
Перед история поиска или как я нашел строчку - это можно прочесть по желанию.
Начну с того что я как я любитель билдоман и уже вошла в привычку моя поисковая сноровка, и она меня не подвила (IMG:style_emoticons/default/laugh.gif) я начал свой день с того что мне захотелось найти в исходниках X-Ray те строки которые отвечают за использование процессора и я начал эти поиски и они прошли недолго часика так за 4-5 в поиске через Notepad++ я сначала нашел вот эти подозрительные строки.
Клац
// Фунция для тупых требований THQ и тупых американских пользователей
BOOL IsOutOfVirtualMemory()
{
#define VIRT_ERROR_SIZE 256
#define VIRT_MESSAGE_SIZE 512

SECUROM_MARKER_HIGH_SECURITY_ON(1)

MEMORYSTATUSEX statex;
DWORD dwPageFileInMB = 0;
DWORD dwPhysMemInMB = 0;
HINSTANCE hApp = 0;
char pszError[ VIRT_ERROR_SIZE ];
char pszMessage[ VIRT_MESSAGE_SIZE ];

ZeroMemory( &statex , sizeof( MEMORYSTATUSEX ) );
statex.dwLength = sizeof( MEMORYSTATUSEX );

if ( ! GlobalMemoryStatusEx( &statex ) )
return 0;

dwPageFileInMB = ( DWORD ) ( statex.ullTotalPageFile / ( 1024 * 1024 ) ) ;
dwPhysMemInMB = ( DWORD ) ( statex.ullTotalPhys / ( 1024 * 1024 ) ) ;

// Довольно отфонарное условие
if ( ( dwPhysMemInMB > 500 ) && ( ( dwPageFileInMB + dwPhysMemInMB ) > 2500 ) )
return 0;

hApp = GetModuleHandle( NULL );

if ( ! LoadString( hApp , RC_VIRT_MEM_ERROR , pszError , VIRT_ERROR_SIZE ) )
return 0;

if ( ! LoadString( hApp , RC_VIRT_MEM_TEXT , pszMessage , VIRT_MESSAGE_SIZE ) )
return 0;

MessageBox( NULL , pszMessage , pszError , MB_OK | MB_ICONHAND );

SECUROM_MARKER_HIGH_SECURITY_OFF(1)

return 1;
}

Немного посмотрев на них я подумал может это ограничение использование видео памяти но после того как я тут отписался меня в этом переубедили (IMG:style_emoticons/default/laugh.gif) Пост но главное суть я понял. Немного полистав в глубь x_ray.cpp я увидел вот это:
CODE
#endif
#else // DEDICATED_SERVER
g_dedicated_server = true;
#endif // DEDICATED_SERVER

SetThreadAffinityMask (GetCurrentThread(),1);

// Title window
// Картинка при старте
logoWindow = CreateDialog(GetModuleHandle(NULL), MAKEINTRESOURCE(IDD_STARTUP), 0, logDlgProc );


HWND logoPicture = GetDlgItem(logoWindow, IDC_STATIC_LOGO);
RECT logoRect;
GetWindowRect(logoPicture, &logoRect);

SetWindowPos (
logoWindow,

И тут я немного погуглил и сказав не может быть начал быстренько собирать сорцы но при этом поменяв цифру 1 на 2 и был приятно удивлен мой гаджет на боковой панели показал усердное использование второго ядра, не долго думая я поставил цифру 0 и попробовав я увидел свое счастье два процессора работают и диспетчер задач показывает что xrEngine использует 70% ЦП УРА!!! Можно танцевать!!! (IMG:style_emoticons/default/laugh.gif)

Как использовать два и более ядер
Немного загуглив я нашел некую информацию как использовать больше ядер но для этого нужно пере-собирать исходники заново потому что я эту цифру 1 рядом с GetCurrentThread в пысовском движке так и не вцепил через HEX-Editor может это кому то другому удастся.

Строка в коде x_ray.cpp
Код
    // Use CPU
    SetThreadAffinityMask        (GetCurrentThread(),1);


Что можно подставить - спасибо другу asdandgamer
Код
The mask is a bitfield: each bit designate a processor. 0 means "no processor". It's not logic.
0x0001 : proc 1
0x0003 : proc 1 and 2
0x000F : proc 1, 2, 3, 4

Так что можно сразу сделать так:
Код
    // Use CPU
    SetThreadAffinityMask        (GetCurrentThread(),0x000F);

Будет использоваться 4 ядра и более.
Полезная ссылка по этим строкам Ссылка

Сообщение отредактировал Stalker_Monolit - 10.08.2015, 17:28
Перейти в начало страницы
 
 
 cjayho
сообщение 10.08.2015, 17:58
Сообщение #2


Мастер Игры
************

Группа: Участник
Сообщений: 1363
Регистрация: 08.03.2010
Из: Україна
Пользователь №: 13783



А вам не кажется, что намного проще закомментарить строчку SetThreadAffinityMask (GetCurrentThread(),1); ?

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

Ps. В смысле возрастет не FPS, а именно скорость их проигрывания, то есть секундная анимация будет отыгрываться за полсекунды на двуядерном проце, четверть секунды на четырехъядерном и так далее.

Сообщение отредактировал cjayho - 10.08.2015, 18:02
Перейти в начало страницы
 
 
 Stalker_Monolit
сообщение 10.08.2015, 18:24
Сообщение #3


Опытный Геймер
*******

Группа: Участник
Сообщений: 161
Регистрация: 08.03.2015
Из: Украина
Пользователь №: 21427



Цитата(cjayho @ 10.08.2015, 17:53) *
Но только учтите, что многоядерности от этого не появится

Почему это? (IMG:style_emoticons/default/blink.gif) Не может мне компьютер наврать что он два процессора не юзал.
Перейти в начало страницы
 
 
 jamakasi
сообщение 10.08.2015, 18:39
Сообщение #4


Доктор Игровых Наук
*******************

Группа: Участник
Сообщений: 3657
Регистрация: 12.07.2007
Из: Энгельс
Пользователь №: 6560



Stalker_Monolit, многоядерность будет но совсем не та что нужна (IMG:style_emoticons/default/laugh.gif)
Перейти в начало страницы
 
 
 Cossack-HD
сообщение 10.08.2015, 19:25
Сообщение #5


TECHNOSLAV 80 уровня
**********************

Группа: Участник
Сообщений: 5758
Регистрация: 26.01.2014
Из: Стокгольм
Пользователь №: 19142



Снижение time_factor до 0.5 приводит в ощутимому увеличению FPS, что какбэ намекает, что даже в LA с её ЗПподобной "многоядерностью" на одном ядре висит не только графон, но и куча всего типа логики, физики, звука и анимаций (их апдейт замедляется и у ядра остаётся больше времени на отрисовку графонов - вырастает FPS).
Если оставить логику, физику, скрипты и анимации на одном ядре, а рендер почти полностью перенести на другое, то производительность должна улучшиться.

Сообщение отредактировал Cossack-HD - 10.08.2015, 19:26
Перейти в начало страницы
 
 
 Stalker_Monolit
сообщение 10.08.2015, 20:39
Сообщение #6


Опытный Геймер
*******

Группа: Участник
Сообщений: 161
Регистрация: 08.03.2015
Из: Украина
Пользователь №: 21427



Цитата(Cossack-HD @ 10.08.2015, 19:20) *
Снижение time_factor до 0.5 приводит в ощутимому увеличению FPS, что какбэ намекает, что даже в LA с её ЗПподобной "многоядерностью" на одном ядре висит не только графон, но и куча всего типа логики, физики, звука и анимаций (их апдейт замедляется и у ядра остаётся больше времени на отрисовку графонов - вырастает FPS).
Если оставить логику, физику, скрипты и анимации на одном ядре, а рендер почти полностью перенести на другое, то производительность должна улучшиться.

(IMG:style_emoticons/default/blink.gif) А сорцы LA разве уже в сети плавают?
Если это так то можно было это сделать как и разрабы сделали, только дописать пару кусочков кода в нужные dll-ки меняя при этом какой проц будет юзатся.

Сообщение отредактировал Stalker_Monolit - 10.08.2015, 20:41
Перейти в начало страницы
 
 
 jamakasi
сообщение 10.08.2015, 20:53
Сообщение #7


Доктор Игровых Наук
*******************

Группа: Участник
Сообщений: 3657
Регистрация: 12.07.2007
Из: Энгельс
Пользователь №: 6560



Stalker_Monolit, если б было все так просто то уже давным давно бы сделали многопоточку нормальную. Тут слишком многое нужно переделывать в движке. Просто так прописать что вот это должно обсчитываться на этом ядре не получится т.к. потоки должны взаимодействовать друг с другом, ожидать друг друга на блокировках и т.д. . Задача хоть и подсильная но слишком нереально геморойная. Проще пользуйся тем что есть, компы из года в год только растут мощностью поэтому теребонькать на что-то ненужное(многопоточность) бессмысленно, вот 64 битка имеет смысл в игре а многоядерность не особо.К примеру мой комп довольно легко тащит LA(сглаживания не максимальные только и дальность травки).
Перейти в начало страницы
 
 
 Билдоман
сообщение 11.08.2015, 01:23
Сообщение #8


Босс
********************

Группа: Участник
Сообщений: 4230
Регистрация: 27.09.2010
Пользователь №: 14094



Stalker_Monolit,

Плавают, более того, лежат в отдельной теме. http://www.gameru.net/forum/index.php?show...p;#entry1553432
Перейти в начало страницы
 
 
 Stalker_Monolit
сообщение 11.08.2015, 21:43
Сообщение #9


Опытный Геймер
*******

Группа: Участник
Сообщений: 161
Регистрация: 08.03.2015
Из: Украина
Пользователь №: 21427



Цитата(Билдоман @ 11.08.2015, 01:18) *
Stalker_Monolit,

Плавают, более того, лежат в отдельной теме. http://www.gameru.net/forum/index.php?show...p;#entry1553432

Спасибо а то я думал с другого ресурса качать (IMG:style_emoticons/default/smile.gif)
Перейти в начало страницы
 
 
 Stalker_Monolit
сообщение 12.08.2015, 17:42
Сообщение #10


Опытный Геймер
*******

Группа: Участник
Сообщений: 161
Регистрация: 08.03.2015
Из: Украина
Пользователь №: 21427



Заметил что сталкер использует расширение функциональности Boost который по копирайту
Цитата
Copyright © 2001-2003
не обновлялся с 2003 гада может попробовать обновить ее? Там же есть и использование потоков и тайминг короче корни для оптимизации тянутся оттуда.
Перейти в начало страницы
 
 
 abramcumner
сообщение 12.08.2015, 18:05
Сообщение #11


Игровое Воплощение
*********************

Группа: Участник
Сообщений: 4791
Регистрация: 27.04.2011
Из: Россия
Пользователь №: 14366



Stalker_Monolit, думаешь после обновления вызовы потоков, тайминги и корни сами вырастут из воздуха?

А и обнови, кстати. Хорошая задачка для начала.
Перейти в начало страницы
 
 
 RedMagic
сообщение 12.08.2015, 18:27
Сообщение #12


Высший Игровой Бог
************************

Группа: Супермодератор
Сообщений: 12594
Регистрация: 05.11.2009
Пользователь №: 12882



Цитата(abramcumner @ 12.08.2015, 18:00) *
Stalker_Monolit, думаешь после обновления вызовы потоков, тайминги и корни сами вырастут из воздуха?

Вангую что сначала все поломается и куча времени будут потрачена на то чтобы "вернуть все как было" (IMG:style_emoticons/default/biggrin.gif)
Перейти в начало страницы
 
 
 abramcumner
сообщение 12.08.2015, 18:32
Сообщение #13


Игровое Воплощение
*********************

Группа: Участник
Сообщений: 4791
Регистрация: 27.04.2011
Из: Россия
Пользователь №: 14366



Совсем нет. Поломается, но не прямо уж все (IMG:style_emoticons/default/smile.gif) Вот луабинд обновить...

Кстати, в ЛА-исходниках не новый разве буст?

Сообщение отредактировал abramcumner - 12.08.2015, 18:34
Перейти в начало страницы
 
 
 Tron
сообщение 12.08.2015, 19:06
Сообщение #14


Игровой Эксперт
***************

Группа: Участник
Сообщений: 2394
Регистрация: 19.01.2009
Из: Москва
Пользователь №: 9722



Вот luabind как раз и поломается. Он кажется зависит от темплейта удаленного в последних версиях
По сути boost используется только luabind'ом
Перейти в начало страницы
 
 
 -StalkMen-
сообщение 14.08.2015, 12:43
Сообщение #15


Продвинутый геймер
********

Группа: Участник
Сообщений: 234
Регистрация: 27.10.2010
Пользователь №: 14152



Я обновил boost, только теперь сам не знаю зачем (IMG:style_emoticons/default/laugh.gif)
Разве что опыт (IMG:style_emoticons/default/biggrin.gif)

Сообщение отредактировал -StalkMen- - 14.08.2015, 12:43
Перейти в начало страницы
 
 
 abramcumner
сообщение 14.08.2015, 13:18
Сообщение #16


Игровое Воплощение
*********************

Группа: Участник
Сообщений: 4791
Регистрация: 27.04.2011
Из: Россия
Пользователь №: 14366



-StalkMen-, многоядерность поперла?

Теперь луабинд на очереди (IMG:style_emoticons/default/smile.gif)

Сообщение отредактировал abramcumner - 14.08.2015, 13:18
Перейти в начало страницы
 
 
 Samaritan
сообщение 14.08.2015, 13:39
Сообщение #17


Заслуженный Мастер Игры
*************

Группа: Забанен
Сообщений: 1606
Регистрация: 11.07.2009
Пользователь №: 11293



Цитата(abramcumner @ 14.08.2015, 14:13) *
Теперь луабинд на очереди

Запилить бы визуальное программирование, подгрузку текстур, продвинутую систему LOD, лицевую анимацию, PhysX или Havok и пожалуй Scaleform.
Перейти в начало страницы
 
 
 RedMagic
сообщение 14.08.2015, 14:01
Сообщение #18


Высший Игровой Бог
************************

Группа: Супермодератор
Сообщений: 12594
Регистрация: 05.11.2009
Пользователь №: 12882



Цитата(lambdist @ 14.08.2015, 13:34) *
Цитата(abramcumner @ 14.08.2015, 14:13) *
Теперь луабинд на очереди

Запилить бы визуальное программирование, подгрузку текстур, продвинутую систему LOD, лицевую анимацию, PhysX или Havok и пожалуй Scaleform.

А может ещё и удобный WYSIWYG редактор? (IMG:style_emoticons/default/biggrin.gif) Это уже будет (IMG:style_emoticons/default/totstalkir.gif)
Перейти в начало страницы
 
 
 -StalkMen-
сообщение 14.08.2015, 15:20
Сообщение #19


Продвинутый геймер
********

Группа: Участник
Сообщений: 234
Регистрация: 27.10.2010
Пользователь №: 14152



Цитата(abramcumner @ 14.08.2015, 13:13) *
Теперь луабинд на очереди

Я их одновременно обновлял (IMG:style_emoticons/default/rolleyes.gif)
С луабиндом гораздо больше заморочек, начиная от переписываниЙ© в xrGame, заканчивая переписыванием скриптов (IMG:style_emoticons/default/sad.gif)

Цитата(abramcumner @ 14.08.2015, 13:13) *
многоядерность поперла?

От обновления boost'а?.. (IMG:style_emoticons/default/o_O.gif)

Цитата(lambdist @ 14.08.2015, 13:34) *
PhysX

Пилю потихоньку (IMG:style_emoticons/default/wink_old.gif) Пока всё нравится, правда мануалов на Русском мало (IMG:style_emoticons/default/sad.gif)
Начал с замены xrCDB (для компиля)
Перейти в начало страницы
 
 
 abramcumner
сообщение 14.08.2015, 15:24
Сообщение #20


Игровое Воплощение
*********************

Группа: Участник
Сообщений: 4791
Регистрация: 27.04.2011
Из: Россия
Пользователь №: 14366



Цитата(-StalkMen- @ 14.08.2015, 15:15) *
От обновления boost'а?.. (IMG:style_emoticons/default/o_O.gif)

Конечно, его же именно для этого предлагалось обновить (IMG:style_emoticons/default/smile.gif)
Перейти в начало страницы
 
 
 
 

 
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 

Текстовая версия Сейчас: 11.08.2022, 02:24