Да, программировать быстро FPGA чертовский сложно, и мало людей вообще умеют это делать даже долго. Один из способов преодолеть это — сделать каркас приложения, включающий драйвер OS, интерфейсное ядро в FPGA (например PCIe или USB) и определить программные (на стороне хост-компьютера) и аппаратные (на стороне ПЛИС) интерфейсы для передачи данных между хостом и ускорителем FPGA. А само вычислительное ядро писать на языках высокого уровня типа C или OpenCL.
Тут в лидерах Altera — у них уже примерно с год как есть полноценная поддержка стандарта OpenCL для своих кристаллов с интерфейсом PCIe (драйвер, хост библиотеки и аппаратные ядра уже написаны, и прикладной разработчик использует документированную программную модель OpenCL). Xilinx в этом смысле отстает — у них пока из открытого и доступного есть только транслятор C-to-HDL называется Vivado HLS (бывший AutoESL), позволяющий довольно эффективно (есть оценки) перевести Си код в VHDL или Verilog, Но тут нет никакой системной поддержки, и драйвер и аппаратный интерфейс надо реализовывать самому.
ASIC конечно будет потреблять меньше, чем решающая ту же задачу ПЛИС, но у этих технологий совсем разные ниши. В области высокопроизводительных вычислений ASIC — не игрок, из-за того что эту микросхему не перепрограммируешь. Если только не строить ASIC под конкретную задачу типа Bitcoin mining.
Пока FPGA используется в качестве ускорителя вычислений только для одной задачи в одно время. Например у вас есть алгоритм из области биоинформатики или надо быстро посчитать покупать акции или продавать. Тогда если есть много денег и хочется побыстрее, то можно использовать FPGA ускорители. При этом если вы занимаетесь биоинформатикой, то врятли вы захотите запускать на том же компьютере финансовые задачи… Это я к тому, что на текущий день компьютеры с FPGA ускорителями — это не продукт широкого потребления типа GPU или Xeon Phi, и на них не запускают широкий спектр задач, а только ту, ради ускорения которой и покупался/строился этот очень дорогой компьютер.
Поэтому в том чтобы морочиться с выделением логических ресурсов плис каждому процессу на уровне ОС смысла сейчас нет, как нет и практических реализаций таких систем.
Были такие суперькомпьютеры от Cray en.wikipedia.org/wiki/Cray_XT5 en.wikipedia.org/wiki/Cray_XD1
в которых в один из процессорных слотов на материнской плате на межпроцессорную шину сажался кристалл FPGA, расширяющий инструкции основного. Но, как мне сказал инженер Cray на одной выставке, народ этого не оценил, никто не покупал эти машины, и Cray свернул все свои дела с FPGA ускорителями.
Да честно сказать, я не вижу особого увеличения аппаратуры при переходе в базис обратимых элементов. Оба элемента выражаются через И-НЕ очень просто, а на уровне CMOS транзисторов, уверен будет еще проще.
Это, в свою очередь, обозначает, что при конструировании схем обратимых вычислений мы непременно сталкиваемся с увеличением (экспоненциальным?) размеров вычислительных схем, и, как следствие, с необходимостью увеличения памяти для выполнения таких вычислений. Это плата за обратимость. Так что вопрос для обсуждения — не станет ли преградой для квантовых вычислений необходимость экспоненциального наращивания памяти?
Не понял, как из того, что для выражения элемента Тоффоли через элемент Фредкина требуется много элементов Фредкина следует ваша мысль об экспоненциальном увеличении аппаратуры при конструировании схем обратимых вычислений? Поясните, пожалуйста.
Также остался для меня неясным вопрос, зачем вообще проектировать такие схемы…
Предстоит решить не только задачу охлаждения и подвода энергии к чипам, более сложная проблема заключается в невозможности на сегодняшний день обеспечить связность вычислительных узлов друг с другом. В мозге человека миллиарды нейронов, каждый из которых связан с сотнями тысяч других нейронов, находящихся по всему объему мозга (а не только рядом с ним). Поэтому пока сложно представить, как можно организовать такую связность — если один процессор моделирует работу группы нейронов, неясно как обеспечить связь нужного уровня производительности каждого нейрона-процесса из этой моделируемой группы с другими нейронами-процессами в других чипах.
Для меди нужны еще усилители/эквалайзеры электрических сигналов на печатной плате, и их как правило надо настраивать под разную длину кабеля. Для оптики усилители не нужны вовсе. Также медный кабель более массивный и занимает больше места. Цена конечно у меди ниже. Поэтому конечный пользователь выбирает между плюсами и минусами обеих технологий.
Спасибо за обзор новой для меня системы управления. Сам использую Redmine, календарем там особо не пользуюсь, поэтому не понял в чем отличие тут в плане календаря? Также как тут дела обстоят с резервным копированием/восстановление и переносом системы на другой сервер?
По поводу экологического мышления еще хочу добавить. Прилетаем в Берлин, чемодан замотан полиэтиленом еще в России. Встречает знакомая немка, разговор заходит про эту обертку. Она говорит, что если такой сервис по обматыванию в берлинском аэропорту и есть, то популярностью он особо не пользуется — все думают о мусоре и экологии, а не о том, что чемодан испачкается.
Да вы правы, вопрос программирования ПЛИС стоит очень остро. По сравнению с теми же видеокартами GPU, для которых существуют весьма эффективные и более простые в использовании средства программирования (CUDA, OpenCL), FPGA сильно проигрывают. Долго единственным средством программирования ПЛИС было проектирование на языках низкого уровня (RTL) VHDL и Verilog. Прикладным программистам тяжело использовать эти языки, из-за того что они сильно отличаются от того же Си, а также из-за того что они уж больно низкоуровневые (разработчик может управлять каждым битом любого регистра и тд) — это все равно как создатьва Web site на ассемблере.
Слава богу, в последние несколько лет появились высокоуровневые компиляторы (или лучше трансляторы) какого либо языка (как правило Си) в описание схемы на VHDL или Verilog. Люди долго спорили насколько они эффективны, но в любом случае их использование значительно сокращает время разработки схемы. Примеры отечественных трансляторов: ColamoАвтокодHDL, зарубежных ImpulseCCatapultCVivadoHLS. Vivado HLS входит в состав САПР Xilinx Vivado — я использую именно его. Вообще чуть погодя я напишу тут небольшой обзор литературы на тему высокоуровневого программирования ПЛИС.
Насчет плавающей точки точно ничего не скажу. Знаю, что на уровне VHDL можно использовать вычисления с плавающей точкой с помощью соответствующих IP ядер из библиотеки. Правда ядра эти весьма прожорливые по ресурсам, и их очень много их в кристалл не запихнешь… Также я слышал мнение от одного уважаемого российского ученого, что FPGA лучше бы использовать для вычислений с четверной и выше точностью — тут они точно уделают и CPU и GPU. Если же говорить про float или double, то тут GPU скорее всего будет шустрее. Но все зависит от алгоритма…
Wishbone — параллельная шина. Для связи с внешними устройствами параллельные шины сейчас практически не используются из-за дефицита ножек кристалла — вместо этого используют высокоскоростные последовательные интерфейсы.
Об интеграции Wishbone с аппаратными гигабитными трансиверами я не слышал честно говоря, если у вас есть ссылка, можете поделиться? Xilinx для связи по гигабитным линиям имеет простое ядро Aurora на базе которого можно строить свой протокол обмена данными. Но зачем с этим возиться, если есть готовое и проверенное решение PCI Express? Правда количество интерфейсов PCI Epxress в одном кристалле сильно ограничено (обычно 1, и по-моему, в топовых кристаллах может быть 2) ИМХО С мультигигабитными трансиверами стоит возиться, если А) надо разработать свой кастомный интерфейс к какому-либо девайсу Б) не хватает интерфейсов PCI Express
Для обмена данными между ПЛИС оборудование материнской платы как таковое не использовалось — данные передавались через коммутатор, установленный на адаптере RHA-25. Также в других конфигурациях возможно соединять вычислительные платы RC-47 последовательно напрямую кабельными соединениями PCIe.
Кольцевые решения соединения вычислителей существуют уже давно. Помимо MaxRing от Maxeller можно вспомнить еще сеть Token Ring, которая впоследствии была полностью вытеснена иерархической сетью Ethernet. При этом PCI Express тоже имеет иерархическую структуру.
У кольцевых решений есть свои преимущества, но и свои недостатки, например, если в кольцо объединены несколько устройств, и надо передать пакет данных между диаметрально расположенными устройствами, то пакет будет идти последовательно от устройства к устройству, будет много промежуточных устройств. Если же вместо кольца использовать топологию звезда (PCI Express) с коммутатором в качестве центрального устройства, то пакет между любыми двумя вычислительными устройствами будет проходить путь всего в две передачи: от устройства А до коммутатора и от коммутатора до устройства В.
Также я считаю, что PCI Express более универсальное решение, во-первых, оно стандартизированно, так что потенциально можно соединять друг с другом вычислители разных производителей, также упрощается разработка «начинки» ПЛИС и системного программного обеспечения.
Надо думать поиск по картинкам требует немалых вычислительных ресурсов. Не рассматриваете ли вы варианты аппаратного ускорения каких-либо ваших алгоритмов?
Тут в лидерах Altera — у них уже примерно с год как есть полноценная поддержка стандарта OpenCL для своих кристаллов с интерфейсом PCIe (драйвер, хост библиотеки и аппаратные ядра уже написаны, и прикладной разработчик использует документированную программную модель OpenCL). Xilinx в этом смысле отстает — у них пока из открытого и доступного есть только транслятор C-to-HDL называется Vivado HLS (бывший AutoESL), позволяющий довольно эффективно (есть оценки) перевести Си код в VHDL или Verilog, Но тут нет никакой системной поддержки, и драйвер и аппаратный интерфейс надо реализовывать самому.
Из доказательств смог быстро найти только это
docs.google.com/viewer?url=http%3A%2F%2Fwww.gstitt.ece.ufl.edu%2Fcourses%2Fspring13%2Feel4712%2Flectures%2Ffpga130-fowers.pptx
Поэтому в том чтобы морочиться с выделением логических ресурсов плис каждому процессу на уровне ОС смысла сейчас нет, как нет и практических реализаций таких систем.
Были такие суперькомпьютеры от Cray
en.wikipedia.org/wiki/Cray_XT5
en.wikipedia.org/wiki/Cray_XD1
в которых в один из процессорных слотов на материнской плате на межпроцессорную шину сажался кристалл FPGA, расширяющий инструкции основного. Но, как мне сказал инженер Cray на одной выставке, народ этого не оценил, никто не покупал эти машины, и Cray свернул все свои дела с FPGA ускорителями.
Не понял, как из того, что для выражения элемента Тоффоли через элемент Фредкина требуется много элементов Фредкина следует ваша мысль об экспоненциальном увеличении аппаратуры при конструировании схем обратимых вычислений? Поясните, пожалуйста.
Также остался для меня неясным вопрос, зачем вообще проектировать такие схемы…
Слава богу, в последние несколько лет появились высокоуровневые компиляторы (или лучше трансляторы) какого либо языка (как правило Си) в описание схемы на VHDL или Verilog. Люди долго спорили насколько они эффективны, но в любом случае их использование значительно сокращает время разработки схемы. Примеры отечественных трансляторов: Colamo АвтокодHDL, зарубежных ImpulseC CatapultC VivadoHLS. Vivado HLS входит в состав САПР Xilinx Vivado — я использую именно его. Вообще чуть погодя я напишу тут небольшой обзор литературы на тему высокоуровневого программирования ПЛИС.
Об интеграции Wishbone с аппаратными гигабитными трансиверами я не слышал честно говоря, если у вас есть ссылка, можете поделиться? Xilinx для связи по гигабитным линиям имеет простое ядро
Aurora на базе которого можно строить свой протокол обмена данными. Но зачем с этим возиться, если есть готовое и проверенное решение PCI Express? Правда количество интерфейсов PCI Epxress в одном кристалле сильно ограничено (обычно 1, и по-моему, в топовых кристаллах может быть 2) ИМХО С мультигигабитными трансиверами стоит возиться, если А) надо разработать свой кастомный интерфейс к какому-либо девайсу Б) не хватает интерфейсов PCI Express
Кольцевые решения соединения вычислителей существуют уже давно. Помимо MaxRing от Maxeller можно вспомнить еще сеть Token Ring, которая впоследствии была полностью вытеснена иерархической сетью Ethernet. При этом PCI Express тоже имеет иерархическую структуру.
У кольцевых решений есть свои преимущества, но и свои недостатки, например, если в кольцо объединены несколько устройств, и надо передать пакет данных между диаметрально расположенными устройствами, то пакет будет идти последовательно от устройства к устройству, будет много промежуточных устройств. Если же вместо кольца использовать топологию звезда (PCI Express) с коммутатором в качестве центрального устройства, то пакет между любыми двумя вычислительными устройствами будет проходить путь всего в две передачи: от устройства А до коммутатора и от коммутатора до устройства В.
Также я считаю, что PCI Express более универсальное решение, во-первых, оно стандартизированно, так что потенциально можно соединять друг с другом вычислители разных производителей, также упрощается разработка «начинки» ПЛИС и системного программного обеспечения.