Рейтрейсинг на ОСЕМНАДЕСЕТ ядра

Един от студентите направи разпределено рендериране, което (когато тествах вкъщи) ме впечатли толкова, че реших да направя screencap и да го споделя тук.

За да натоваря като хората клиент-сървър частта, закачих всичко, де що може да смята тригонометрични функции вкъщи (т.е. не участваха само хладилника и микровълновата): 5 различни машини с общо 18 нишки. Сцената е "smallpt" в 800x600 при 256 пътя на пиксел:

SmallPT_Distributed (отваря се с повечето плейъри - например VLC)

Cast (in order of appearance):

  • Core 2 @ 2 GHz лаптоп (2 ядра);
  • Phenom X4 @ 3 GHz (4 ядра);
  • Core 2 @ 2.8 GHz лаптоп (2 ядра);
  • Atom Z @ 1.6 GHz (4 ядра);
  • Phenom X6 @ 3.2 GHz (6 ядра).

За късмет, тази сцена е изключително равномерна откъм натоварване. Когато, обаче, трудността за смятане на отделните квадратчета се мени динамично, може да се окаже, че някоя от машините бави цялото останало "стадо", висейки върху 1-2 фрагмента много след като другите са приключили.

Този проблем принципно се решава с по-малък размер на квадратчетата. Ето и един рендер на такава сцена (meshes, 1024x768, с depth of field и 150 лъча/пиксел). Този път квадратчетата са 32х32 и са оцветени според машината, която работи по тях:

Meshes DOF (color-coded)

Забелязват се няколко неща:

  1. Ако към стадото добавите бавна машина, ползата от нея в най-добрия случай е слабо забележима, а в най-лошия - времето за рендериране дори нараства!
  2. Тук се вижда как сработва логиката на Здравко за справяне с отпаднали машини. Неговата идея е: за всяко квадратче, което командващата машина раздава, да се даде някакъв time-out (в случая - 60 секунди). Ако рендващата машина не се справи за това време, квадратчето се преразпределя на някой друг (вижте какво се случва на четирите зелени квадратчета, които висят върху чашата, към края на ренденето).
  3. И по-важното: де-факто можеше просто да съм дръпнал мрежовия кабел на "зеления" компютър. Тази двузначност (дали отдалеченият компютър е забил, или просто отговаря бавно) е сред фундаменталните проблеми в разпределените алгоритми.

Kudos на Здравко Стойчев за реализацията!