Как стать автором
Обновить

Комментарии 11

скажите пожалуйста, а не проще ли было бы организовать прямое соединение между всеми плис?
Зачем данные нужно пересылать именно через PCIe материнской платы? Опять же посредник в виде чипа PLX явно не добавит производительности…
Соглашусь. Например в решении от Maxeler (например вот) есть специальные шины (MaxRing) для соединения нескольких плат. Утверждают, что производительность такой шины прилично выше производительности PCIe.
Для обмена данными между ПЛИС оборудование материнской платы как таковое не использовалось — данные передавались через коммутатор, установленный на адаптере RHA-25. Также в других конфигурациях возможно соединять вычислительные платы RC-47 последовательно напрямую кабельными соединениями PCIe.
Кольцевые решения соединения вычислителей существуют уже давно. Помимо MaxRing от Maxeller можно вспомнить еще сеть Token Ring, которая впоследствии была полностью вытеснена иерархической сетью Ethernet. При этом PCI Express тоже имеет иерархическую структуру.
У кольцевых решений есть свои преимущества, но и свои недостатки, например, если в кольцо объединены несколько устройств, и надо передать пакет данных между диаметрально расположенными устройствами, то пакет будет идти последовательно от устройства к устройству, будет много промежуточных устройств. Если же вместо кольца использовать топологию звезда (PCI Express) с коммутатором в качестве центрального устройства, то пакет между любыми двумя вычислительными устройствами будет проходить путь всего в две передачи: от устройства А до коммутатора и от коммутатора до устройства В.
Также я считаю, что PCI Express более универсальное решение, во-первых, оно стандартизированно, так что потенциально можно соединять друг с другом вычислители разных производителей, также упрощается разработка «начинки» ПЛИС и системного программного обеспечения.
Может я ошибаюсь, но вопрос метода соединения ПЛИС между собой честно говоря кажется довольно вторичным.
А главный вопрос — метод программирования прикладной расчетной задачи внутри плис.
Программирование плис существенно отличается от программирования на C/C++.
Тем более, что процесс проектирования сильно усложняется необходимым временным анализом (сможет ли вообще загруженная в плис схема работать на нужной частоте).
Как запихнуть прикладную расчетную задачу в ПЛИС? Есть ли компиляторы, средства программирования уровня приложений?
Да вы правы, вопрос программирования ПЛИС стоит очень остро. По сравнению с теми же видеокартами GPU, для которых существуют весьма эффективные и более простые в использовании средства программирования (CUDA, OpenCL), FPGA сильно проигрывают. Долго единственным средством программирования ПЛИС было проектирование на языках низкого уровня (RTL) VHDL и Verilog. Прикладным программистам тяжело использовать эти языки, из-за того что они сильно отличаются от того же Си, а также из-за того что они уж больно низкоуровневые (разработчик может управлять каждым битом любого регистра и тд) — это все равно как создатьва Web site на ассемблере.

Слава богу, в последние несколько лет появились высокоуровневые компиляторы (или лучше трансляторы) какого либо языка (как правило Си) в описание схемы на VHDL или Verilog. Люди долго спорили насколько они эффективны, но в любом случае их использование значительно сокращает время разработки схемы. Примеры отечественных трансляторов: Colamo АвтокодHDL, зарубежных ImpulseC CatapultC VivadoHLS. Vivado HLS входит в состав САПР Xilinx Vivado — я использую именно его. Вообще чуть погодя я напишу тут небольшой обзор литературы на тему высокоуровневого программирования ПЛИС.
Обзор литературы на эту тему очень бы хотелось почитать, так что буду его ждать нетерпением. Программировать ПЛИС на С/С++, звучит очень круто и будоражит воображение.
Есть же еще и промежуточные решения. Вроде той же Wishbone. Хоть она изначально ориентирована на взаимодействие модулей на кристалле, вроде бы я где-то видел интеграцию шины с внешними IOB у Xilinx. У того же Xilinx в серии Virtex есть аппаратные гигабитные трансиверы.
Wishbone — параллельная шина. Для связи с внешними устройствами параллельные шины сейчас практически не используются из-за дефицита ножек кристалла — вместо этого используют высокоскоростные последовательные интерфейсы.

Об интеграции Wishbone с аппаратными гигабитными трансиверами я не слышал честно говоря, если у вас есть ссылка, можете поделиться? Xilinx для связи по гигабитным линиям имеет простое ядро
Aurora на базе которого можно строить свой протокол обмена данными. Но зачем с этим возиться, если есть готовое и проверенное решение PCI Express? Правда количество интерфейсов PCI Epxress в одном кристалле сильно ограничено (обычно 1, и по-моему, в топовых кристаллах может быть 2) ИМХО С мультигигабитными трансиверами стоит возиться, если А) надо разработать свой кастомный интерфейс к какому-либо девайсу Б) не хватает интерфейсов PCI Express
А у меня вопрос попроще: вот есть всякие хид-хэндлеры и прочие игрушки на FPGA, а что насчет возможности просто считать floating-point? Имеет ли это смысл для каких-нть высокозаточенных алгоритмов, или все равно CUDA будет пошустрее?
Насчет плавающей точки точно ничего не скажу. Знаю, что на уровне VHDL можно использовать вычисления с плавающей точкой с помощью соответствующих IP ядер из библиотеки. Правда ядра эти весьма прожорливые по ресурсам, и их очень много их в кристалл не запихнешь… Также я слышал мнение от одного уважаемого российского ученого, что FPGA лучше бы использовать для вычислений с четверной и выше точностью — тут они точно уделают и CPU и GPU. Если же говорить про float или double, то тут GPU скорее всего будет шустрее. Но все зависит от алгоритма…
FPGA будут быстрее в тех задачах, на которую вы её направите. Суть FPGA в том, что вы получаете микросхему отлично заточенную под вашу задачу, если у вас конечно есть опыт работы с Verilog иди VHDL, т.е. если вам нужно обрабатывать информацию очень специфичным образом, то FPGA будет впереди любого процессора. По поводу производительности тут вопрос в том, что готовая микросхема всегда производительней при прочих равных, чем FPGА. FPGA это для тех, кто хочет свой велосипед, например вам нужна супер надёжность вычислений или вычисления не стандартного вида, например хотите делать 1000 умножений за такт.
Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.