Войти
ПроектыФорумУтилиты

Движок 'Сухарь Ванильный' (4 стр)

Страницы: 13 4 5 662 Следующая »
#45
6:57, 15 ноя. 2012

в рот мне ноги, да напиши ты хотя бы #pragma omp parallel for перед своим циклом растеризации и получи х4 буст на любой современной машиней и x8 буст на любой машине через два года.


#46
7:30, 15 ноя. 2012

Suslik
> в рот мне ноги, да напиши ты хотя бы #pragma omp parallel
Вот это дело. Иду в гугл, о результатах отпишу.

(Тут был текст, а я его стёр. :) )

#47
7:37, 15 ноя. 2012

Что вы всё лезете со своими ускорителями? Вам нвидия платит что-ли за то, чтобы вы кидались на последние оплоты софтописательства? У ускорителей тоже есть куча проблем — к примеру, графические ускорители нативно не поддерживают палитровые форматы и способы сжатия графики без потерь, а также, насколько мне известно, ещё не вымерли видюхи, которые не поддерживают размеры текстур, не являющиеся степенями двойки. Из-за этого игры с кучей спрайтовой графики занимают сотни мегабайт видеопамяти, хотя простой софтовый рендер мог бы хранить картинки сразу пожатыми в RLE, и распаковывать их прямо в момент рендера. И я лично прекрасно понимаю, почему человек, который привык писать софтрендер, будет не в восторге от необходимости раскладывать спрайты по атласам, организовывать батчинг, сортировать переключения стейтов, и парится прочей 3д-апишной мутотой. Одно дело, если проблема тормозов встала принципиально, но мудохаться только ради того, чтобы "быть как все" — нафиг надо?

#48
7:38, 15 ноя. 2012

окей, ясно. ухожу.

#49
7:43, 15 ноя. 2012

Suslik
> окей, ясно. ухожу.
Эй, не уходи. Я очень рад тебе тут.

BUzer, спасибо за поддержку.

#50
8:31, 15 ноя. 2012

Так, играюсь с OpenMP. Система: свежий Code::Blocks и MinGW, Винда 7.
Во первых, скомпилировал рабочий тест. Что уже радует.
Во вторых, вылезли два таких сногсшибательных глюка, что я даже не знаю...

Что сделал: написал #pragma omp parallel for перед внутренним циклом заливки прямоугольника цветом.
После этого поломались таймеры. В чём именно дело так и не понял, время таймеры выдают корректно. Но квадратики ездиют по этим таймерам - по другому. Неправильно. Суслик, спасай. :)

После этого перенёс эту строчку перед внешним циклом заливки прямоугольника.
Стало твориться жуткое: прямоугольники рисуют строчки не по порядку, а некоторые строчки рисуются после начала заливки следующего прямоугольника. то есть прямоугольники неверно друг друга загораживают.

При всём при этом:
а) Загрузка четырёхядерного проца поднялась с 25 до 35. То есть реально пошёл параллельный счёт. Используется более одного ядра.
б) Тестовая программа стала работать медленнее. :) На глаз, счётчик фпс пока не работает.

В общем, кровавый кошмар зомби этот ваш OpenMP. Буду думать.

#51
9:51, 15 ноя. 2012

CStalker
> Есть предложения лучше?
vsync, но как это сделать на софтрендере, я не знаю.
Suslik
> вся графика, построенная на древних directx вроде 5.1 и ogl как работала, так
> прекрасно и работает.
NFS4 я так и не смог запустить, NFS5 корректно запустился в семёрке, но глючит в XP (LOL).
sb3d
Если вдуматься, то для логики и физики строгая синхронность по времени не требуется, нужно только, чтобы к моменту отображения графики, прошло необходимое количество тактов физики и логики. Я как-то задавал для физики 256 fps - просто перед выводом кадра смотрел, сколько раз нужно выполнить тик физики и выполнял в цикле.

#52
10:49, 15 ноя. 2012

Mikle
> Если вдуматься, то для логики и физики строгая синхронность по времени не
> требуется, нужно только, чтобы к моменту отображения графики, прошло
> необходимое количество тактов физики и логики. Я как-то задавал для физики 256
> fps - просто перед выводом кадра смотрел, сколько раз нужно выполнить тик
> физики и выполнял в цикле.
Тут я уже сделал. Три функции пользователя, для которых он сам назначает частоту вызова. От 2 до 1000 фпс. По предварительным тестам всё работает. То есть функции вызываются с нужной частотой, даже при разной загрузке внутри них, при разных частотах, и часто движку удаётся освобождать ресурс процессора.

А ведь этой идеи могло не быть без этой темы!

-------------

Про OpenMP.

Вот пример цикла заполнения прямоугольника чёрным цветом. Цикл нарочно упрощён.

int stx,sty,finx,finy;

stx=10;
sty=10;
finx=20;
finy=20;

for (int y=sty; y<=finy; y++){
for (int x=stx; x<=finx; x++){
*(ScreenMem+x+y*BASEX)=0;
}}

Как этот код дополнить системой многопоточности OpenMP? Мои попытки я описал выше.
Есть предложения? Кто нибудь вообще на практике работал с OpenMP? Потому что по теоретическим знаниям уже есть сомнения, что это поможет.

Также мысль: не может в данном примере быть такого, что многопоточность тут не даст результата, так как всё упирается в пропускную способность памяти?

Даже вопрос более общий, на самом деле. Может кто-то вот этот код выше - распараллелить так, чтобы он ускорился? Ну, может быть multithreading?

#53
12:19, 15 ноя. 2012

Ох.
Переписал код выше через CreateTread.
Сделал два потока. Всё работает корректно, ядра загружаются, программа ждёт окончания потоков корректно.

Быстродействие падает ровно в 2 раза. Лол?

Прямо уже не знаю, что думать.

#54
12:27, 15 ноя. 2012

sb3d
> Прямо уже не знаю, что думать.

Думать тут нечего, тут всё просто. Создание потока - операция затратная. Что так, что в omp. Злоупотреблять ею нельзя. Запускать отдельные потоки только надо большими кусками данных. Абсолютно ничем распараллеливание не поможет если скорость упирается не в скорость обработки процессором данных, а в скорость пересылки данных с памятью.

#55
12:57, 15 ноя. 2012

sb3d
> Быстродействие падает ровно в 2 раза. Лол?
А как ты считаешь быстродействие? Время от старта двух потоков, до завершения работы двух потоков?
Ничего не напутал? Может у тебя время создания двух потоков равно времени выполнения самой логики.
Если потоки совсем независимые (в закрашивании прямоугольника вроде так и есть), то такого быть не может (падения скорости в два раза).

Покажи код, пожалуйста.

#56
13:13, 15 ноя. 2012

sb3d
> Быстродействие падает ровно в 2 раза. Лол?
Внезапно, а может ты в двух потоках обсчитываешь одну и туже операцию? Как раз производительность упадет вдвое

#57
13:15, 15 ноя. 2012

> В общем, кровавый кошмар зомби этот ваш OpenMP. Буду думать.
sb3d, я буквально на днях читал в какой-то доке... кажется, от крайтека, что они считают из всех MP-библиотек именно OpenMP наименее годным для игр, а, кажется, Intel TBB - наиболее годным.

#58
13:24, 15 ноя. 2012

По быстрому склепал пару экзешников. Один заливает фон в 4 потока, другой однопоточный.
Сделано на православном CreateThread. Глючить не должно, код проверил несколько раз.

Файл зип архив: (правка: ссылку стёр. тут тест старый и показавший неработоспособность. нормальный тест на 6 странице)

Отпишитесь, пожалуйста, о результатах! В заголовке окна показывает фпс, выход - кликнуть мышкой на окне.
Вот давайте и проверим, уместна ли многопоточность в софтовом движке.

-------------

slava_mib
> я буквально на днях читал в какой-то доке... кажется, от крайтека, что они
> считают из всех MP-библиотек именно OpenMP наименее годным для игр
Да, я это уже понял. И сделал на винапи. Где я могу всё контролировать. И завершение всех потоков, например, в пределах задачи. Вроде не глючит.

war_zes
> Внезапно, а может ты в двух потоках обсчитываешь одну и туже операцию? Как раз
> производительность упадет вдвое
Ну, раз двадцать всё перепроверил. Нет, это исключено.

Mr_Jack
> Время от старта двух потоков, до завершения работы двух потоков?
Да. Время от старта первого и до завершения всех.

> Может у тебя время создания двух потоков равно времени выполнения самой логики.
Для теста я взял заливку фона окна. То есть достаточно заметного объёма. Если даже эта заливка быстрее создания потока - то в движке многопоточность не нужна: обычно спрайты и области работ гораздо меньше.

=A=L=X=
> Думать тут нечего, тут всё просто. Создание потока - операция затратная.
Похоже, так.

> Абсолютно ничем распараллеливание не поможет если скорость упирается не в
> скорость обработки процессором данных, а в скорость пересылки данных с памятью.
Тоже так. Но в софт движке считай вообще всё упирается именно в пропускную способность памяти..

-------------

В общем, очень жду результатов теста!

#59
13:37, 15 ноя. 2012

sb3d
Одноядерный Атом с гипертредингом - в обоих вариантах фпс скачет от 4хх до 8хх ( в основном от 6хх до 7хх )
Заметна явная неравномерность движения спрайтов (одновременно все двигаются то быстрее, то медленнее периодами ~ от 0.5 до 2 сек.)

Страницы: 13 4 5 662 Следующая »
ПроектыФорумУтилиты

Тема в архиве.