среда, 30 января 2013 г.

Republic of Gamers

Приобрёл себе материнскую плату ASUS Crosshair V Formula-Z. Это - надёжный фундамент будущей мощной системы, которую я планирую постепенно собрать в течении года. С такой платой можно играться с самыми "тяжёлыми" компонентами, не боясь что подсистема питания перегорит.

Решения с гнёздами под Intel (Maximus V Formula/Extreme) существенно дороже, как и сами процессоры Intel. Существует предыдущая версия этой материнской платы (без приставки Z и на $40 дешевле), которую я и планировал изначально приобрести, но из интереса решил поискать отличия между версиями. Как выяснилось, ничего существенного, ради чего стоит переплачивать, не оказалось... кроме одной опции: Fast Boot. Я падок на всё, что позволяет компьютеру и программам загружаться быстрее, и эта штуковина этому способствует. В ASUS Exclusive Boot Features об этой опции написано следующее:
This feature allows you to accelerate your system's boot speed with the use of a switch, allowing the system to skip POST and enter the OS at its fastest time.
Т. е. после включения пропускается куча проверок из Power-On Self Test и вся эта галиматья с логотипами BIOS и "Press DEL to enter setup", а вместо этого управление сразу передаётся загрузчику ОС. На сайте ASUS написано "shorten system boot-up time to 2-seconds". Привирают конечно, но если сложить эту фичу с оптимизациями, введёнными в Windows 8, думаю, будущая система будет загружаться очень, очень быстро - быстрее, чем всё то, на чём мне доводилось работать до сих пор.

Т. к. финансы не резиновые, а единовременные траты болезненны, планирую покупать по одному компоненту будущей системы каждый месяц :) Вот примерно то, из чего она будет состоять:

1) Mobo - ASUS Crosshair V Formula-Z (уже есть).
2) CPU - AMD FX 8320 (уже есть), в будущем апгрейд на Steamroller.
3) GPU - CrossFire из двух (трёх?) AMD Radeon R9 290 (X?).
4) RAM - G.Skill DDR3-1866 32 GB (уже есть).
5) RAID0 - четыре диска Western Digital RE4 общей ёмкостью 2 TB (уже есть).
6) SSD - Samsung 840 Pro 120 GB как системный диск (уже есть) (позже - в виде PCI-Express платы) .
7) HDD Western Digital Green 4 TB (x3), общей ёмкостью 12 TB как media storage для 1080p и 4K фильмов (уже есть).
8) PSU - Seasonic SS-1000XP 1000W (уже есть).
9) Wi-Fi - ASUS PCE-N53 (уже есть)
10) Корпус Full-Tower Lian Li PC-X2000FN (уже есть).
11) Два монитора ASUS MX279H (уже есть).
12) Привод Blu-ray R/W (в high-end PC не помешает) (уже есть).

Зачем в системе 32 GB? Хороший вопрос :)

Сегодня на работе я наблюдал, как связка из Win64 + Linux из-под WMWare + VS 2010 сожрали почти 8 ГБ памяти. Поэтому 16 ГБ для комфортной работы - это сегодняшний минимум. Другие 16 ГБ я собираюсь отвести под RAM-диск, на котором будут рабочие инструменты (студия, тулзы, коды проектов) для реактивной работы. Ещё недавно прочитал на одном форуме любопытную оптимизацию, когда файл подкачки размещают прямо на RAM-диске, и все (пользователь, ОС и программы) счастливы. Полезно также перенести на RAM-диск кэш браузера и temp папок, чтобы снизить количество операций записи на SSD-диске. Вообще дисковая подсистема - самый медленный компонент любого компьютера, поэтому в первую очередь оптимизировать нужно именно её. А рецепт прост: RAM-диск - для программ первой необходимости, swap-файла и кэша, SSD - для системы и офиса, RAID - для всего остального.

четверг, 24 января 2013 г.

Betonomeshalka

Ну что же, судя по слухам, обе консоли нового поколения, Xbox и Playstation, получат CPU и GPU производства AMD. Больше никаких экзотических архитектур (Cell), в современныех реалиях оптимизировать код под кастомное железо могут позволить себе единицы. Да и оправдывают эти архитектуры себя только первые год-два, по истечении которых неумолимый технический прогресс отправляет всё на свалку.

Архитектура Bulldozer всё же получила путёвку в жизнь, я рад за AMD. Мне представляется, что цена камешков сыграла здесь определяющую роль, так как консоли продаются на грани себестоимости. В настоящее время я примеряюсь к комплектующим, планируя собрать мощную рабочую станцию вместо ноутбука, и для себя решил, что базироваться она будет тоже на платформе AMD (Intel + NVidia сильно дороже). Читая обзоры по Piledriver, у меня сложилось стойкое убеждение, что эта архитектура и её предшественница изначально затачивались под многопоточность, и часто в тестах новые FX проигрывают Core i5-i7 по двум причинам:
  1. Большинство приложений состоят из говнокода (Intel его любит).
  2. Многие приложения по сути однопоточны.
В тех же программах, где оптимизации и распараллеливанию разработчиком уделено достаточно внимания (конвертация видео, рендеринг в 3ds max, компиляция), топовые FX способны потягаться с Core i7, при том что цена этих процессоров несоизмерима. Поэтому приобретать CPU на архитектуре Bulldozer/Piledriver/Steamroller имеет смысл, да и где ещё можно поиграться с выделенными 8-ю потоками за такие деньги! Будущие Haswell будут содержать только  2 ли 4 ядра, что уныло. Я, например, хочу настоящий многопоточный рендер в Direct3D 11, а в четырёх ядрах просто негде развернуться (ещё нужны физика, AI). Думаю, что подобные мысли посещали и разработчиков next-gen (пока ещё) консолей. Уверен, Bulldozer заставит игроделов грамотно оптимизировать код своих игр, и при должном усердии архитектура раскроет свой потенциал.

Единственное, в чём AMD серьёзно проигрывает - это в энергопотреблении и тепловыделении. Техпроцесс 32 nm демонстрирует, что он уже слишком устарел.

четверг, 17 января 2013 г.

dot(N, L)

Недавно читал форумы и наткнулся на интересную оптимизацию, связанную с ограничением скалярного произведения (например, dot(N, L)) промежутком [0, 1]. Это необходимо делать в случае сложных формул освещения или записи в FP render target, где отрицательные числа могут сломать вам всю математику.

Обычно dot() в шейдерах пишется совместно с max() как в этом примере. В случае D3D assembly это трансформируется в dp3, max, GSA показывает что комбинация занимает два ALU слота. Однако, если max() заменить на clamp(0, 1), это трансформируется в dp3_sat. Radeon HD assembly показывает, что для DOT4 есть опциональный модификатор CLAMP, который работает для диапазона [0, 1]. Таким образом укладываемся в один ALU.