|
|
|
Канал Игры Мечты: «MMO Space c 30K пользователей.» |
|
|
Варсик
545 EGP
    Рейтинг канала: 4(81) Репутация: 117 Сообщения: 4041 Откуда: Москва Зарегистрирован: 22.12.2002
 |
|
Именно столько одновременных потоков поддерживает Tesla S1070.
Внимание вопрос: А можно-ли с помощью CUDA ускорить серверную часть? Пока архитектурные мысли такие:
Принимаемый поток от каждого пользователя засовываем в GPU, где снимаем криптование (должно работать, так как расшифровывание - линейный процесс ну или слабо ветвящийся), получившиеся данные представляем как набор изменений (грубо говоря, если пришел пакет о перемещении, то с помощью математических операций, как то умножение и т.д. довольно легко можно понять что и куда записывать) для общей памяти. Потом совершаем интерацию мира (просчет новых позиций), формируем отправной пакет и отдаем его на CPU, для передачи клиенту.
Да, есть засады, есть проблемы. Так как сама игровая логика довольно сложно представляется на GPU, но возможно-ли Хотя-бы простые вещи переложить на GPU и тем самым добиться 10К+ пользователей в онлайне на одной локации и без тормозов?
ЗЫ: Если во что-то выльется, можно попробовать написать клиент-серверную тестовую демку.
_________________ WARNING: By reading this post you accept that this post is genius. |
|
|
Sh.Tac.
151 EGP
  Рейтинг канала: 5(108) Репутация: 14 Сообщения: 1426
Зарегистрирован: 27.07.2005
 |
|
я пока теоретизирую по поводу похожей темки, правда гораздо в более скромных масштабах
вот дождусь пока выйдет MSI 628 чтобы на практике поковырятсо
основная мысля такая, применить стандартную лагокомпенсацию на сервере
пока это делается лишь для сетевых экшнов с весьма скромным количеством игроков
откатить хотя бы 1000 юзверей в ММО на N миллисекунд чтобы прочекать минувшие события...
это упирается как раз в нехватку вычислительной мощности
у CUDA есть ряд идеологических моментов, в корне отличающих её от общепринятого подхода к программированию, это отсутствие ветвления, отсутствие точек синхронизации и отсутствие памяти
т.е. в теории идеально подходят цепи Маркова
Warstone : |
Так как сама игровая логика довольно сложно представляется на GPU
|
пока достаточно переложить лишь модель движения и трассировку выстрелов
это уже значительно разгрузит CPU
но 30к это анрил
_________________ This is what you get ...
(c) Radiohead
Последний раз редактировалось: Guest (21:25 05-08-2009), всего редактировалось 1 раз |
|
|
Варсик
545 EGP
    Рейтинг канала: 4(81) Репутация: 117 Сообщения: 4041 Откуда: Москва Зарегистрирован: 22.12.2002
 |
|
Sh.Tac. : |
пока достаточно переложить лишь модель движения и трассировку выстрелов
это уже значительно разгрузит CPU
но 30к это анрил
|
Ну я согласен с тем, что анрил.
А вот насчет ветвления и памяти... Память есть вообще-то. И до нее спокойно можно добраться. На каджый поток сколько-то-там. Вообще-то 16Кб разделяймой между 32 потоками и общая в 90Мб вроде. Так что... Допустим мы хотим сделать проверку... Не знаю возможно-ли там такое, но что есть проверка? Это прыжок на другую точку кода. Если там есть JMP, то рассчитать куда надо прыгать - не составляет никаких проблем.
Я пока лениво курю маны по CUDA. Говорят что можно еще покурить OpenCL (Computing Lnaguage) он типа и под куду и под все, что хочешь.
_________________ WARNING: By reading this post you accept that this post is genius. |
|
|
Sh.Tac.
151 EGP
  Рейтинг канала: 5(108) Репутация: 14 Сообщения: 1426
Зарегистрирован: 27.07.2005
 |
|
Warstone : |
А вот насчет ветвления и памяти...
|
Это всё понятно, что по-минимуму там всё есть, но если песать в таком традиционном стиле, можно смело распрощаться с пиковыми гигафлопсами
и тогда вопрос, нахрена козе боян?
_________________ This is what you get ...
(c) Radiohead |
|
|
Варсик
545 EGP
    Рейтинг канала: 4(81) Репутация: 117 Сообщения: 4041 Откуда: Москва Зарегистрирован: 22.12.2002
 |
|
Sh.Tac. : |
и тогда вопрос, нахрена козе боян?
|
Бойан в многопоточности.
_________________ WARNING: By reading this post you accept that this post is genius. |
|
|
Варсик
545 EGP
    Рейтинг канала: 4(81) Репутация: 117 Сообщения: 4041 Откуда: Москва Зарегистрирован: 22.12.2002
 |
|
Надыбал лекции по CUDA, которые читали в МГУ в 2008 году. <250Мб. Дайте место, куда выложить. Набрал все 9 аудиозаписей + слайты + код, где есть + задания.
_________________ WARNING: By reading this post you accept that this post is genius. |
|
|
VBKesha
817 EGP
      Рейтинг канала: 3(31) Репутация: 132 Сообщения: 3330 Откуда: обл.Брянская г. Трубчевск Зарегистрирован: 07.12.2005
 |
|
Да можно на всякие яндекс диски, ифолдеры и прочее выложить.
Последний раз редактировалось: VBKesha (22:27 10-08-2009), всего редактировалось 1 раз |
|
|
Варсик
545 EGP
    Рейтинг канала: 4(81) Репутация: 117 Сообщения: 4041 Откуда: Москва Зарегистрирован: 22.12.2002
 |
|
http://rapidshare.de/files/48083863/__1052___1043___1059_.7z.001.html
http://rapidshare.de/files/48083864/__1052___1043___1059_.7z.002.html
http://rapidshare.de/files/48083865/__1052___1043___1059_.7z.003.html
_________________ WARNING: By reading this post you accept that this post is genius. |
|
|
Sh.Tac.
151 EGP
  Рейтинг канала: 5(108) Репутация: 14 Сообщения: 1426
Зарегистрирован: 27.07.2005
 |
|
по теме есть вводная статья pdf
Massively-Parallel Game Servers
_________________ This is what you get ...
(c) Radiohead |
|
|
Sh.Tac.
151 EGP
  Рейтинг канала: 5(108) Репутация: 14 Сообщения: 1426
Зарегистрирован: 27.07.2005
 |
|
Warstone : |
Надыбал лекции по CUDA, которые читали в МГУ в 2008 году.
|
пасибо, с разинутым ртом послушал лекции 2-3-4
дальше жесть жёсткая
рапидшара очень злобная к количеству закачек, можно было упаковать и одним архивом
а так лекции можно качать с офф-сайта по одной:
программа курса
аудиозаписи
слайды/задачки
_________________ This is what you get ...
(c) Radiohead
Последний раз редактировалось: Sh.Tac. (18:11 16-08-2009), всего редактировалось 1 раз |
|
|
Варсик
545 EGP
    Рейтинг канала: 4(81) Репутация: 117 Сообщения: 4041 Откуда: Москва Зарегистрирован: 22.12.2002
 |
|
Sh.Tac. : |
рапидшара очень злобная к количеству закачек, можно было упаковать и одним архивом
|
А там 100Мб - предел одного файла. Я потому и спрашивал куда положить.
_________________ WARNING: By reading this post you accept that this post is genius. |
|
|
auliere
301 EGP
   Рейтинг канала: 1(1) Репутация: 62 Сообщения: 1013 Откуда: Винница, Украина Зарегистрирован: 09.02.2008
 |
|
Warstone : |
А там 100Мб - предел одного файла.
|
Вроде бы уже 200 Оо Или вы про rapidshare.de?
|
|
|
Варсик
545 EGP
    Рейтинг канала: 4(81) Репутация: 117 Сообщения: 4041 Откуда: Москва Зарегистрирован: 22.12.2002
 |
|
Про де. Так как ен только 10 скачиваний дает, потом трет.
_________________ WARNING: By reading this post you accept that this post is genius. |
|
|
Sh.Tac.
151 EGP
  Рейтинг канала: 5(108) Репутация: 14 Сообщения: 1426
Зарегистрирован: 27.07.2005
 |
|
тэкс, в теории гигафлопсами запаслись...
надо бы порешать что считать?
можно пресловутое Ньютоновское движение:
Код: |
vec3f pos = pos0;
vec3f vel = vel0;
while (1)
{
pos += vel*dt + a*dt*dt/2;
vel += a*dt;
}
|
где dt - шаг симуляции и a - вектор моментальных ускорений, которые например складывается из собственно манёвра КА и тупо ускорения свободного падения на шарообразную массу в пределах сферы её действия
все три вектора, положений, скоростей и ускорений + кнопки пересылаются например по UDP в обоих направлениях
ориентацию КА в пространстве тупо задавать кватернионом
для начала кнопки можно повесить на тягу, тангаж, крен, рыскание
и считать что все ускорения идут через ЦМ
впоследствии особо заморочиться и считать вращательные моменты РД через плечо
_________________ This is what you get ...
(c) Radiohead |
|
|
Варсик
545 EGP
    Рейтинг канала: 4(81) Репутация: 117 Сообщения: 4041 Откуда: Москва Зарегистрирован: 22.12.2002
 |
|
Отлично, вы пока считайте Ньютоновское движение, а я попробую обрезать сферу видимости (что передавать Игроку через сеть) вроде тоже - очень внушающая задача, которая при переложении ее на ГПУ даст многа плюшек (больше чем движение в ГПУ ИМХО)
добавлено спустя 4 минуты:
Да, сразу давайте договоримся... Ядро вычислений стараемся переложить на ГПУ, а игровую логику на .Net (моно, ибо SIMD). Если необходимо - прослойку между ними - на Си (Без +, так как ООП в Си.. Не самое удачное с точки зрения быстродействия)
Да, ну и что-бы это все было кросс-платформенно (читать как "Все равно будет работать на FreeBSD/OpenBSD"), то пользуем в качестве студии MonoDevelop. Умеет делать как Си так и моно проекты. Есть и под Виндой и Под никсами. Вобщем ИМХО упрощаем себе жизнь.
ЗЫ: Моно: www.mono-project.com
МоноДевелоп: http://monodevelop.com/
_________________ WARNING: By reading this post you accept that this post is genius.
Последний раз редактировалось: Варсик (22:18 17-08-2009), всего редактировалось 3 раз(а) |
|
|
Sh.Tac.
151 EGP
  Рейтинг канала: 5(108) Репутация: 14 Сообщения: 1426
Зарегистрирован: 27.07.2005
 |
|
Warstone : |
на Си (Без +, так как ООП в Си.. Не самое удачное с точки зрения быстродействия)
|
умею на плюсах без ООП
некоторые мои рассуждения будут весьма наивными, потому как вторгаюсь в область, которую просто не знаю
думаю положить шаг симуляции 64 мс, для ММО это крайне малое значение, вся надежда на быстрые расчёты
клиент может также посылать пакеты каждый шаг, поместив туда 4 опроса клавиатуры-мыши (через 16 мс) + посчитанное движение
навскидку это получается:
4 байта id клиента +
(1 (начальное состояние) + 4 (среза)) = 5Х
{
12 байт ускорение +
12 байт скорость +
12 байт позиция +
16 байт кватернион
4 байта положение мыши + состояние клавиатуры
----------------------------------------------
56
}
+ 2 байта порт (для NAT)
+ 8 байт собственный таймстемп
+ 8 байт отражённый таймстемп
+ 2 байта мс затраченные на обработку/ожидание
----------------------------
итого: 304 байта payload
предполагаемый трафик от клиента = 304*8*1000/64 = 38 кбит/c
_________________ This is what you get ...
(c) Radiohead |
|
|
Guest
2075 EGP
              Рейтинг канала: 5(167) Репутация: 376 Сообщения: 27975 Откуда: Моск. Зарегистрирован: 12.10.2004
 |
|
Sh.Tac. : |
думаю положить шаг симуляции 64 мс, для ММО это крайне малое значение, вся надежда на быстрые расчёты
|
А ежели у клиента случиццо задержка, и он в шаг не попадёт?
А что будет делать клиент между шагами (максимально допустимый шаг на стороне клиента - не более 33мс, дольше - это уже и глоза вылазят) - как обычно, предсказывать?
добавлено спустя 3 минуты:
Sh.Tac. : |
12 байт ускорение +
12 байт скорость +
12 байт позиция +
16 байт кватернион
|
Нормально Мощно! Поворот заложить в кватернион из 4-х флоатов, а ещё кучу параметров передавать векторами по 3 флоата! Особенно ускорение актуально таким диапазоном покрывать, да...
Сдвиг позиции на следующий кадр - ИМХО более чем, да ещё перепаковать, в зависимости от нужной точности. Уж один раз 12 байт с головой должно хватить на это...
добавлено спустя 4 минуты:
Sh.Tac. : |
предполагаемый трафик от клиента = 304*8*1000/64 = 38 кбит/c
|
Я вот думаю - а что если для повышения надёжности и при таковой возможности канала клиента - передавать не один, а несколько потоков с дублирующейся инфой? Вероятность задержки падает пропорционально избыточности - не нужно переприсылать пакеты (ну или если без гарантии доставки - не нужно ждать дошедший, если 30% из них съедаются сразу и ещё 30% уходят причудливым маршрутом в Сингапур)... Всё ж таки не на акустических модемах уже живём...
Метку времени всё равно мы внутрь кладём, чтобы не перепутать...
_________________ Трещит земля как пустой орех
Как щепка трещит броня
Последний раз редактировалось: Guest (01:57 18-08-2009), всего редактировалось 4 раз(а) |
|
|
Sh.Tac.
151 EGP
  Рейтинг канала: 5(108) Репутация: 14 Сообщения: 1426
Зарегистрирован: 27.07.2005
 |
|
Guest : |
А ежели у клиента случиццо задержка, и он в шаг не попадёт?
|
в шаг он примерно будет попадать, потому как сетевая подсистема будет высерать пакет кажный шаг или я не понял вопроса
Цитата: |
А что будет делать клиент между шагами как обычно, предсказывать?
|
угумц, сервер не может быстрее провернуться
может только медленнее
Цитата: |
Особенно ускорение актуально таким диапазоном покрывать
|
смысл в точности флоата поскольку всё считается в них
возможно в дальнейшем некоторые вектора уйдут, но поначалу надо как-то отлаживаться и вообще понимать что происходит
Цитата: |
передавать не один, а несколько потоков с дублирующейся инфой
|
ну это слишком наверное, и так 15 пакетов в секунду, была мысля сделать чересполосицу посылать два пакета, в одном чётные четверть-тики в другом нечётные...
при этом дилемма, удвоить количество пакетов, уменьшив их размер примерно вдвое - зло и редкостное вредительство
ждать в два раза дольше пока наберётся нужное количество "полос" ещё хуже
трафик и так будет значительно больше, потому как сервер всунет, - мало не покажется + TCP для обычной игрологики (не движения)
_________________ This is what you get ...
(c) Radiohead |
|
|
Guest
2075 EGP
              Рейтинг канала: 5(167) Репутация: 376 Сообщения: 27975 Откуда: Моск. Зарегистрирован: 12.10.2004
 |
|
Sh.Tac. : |
смысл в точности флоата поскольку всё считается в них
|
Ну так поделил int... Впрочем, может не хватит.
Я вот лично не вижу смысла передавать скорость и ускорение вообще - их, как первую и вторую производные передвижения на нескольких кадрах соответственно, может посчитать и сам сервер, если ему нужно.
Остаётся вектор-3 положения и кватернион-4 (а, кстати, почему кватернион? Приращением вращение считать?) вращения. 28 байт.
Sh.Tac. : |
ну это слишком наверное, и так 15 пакетов в секунду
|
Ну, для широкого канала. 0.5 - 1 мбит/сек. Там даже сильнораспухший пакет можно по трём маршрутам кидать, в теории (хотя - интерфейс всё равно один, так что какая разница - всё равно m раз посылать надо, хоть вдоль, хоть поперек... ).
Правда, придётся, видимо, перекопать TCP - я не знаю, есть ли возможность сбрасывать необходимость повторной отправки пакета по валидации с нескольких потоков самим приложением, или приложению на этот уровень не достучаться.
Не, по здравом размышлении, этот вариант ничего не даёт.
_________________ Трещит земля как пустой орех
Как щепка трещит броня
Последний раз редактировалось: Guest (04:18 18-08-2009), всего редактировалось 2 раз(а) |
|
|
Sh.Tac.
151 EGP
  Рейтинг канала: 5(108) Репутация: 14 Сообщения: 1426
Зарегистрирован: 27.07.2005
 |
|
пакеты от сервера просты как веники, чтобы датаграмму не фрагментнули по пути она должна укладываться в магические 576 байт вместе со всеми заголовками
получаем:
4 байта id + 12 байт позишн + 16 байт ориентейшн = 32 байта
Х 16 юзеров
+ 8 байт собственный таймстемп
+ 8 байт отражённый таймстемп
+ 2 байта мс потраченные на обработку/ожидание
-----------------------------------------------
530 байт payload
встаёт закономерный вопрос скока на скока махачи планируются?
допустим 100 + 100 это примерно 240 входящих на клиент датаграмм в секунду по полкило кажная
выходит где-то 1 Мбит/c
_________________ This is what you get ...
(c) Radiohead |
|
|
|
|
|
Канал Игры Мечты: «MMO Space c 30K пользователей.» |
|