Дмитpий Hecтepук

Блог о программировании — C#, F#, C++, архитектура, и многое другое

Archive for the ‘Hardware’ Category

Коротко про Xeon Phi

9 комментариев

Программирование высокопроизводительных систем невозможно в принципе. Вот несколько причин почему это настолько сложно что мало кто напрягаться будет:

  • SIMD сложно использовать потому, что нужно конвертировать обычные вычисления в абсолютно другой синтаксис, где, во-первых, другие типы данных (__m128i и подобные), работают далеко не все операции (например, в SIMD может не оказаться деления) и используются они не через обычные операторы: например вместо a*b нужно писать _mm_mul_ps(a,b). Понятно что мало кто будет напрягаться с этим, для этого даже отдельное расширение языка есть. Нет, я не шучу, пожалуйста: Intel Extensions for SIMD. Вы только вдумайтесь – отедльное расширение языка чтобы пользоваться чем-то, что присутствовало в процессорах со времен MMX! Я уже не буду говорить про то насколько все это эволюционирует и что писать для этого портативный код фактически невозможно.

  • CUDA это еще один гвоздь. Казалось бы, что плохого, модель более менее понятна. Но! Оно во-первых не особо портируется между девайсами (сам PTX портируется, но речь не об этом), т.к. девайсы все разные и никакого… свопа на диск и прочего нет, у всех свои параметры, писать обобщенный код нудно. Ну и потом, на CUDA нельзя гнать ничего кроме параллельных вычислений. Параллельных. Вы не можете делать 1024 разные вещи на CUDA. Только одинаковые, или с небольшими вариациями. Для обработки картинок? Супер. Для анализа кода? Да вы издеваетесь… (В эту же корзину идут OpenCL, которым никто не пользуется, и AMP, которым тоже никто не пользуется.)

  • FPGA разработка это вообще рецепт «как сделать классные технологии недоступными для простых смертных». То есть в отличии от SIMD, который у вас поддерживается в проце, и CUDA, которая в любой карте NVIDIA поддерживается в каком-то (порой, правда, весьма унылом) состоянии, FPGAшки остались чем-то на уровне шаманства. И языки другие (VHDL это нечто), и парадигма другая, и самое главное что разработчики не понимают нафиг это надо если не купить COTS продукт и не засунуть его быстренько в комп. На самом деле купить, и засунуть, просто это чертовски дорого, а все хотят выгоду здесь и сейчас. Не получится, товарищи.

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

И казалось бы, идея «купи компьютер и вставь в компьютер» фактически умерла, если только у вас не одна математика (тогда вы в шоколаде). Что же делать? Но недавно мне попалась новая партия добра (24шт.) под названием Xeon Phi. Думаете «еще одна проприетарщина»? А вот нет. Phiшка – это 60 процов которые – важно –

поддерживают x86

Может кто-то из вас не вкурил насколько это круто. Ладно. Попробую объяснить.

В ваш комп, условно говоря, воткнут еще один комп на PCI шине. Этот комп может работать в двух режимах: либо вы его просто используете как, эмм, отдельный комп – у него там Linux на борту, с ним вполне можно общаться; либо же вы отгружаете часть ваших задач на него.

Intel Xeon Phi Card

Вообщем шикарно, да? Вы фактически можете поставлять решения (т.е. полнофункиональные решения software+hardware) на таком девайсе. Но стоп, не все так просто. На самом деле, было бы даже странно, если бы наша лодка счастья не разбилась бы о быт в той или иной форме.

Итак, как вы уже догадались, для использования Фишки нужно

  • Отдельный компилятор

  • Тулзы для коммуникации с Фишкой

  • Магия в коде :(

То, что нужно как-то общаться с девайсом это понятно. Отдельный компилятор понять тоже можно: это конечно продукция Intel, но продукция эта использует другие процы, соответственно внутренняя реализация может как-то отливаться… хотя стоп, это же x86.

На самом же деле, поддержка Intel MIC (MIC = many integrated cores, то есть «очень много ядер к нам пришло») с точки зрения кода выглядит очень похоже на CUDA. Серьезно, посмотрите:

  • Для того чтобы что-то отгрузить на Фишку, можно либо использовать __declspec(target(mic)) int* stuff либо же сделать pragma push/pop.

  • Есть два режима как передавать данные – data sharing и data marshaling. В CUDA тоже вариантов всяких аллокаций и sharing’а вагон.

  • Модель отгрузки поддерживает разные парадигмы, например OpenMP. В этом случае просто пишем #omp parallel for и так далее.

  • В прагме для отгрузки идут отметки о том что отсылается и что получается (in/out/inout), прямо в лучших традициях COM. Я правда не уверен что читатели моего блога знают что такое COM :)

  • В случае с отгрузкой, вызов отгруженной функции выглядит как-то брутально: _Cilk_offload_to (target_id) foo().

  • Если данные шарятся, их нужно по-особенному создавать и удалять: как вам _Offload_shared_align_free(vals).

Вообще смотря на это мне как-то не особенно страшно. Ну да, чуточку прагм и немного головной боли в плане определения того, что дескать я именно вот этот массив хочу получить как результат, и вот тебе его длина. Да, это кстати намек на то что variable-size структуры могут как-то не сростись.

Пока у меня про Фишки все. Признаюсь, что с ними интересней играть чем писать про них. Но что я хочу чтобы вы поняли так это то, что это революция. Только пришла она поздно: сейчас у нас «облака» и уже локально что-то тяжелое гнать не так важно. К тому же, непонятен выигрыш для не-math задач. Нужно поизучать.

И да, судя по тому что пишут, для numerics эта штука послабее CUDA будет. Но это не важно!

Реклама

Written by Dmitri

1 декабря 2013 at 19:10

Опубликовано в Hardware

Tagged with , ,

Бесшумный компьютер для разработчика

46 комментариев

В процессе разработки я готов слушать любой шум, при условии что этот шум создал я и дал на него согласие. В идеале же я предпочитаю тишину, а следовательно шумные компьютеры не для меня. Только вот проблема: мне банально лень исследовать вопросы шумоизоляции и строить кастомные решения.[1] К счастью есть подход который масштабируется.

Бесшумый источник питания

До поры до времени, источники питания без вентиляторов были мусором “по показателям”, и приходилось терпеть[2]. Это время прошло. Теперь качественные и тихие PSU доступны всем и каждому. Конечно, основная их польза – при построении HTPC, но для офиса они тоже идеально подходят (а вот для геймеров – нет, ибо максимум 400W).

Безвентиляторные (fanless) PSU предсказуемо используют радиатор. Лучший по моему субъективному ощущению (после прочтения обзоров) – Silverstone Nightjar.

Полный обзор, если кто сомневается, можно почитать тут. Стоимость – около $180. В России, естественно, не продается.

Бесшумный кулер

Я сам не очень верил в то что можно иметь беззвучное неводяное охлаждение. Оказывается можно. Порыскав на Frosty’s я увидел в лидерах по уровню шума кулер Scythe Orochi. Пошел, купил, установил и доволен.

С кулером поставляется 14-сантиметровый вентилятор но мне он не нужен (да и в корпус не поместится). Обзор сего чуда можно почитать тут. Стоимость – около $60. В России было очень сложно найти. Сейчас его в России не найти, да и на Западе тоже – он discontinued и его заменят обновленной моделью. Ждем-с.

Бесшумное все остальное

Тут все как бы тривиально – например, графических карт без вентиляторов масса. Неигровых, конечно, но мы про офисные компьютеры говорим. Если у вас несколько мониторов, то вам подойдет что-то вроде этого:

Это nVidia Quadro NVS 450. Такая карта тянет 4 монитора и не жужжит.[3] (Да, 4 монитора, если надо больше, можно добавить Quadro NVS 295 – почти пруфлинк.) Карточка стоит $550.[4] В России… да, что там говорить, берите на Амазоне.[5]

Насчет жестких дисков тут все понятно. Либо вы берете SSD и проблема отпадает, либо ставите диск на 5200RPM и проблема тоже отпадает (только работать становится намного сложнее). Главное не баловаться дешевыми неопробованными дисками (у меня тут есть Hitachi на 1Gb – такой слона разбудит) и не пытаться думать что какой-нибудь Raptor (даже под RAID) – хорошее решение.[6]

Диск выше – Intel X25-M на 160Gb – стоит $430 на Амазоне. В России, впрочем, найти его тоже не проблема.

Да, и… если у вас жужжит DVD- или BR-драйв, советом помочь не смогу ибо такого добра у меня уже несколько лет не водилось. Впрочем, уверен что для дисководов сущуствуют всякие антивибрационные решения.

Заключение

Вот собственно и всё. Я надеюсь что мне удалось показать то, как “малой кровью” сделать компьютер бесшумным. Конечно, сделать это не так-то просто хотя бы потому что в “этой стране” компьютерное оборудование а) в основном ширпотреб; и b) с неприличной наценкой, но по крайней мере, предложенное мною решение может масштабироваться и не требует огромных временных затрат.

Заметки

  1. Поправка: рано или поздно я буду строить систему с водяным охлаждением – только для того чтобы разобраться как это работает и насколько это сложно. Но это хобби и к делу не относится.
  2. На самом деле – не совсем. Я недавно выкинул систему 5-летней давности которая была фактически бесшумной поскольку использовала внешний адаптер вместо полноценного PSU и была построена на базе Pentium M (да-да, десктоп на ноутбучной платформе). К сожалению, когда я еще был идиотом и не обвешал все бесперебойниками, один перепад напряжения спалил мне трансформатор в этом компьютере, и с тех пор этот комп жил в кладовке с воткнутым в него убогим 350W PSU. Недавно я набрался смелости и снес этот “проваленный эксперимент” на помойку.
  3. Я тут сильно лукавлю: сам работаю на 3-х мониторах (4-й стоит в сторонке и пока ничего не делает). Более того, не все мои экраны подключены к одному компьютеру, хотя и управляются одной с одной пары мышь-клавиатура. Но это уже тянет на отдельный пост :)
  4. Такая сумма за графическую карточку – это дороговато, особенно если учесть что Eyefinity 6 поддерживает сразу 6 мониторов а карточки стоят где-то $500 на Амазоне. Тем не менее, такие монстрообразные карты откровенно шумят, что как бы портит всю идею этого поста.
  5. Товарищ Суворов и его коллеги, которые работают на 3-х мониторах (за одно это респект), исповедуют другой подход: основной графической карточкой поддерживают 2 экрана, а третий—с помошью подпиленной x16 карточки, воткнутой в x4 слот. Да-да, это реально, хотя судя по всему не везде работает.
  6. Рапторы – имеется ввиду Western Digital VelociRaptor – производительные 10kRPM диски которые, тем не менее, адски жужжат и тем самым меня бесят.

Written by Dmitri

21 мая 2011 at 16:11

Опубликовано в Computer, Hardware

Технологии на моей тарелке

15 комментариев

За последние несколько месяцев, мне под руки попался ряд технологий которые я, без стороннего влияния, наверняка никогда бы и не узнал. Причина этому во-первых в том, что я слишком сильно “залип” в инфраструктуре .Net и языке C# чтобы отчетливо видеть что-то за ее пределами. Тем самым, “отлипание” для меня – процесс болезненный. А целью этого поста является кратко осветить те технологии, с которыми я познакомился – мало ли, может кому-то еще интересно будет.

F#

Писать на F# демо-программки и делать на нем что-то существенное – это совершенно разные вещи. Когда начинаешь массово плодить код на F#, начинаешь понимать всю упадочность своего понимания мира. Например, я достаточно долго писал member this.Something with get() = ... вместо аналогичного варианта member this.Something = .... Ну и тяга к скобочкам и излишним аннотациям типов (даже там где и ежу понятно что это за тип будет) – это тоже наследие использования C# где все прописывается.

F# поражает скудностью поддержки в студии. На одной из моих машин вылетела поддержка IntelliSense (полностью!), на другой – F# проекты по F5 только компилируются но не запускается отладчик. Очевидно что-то тут не так. Я конечно предпринимаю усилия для того чтобы работать с F# было более гуманно, но пока что нужно делать основные вещи, такие как лексер и парсер. Адаптировать их из сорцов F#-а — дело не для слабонервных.

WebSharper

Я упомянул этот фреймворк в моем первом сольном подкасте, сказав что он позволяет делать сайты, полностью оторваные от Asp.Net и IIS. Не знаю, один ли я страдаю такой неприязнью к IIS, но на данный момент для меня нет антидота: тот релиз Вебшарпера который состоялся недавно еще не поддерживает вторую версию Sitelet’ов, в которой как раз и должна быть поддержка создания полностью независимых сайтов. Что-то мне подсказывает, правда, что Адам Границ и компания планируют вообще сделать чуть ли не свой веб-сервер.

Так или иначе, я продолжаю эксперименты с Web#, а как только появятся новые сайтлеты, я начну тестировать все это дело уже на Linux. Интересно, что хоть технология и F#, нельзя сказать что она как-то связана с .Net или Microsoft.

NetKernel

Во-первых, NK – это Java-стек, но меня это не пугает т.к. ничего страшного там нет. NK – это реализация ресурсно-ориентированной парадигмы, которая сейчас будоражит умы всех кто занимается коммуникационными технологиями, например та же комманда WCF. По сути дела, RoC в представлении NK – это REST’ообразная концепция, которая предоставляет как бы аусторсинг веб-архитектуры, позволяя разработчикам писать компоненты, которые работают через ресурсы, запросы на ресурсы, конверсию различных типов ресурсов, и так далее.

NK это, если хотите, эволюция REST, и является интересной технологией (более живой чем существующие .Net аналоги) которая понравится тем, кто доселе работал с такими вещами как WCF REST.

Семантический Веб

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

Во-первых, это DotNetRdf – собственно библиотека, которая позволяет работать с RDF и поддерживает различные форматы хранилищ. Кстати, недавно нашел в блоге попытку создания semantic triple store на MongoDB.

Еще один аспект моих исследований связан уже с конкретикой, а именно с онтологией Good Relations и ее нынешней поддержкой гуглом (их Rich Snippets). Изначально у меня была идея попробовать подобавляеть поддержку всего этого в R2P чтобы с этим было легче работать, но потом я узнал что модели Xml и Html в моем любимом Решарпере не имеют общего корня, что означает что, по сути дела, все пришлось бы делать дважды. Возможно когда-нибудь у меня дойдут до этого руки.

Так вот, в попытках найти возможность создать .Net объектную модель из OWL-файла, описывающего GR, я набрел на проект ROWLEX, в котором поставляется утилита именно для этого. Интересно, а можно ли как-то автоматически брать данные со страниц, записывать их в эту модель и потом заталкивать все в MongoDB без каких-либо лишних действий? Подозреваю что все несколько сложнее…

MindTouch

Я занимался исследованием MindTouch в двух направлениях – в попытке понять, можно ли использовать эту штуку для документирования API большого программного продукта, а также мне хотелось понять, можно ли использовать его вместо SharePoint для внутренних целей.

По первому вопросу у меня нет ответа. Бесплатная версия MT шикарна, и покрывает 99% того что мне лично нужно. Поэтому в личных целях я начал ее использовать. Что же касается построения на нем портала разработчиков, то тут все неоднозначно. Я не decision maker в данном вопросе, но лично меня никто не убедил отдавать за коммерческий вариант этой штуки большие деньги.

Я рекоммендую всем скачать MindTouch Core (бесплатную версию) и поиграть с ней. Это действительно стоит того! Это по сути дела Wiki/CMS которая хорошо подходит для документации. Чудес в этом мире не бывает, но штука красивая, и я ей доволен.

TidePowerd GPU.NET

Поскольку несколько лет назад я плотно занимался GPGPU и даже сам эксплуатировал pixel shader’ы через Direct3D, наличие .Net библиотеки мне импонирует – давно пора. Тем более что трансляция IL во что-то еще – процесс весьма понятный и реализуемый без особых проблем. Библиотека GPU.Net – это как раз оно и есть. Еще одна абстракция чтобы облегчить нам жизнь.

Признаюсь что я только лишь посмотрел вебинар – я не игрался еще с самой библиотекой т.к. не было времени. Все впереди :)Update: уже успел созвониться с директором Tidepowerd – разговор шел в основном в ключе поддержки конкретно F# в GPU.NET. Заинтересованность определенно есть, так что рано или поздно замутим совместный конференс с Саймом, Границем, и партнерами. Как что состоится – обязательно напишу.

Fusion IO

Fusion IO – компания, которая за 3 года получила 300 миллионов долларов инвестиций. Их “фишка” – высокоскоростные хранилища данных, и когда я говорю “хранилище”, подразумевается PCI-карта с SSD-устройствами на ней. Конечно, Fusion IO говорит что их устройства – это не SSD, но на самом деле их отличие в качественном ПО (в плане прошивки их ASIC), а есть ли у них что-то кардинально новое – не знаю. Надо получить образец (надеюсь дадут) и самому посмотреть.

Хотя если по мне, так более интересной фишкой является NVidia Tegra – нам уже 10 лет назад нужно было иметь нормальные SoC-решения. Те же Fusion IO могли бы засунуть на свои карты контроллер и несколько FPGA которые я бы мог “флэшить” и им цены бы не было! Вот интересно – Intel уже начал нервничать или еще нет? Ведь по мне так самое главное это избавиться от ситуации когда я не могу иметь масштабно-инвариантную систему, а должен на каждый процессор закупать еще и материнскую плату, память, жесткий диск, и так далее. Надеюсь скоро эти телодвижения станут пережитками прошлого.

Кстати о Tegra… двухъядерные процессоры в мобильных телефонах это круто или как?

Written by Dmitri

7 января 2011 at 19:44

Опубликовано в .NET, f#, GPU, Hardware

Tagged with , , , ,