Перейти в начало страницы

Здравствуйте, гость ( Авторизация | Регистрация )

Gameru.net останавливает работу в связи с вторжением армии РФ в Украину. Следите за дальнейшими анонсами.
Support Gameru!

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

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

4 страниц V  < 1 2 3 4 >  
Тема закрытаНачать новую тему
> [ТЧ,ЧН,ЗП] Многоядерность, Используем два и более ядер
-StalkMen-
сообщение 24.08.2015, 22:08
Сообщение #41


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

Репутация:   22  
Группа: Участник
Сообщений: 234
Награды: 3
Регистрация: 27.10.2010




Вставить ник Цитировать выделенное в форуму быстрого ответа


Tron,
не совсем так однако,
Основной поток плодит работы, да.
Во время рендеринга эти работы обрабатываются вторым потоком. Но из-за хитро*, есть вероятность, что эти работы будут просчитаны в том же потоке.
Перейти в начало страницы
 
Tron
сообщение 24.08.2015, 22:30
Сообщение #42


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

Репутация:   407  
Группа: Участник
Сообщений: 2394
Награды: 5
Регистрация: 19.01.2009




Вставить ник Цитировать выделенное в форуму быстрого ответа


-StalkMen-, я вот не понимаю последние две строчки

Код
// now we give control to device - signals that we are ended our work
        Device.mt_csEnter.Leave    ();
        // waits for device signal to continue - to start again
        Device.mt_csLeave.Enter    ();
        // returns sync signal to device
        Device.mt_csLeave.Leave    ();

Это что-то типа маленькой синхронизации выступает?
Перейти в начало страницы
 
-StalkMen-
сообщение 24.08.2015, 22:40
Сообщение #43


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

Репутация:   22  
Группа: Участник
Сообщений: 234
Награды: 3
Регистрация: 27.10.2010




Вставить ник Цитировать выделенное в форуму быстрого ответа


Tron,
Да я тоже себе мозг этим сломал.
Код
    // Release start point - allow thread to run
    mt_csLeave.Enter            ();
    mt_csEnter.Leave            ();

Даём шанс 2 потоку стартовать.

Код
    // Release end point - allow thread to wait for startup point
    mt_csEnter.Enter                        ();
    mt_csLeave.Leave                        ();

Лочим. (Если 2 поток робит, то ждём его. Либо Не даём ему стартовать).


Код
    // Ensure, that second thread gets chance to execute anyway
    if (dwFrame!=mt_Thread_marker)            {
        for (u32 pit=0; pit<Device.seqParallel.size(); pit++)
            Device.seqParallel[pit]            ();
        Device.seqParallel.clear_not_free    ();
        seqFrameMT.Process                    (rp_Frame);
    }

Самый laugh.gif Если 2 поток не успел, то делаем его работу сами.

Вроде так.

Сообщение отредактировал -StalkMen- - 24.08.2015, 22:40
Перейти в начало страницы
 
Tron
сообщение 24.08.2015, 22:54
Сообщение #44


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

Репутация:   407  
Группа: Участник
Сообщений: 2394
Награды: 5
Регистрация: 19.01.2009




Вставить ник Цитировать выделенное в форуму быстрого ответа


А все понял, картина маслом.
Да походу ты прав
Перейти в начало страницы
 
abramcumner
сообщение 24.08.2015, 23:07
Сообщение #45


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

Репутация:   394  
Группа: Участник
Сообщений: 4791
Награды: 4
Регистрация: 27.04.2011




Вставить ник Цитировать выделенное в форуму быстрого ответа


Вообще-то все немного не так или совсем не так smile.gif
Система простая: основной поток рендерит текущий кадр, во втором обсчитываются данные для следующего.
Второй поток не может не успеть - там же критические секции поставлены. Это значит, что он вообще не работал в этот раз. Без этой проверки будут тупо пропуски обсчета.

Сообщение отредактировал abramcumner - 24.08.2015, 23:19
Перейти в начало страницы
 
Neo][
сообщение 24.08.2015, 23:21
Сообщение #46


The One
****************

Репутация:   744  
Группа: Участник
Сообщений: 2715
Награды: 5
Регистрация: 05.12.2005




Вставить ник Цитировать выделенное в форуму быстрого ответа


-StalkMen-, заинтересовал, стяну завтра исходники посмотреть. Но вообще по фрагментам, которые ты привёл - там классическая задача поставщик- потребитель, а ты усложняешь )

Это ЗП?

Сообщение отредактировал Neo][ - 24.08.2015, 23:29


--------------------
Перейти в начало страницы
 
-StalkMen-
сообщение 24.08.2015, 23:31
Сообщение #47


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

Репутация:   22  
Группа: Участник
Сообщений: 234
Награды: 3
Регистрация: 27.10.2010




Вставить ник Цитировать выделенное в форуму быстрого ответа


Neo][,
Я что, я ничего biggrin.gif

Да, ЗП.
Перейти в начало страницы
 
-StalkMen-
сообщение 25.08.2015, 02:26
Сообщение #48


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

Репутация:   22  
Группа: Участник
Сообщений: 234
Награды: 3
Регистрация: 27.10.2010




Вставить ник Цитировать выделенное в форуму быстрого ответа


Цитата(Stalker_Monolit @ 24.08.2015, 20:07) *
Интересно если их сделать параллельно что то изменится?

Да. Вылетит один из потоков, проверил. Собственно этого следовало ожидать...

Перейти в начало страницы
 
Neo][
сообщение 25.08.2015, 12:07
Сообщение #49


The One
****************

Репутация:   744  
Группа: Участник
Сообщений: 2715
Награды: 5
Регистрация: 05.12.2005




Вставить ник Цитировать выделенное в форуму быстрого ответа




Немного изменил для наглядности:


--------------------
Перейти в начало страницы
 
-StalkMen-
сообщение 25.08.2015, 16:55
Сообщение #50


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

Репутация:   22  
Группа: Участник
Сообщений: 234
Награды: 3
Регистрация: 27.10.2010




Вставить ник Цитировать выделенное в форуму быстрого ответа


Neo][,
Хорошая картинка. Профилировщик?
Но а это ->
Код
if (dwFrame!=mt_Thread_marker)


Перейти в начало страницы
 
autistic
сообщение 25.08.2015, 20:58
Сообщение #51


Геймер
******

Репутация:   86  
Группа: Участник
Сообщений: 128
Награды: 4
Регистрация: 05.05.2012




Вставить ник Цитировать выделенное в форуму быстрого ответа


Цитата(abramcumner @ 25.08.2015, 00:02) *
Второй поток не может не успеть - там же критические секции поставлены.

некруто же, платформозависимая хрень (на поверку спинлок, если склероз не изменяет) в эпоху 11-го стандарта!
эй, кто там делал сборку под х64, пришло время заюзать православные примитивы синхронизации! biggrin.gif

Цитата(-StalkMen- @ 25.08.2015, 17:50) *
Профилировщик?

профилировщик может в картинки? blink.gif


--------------------
nop
Перейти в начало страницы
 
Tron
сообщение 25.08.2015, 21:21
Сообщение #52


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

Репутация:   407  
Группа: Участник
Сообщений: 2394
Награды: 5
Регистрация: 19.01.2009




Вставить ник Цитировать выделенное в форуму быстрого ответа


Цитата(refuse @ 25.08.2015, 20:53) *
эй, кто там делал сборку под х64, пришло время заюзать православные примитивы синхронизации! biggrin.gif

Не вижу смысла тратиться на это, ибо все равно рендер намертво привязан к винде.
Если и буду заниматься МТ, то скорее всего только с фиберами

А то, да ты прав, spinlock
http://www.swedishcoding.com/wp-content/up...sing_fibers.pdf
Ну,а это еще сильный WIP:

Скрин с использванием в моем движке:
Перейти в начало страницы
 
autistic
сообщение 25.08.2015, 21:23
Сообщение #53


Геймер
******

Репутация:   86  
Группа: Участник
Сообщений: 128
Награды: 4
Регистрация: 05.05.2012




Вставить ник Цитировать выделенное в форуму быстрого ответа


Цитата(Tron @ 25.08.2015, 22:14) *
Не вижу смысла тратиться на это, ибо все равно рендер намертво привязан к винде

может стоит тогда начать с отвязывания рендерера от винды? wink_old.gif


--------------------
nop
Перейти в начало страницы
 
Tron
сообщение 25.08.2015, 21:25
Сообщение #54


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

Репутация:   407  
Группа: Участник
Сообщений: 2394
Награды: 5
Регистрация: 19.01.2009




Вставить ник Цитировать выделенное в форуму быстрого ответа




Если конечно у меня еще правильно работает... я сам еще не разобрался... библиотека без документации и примеров

Цитата(refuse @ 25.08.2015, 21:18) *
Цитата(Tron @ 25.08.2015, 22:14) *
Не вижу смысла тратиться на это, ибо все равно рендер намертво привязан к винде

может стоит тогда начать с отвязывания рендерера от винды? wink_old.gif

Ты готов написать новый рендер с 0? - Я, нет. Я уже со своим затрахался вдовль.
Другое дело, заменить его на какую - нибудь либу
Перейти в начало страницы
 
autistic
сообщение 25.08.2015, 21:39
Сообщение #55


Геймер
******

Репутация:   86  
Группа: Участник
Сообщений: 128
Награды: 4
Регистрация: 05.05.2012




Вставить ник Цитировать выделенное в форуму быстрого ответа


Цитата(Tron @ 25.08.2015, 22:20) *
Другое дело, заменить его на какую - нибудь либу

есть варианты? smile.gif


--------------------
nop
Перейти в начало страницы
 
Tron
сообщение 25.08.2015, 21:47
Сообщение #56


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

Репутация:   407  
Группа: Участник
Сообщений: 2394
Награды: 5
Регистрация: 19.01.2009




Вставить ник Цитировать выделенное в форуму быстрого ответа


Цитата(refuse @ 25.08.2015, 21:34) *
Цитата(Tron @ 25.08.2015, 22:20) *
Другое дело, заменить его на какую - нибудь либу

есть варианты? smile.gif

https://github.com/bkaradzic/bgfx

Но автор GL4 версию не развивает активно(в данный момент)
https://github.com/bazhenovc/sigrlinn

Сообщение отредактировал Tron - 25.08.2015, 21:47
Перейти в начало страницы
 
autistic
сообщение 25.08.2015, 22:16
Сообщение #57


Геймер
******

Репутация:   86  
Группа: Участник
Сообщений: 128
Награды: 4
Регистрация: 05.05.2012




Вставить ник Цитировать выделенное в форуму быстрого ответа


Tron,
нууу, на мое скромное имхо это не совсем альтернатива промышленной разработке, а точнее совсем не альтернатива. вот если бы нечто похожее было запилено с сопоставимым качеством картинки, с юнит тестами, обширным коммьюнити и подтверждено многими реально выпущенными проектами, использующими эту технологию, что-то на что можно было бы ориентироваться как на стандарт де-факто, вот тогда другое дело smile.gif


--------------------
nop
Перейти в начало страницы
 
Neo][
сообщение 26.08.2015, 12:47
Сообщение #58


The One
****************

Репутация:   744  
Группа: Участник
Сообщений: 2715
Награды: 5
Регистрация: 05.12.2005




Вставить ник Цитировать выделенное в форуму быстрого ответа


Цитата(-StalkMen- @ 25.08.2015, 18:50) *
Neo][,
Хорошая картинка. Профилировщик?

-StalkMen-, word smile.gif)

Цитата(refuse @ 25.08.2015, 22:53) *
профилировщик может в картинки?

refuse, профилировщик профилировщику рознь smile.gif

Цитата(-StalkMen- @ 25.08.2015, 18:50) *
Но а это ->
Код
if (dwFrame!=mt_Thread_marker)

Скорее всего workaround для некого побочного эффекта, на вскидку я не смог проследить возможности нарушения условия.


--------------------
Перейти в начало страницы
 
-StalkMen-
сообщение 26.08.2015, 22:39
Сообщение #59


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

Репутация:   22  
Группа: Участник
Сообщений: 234
Награды: 3
Регистрация: 27.10.2010




Вставить ник Цитировать выделенное в форуму быстрого ответа


Neo][,
Цитата(Neo][ @ 26.08.2015, 12:42) *

Профилировщик

Второй скрин - откуда инфа о длительности?

Цитата(Neo][ @ 26.08.2015, 12:42) *

Скорее всего workaround для некого побочного эффекта, на вскидку я не смог проследить возможности нарушения условия.

Цитата(-StalkMen- @ 24.08.2015, 22:35) *
Если 2 поток не успел, то делаем его работу сами.

(На мп серваке очень часто юзается)
Перейти в начало страницы
 
Neo][
сообщение 27.08.2015, 10:25
Сообщение #60


The One
****************

Репутация:   744  
Группа: Участник
Сообщений: 2715
Награды: 5
Регистрация: 05.12.2005




Вставить ник Цитировать выделенное в форуму быстрого ответа


Цитата(-StalkMen- @ 27.08.2015, 01:34) *
Второй скрин - откуда инфа о длительности?

-StalkMen-, это сделано специально для наглядности, чтобы исключить вопросы на подобии:
Цитата(-StalkMen- @ 27.08.2015, 01:34) *
Если 2 поток не успел, то делаем его работу сами.


2-й поток не может не успеть, первый поток будет ждать на mt_csEnter
Цитата
Statistic->RenderTOTAL_Real.FrameEnd ();
Statistic->RenderTOTAL.accum = Statistic->RenderTOTAL_Real.accum;
#endif // #ifndef DEDICATED_SERVER
// *** Suspend threads
// Capture startup point
// Release end point - allow thread to wait for startup point
mt_csEnter.Enter ();
mt_csLeave.Leave ();

// Ensure, that second thread gets chance to execute anyway
if (dwFrame!=mt_Thread_marker) {
for (u32 pit=0; pit<Device.seqParallel.size(); pit++)
Device.seqParallel[pit] ();
Device.seqParallel.clear_not_free ();
seqFrameMT.Process (rp_Frame);
}


пока второй не выполнит работу и не освободит эту секцию:

Цитата
Device.seqFrameMT.Process (rp_Frame);

// now we give control to device - signals that we are ended our work
Device.mt_csEnter.Leave ();


Сообщение отредактировал Neo][ - 27.08.2015, 10:27


--------------------
Перейти в начало страницы
 

4 страниц V  < 1 2 3 4 >
Тема закрытаНачать новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



Текстовая версия Сейчас: 24.04.2024, 19:50