2015-03-02 5 views
0

Я пытаюсь ускорить любое из моих программ, используя FPGA/GPU. Я немного смущен, чтобы выбрать среди этих двух. Какие области подходят для FPGA и какие области подходят для GPU (например, обработка изображений подходит для графических процессоров). Также было бы хорошо знать области, которые могут быть ускорены более чем в 20 раз. Меня больше интересует GPU, поскольку они дешевы, а программирование проще по сравнению с FPGA.Какие области можно ускорить с помощью FPGA и GPU.

+0

Взгляните на OpenCL https://www.khronos.org/opencl/ –

+0

Не должно быть места, где вы можете добиться ускорения в 20 и более раз. Если это так, методы измерения не выбираются справедливо. Например. многие CPU - графические процессоры используют код C без каких-либо оптимизаций или только -O1. – Paebbels

ответ

0

Основное различие между ПЛИС и графическим процессором заключается в том, что на сегодняшний день GPGPU похож на CPU. Он легко справляется с указателями, функциями и всем программированием, потому что CUDA/OpenCL работают с некоторым набором C/C++ (например, OpenCL использует C99 + некоторые специальные функции).

FPGA более ориентирован на оборудование. Вы можете определить ворота и целую логику, которая затем быстрее и паралелизм, но это достигается разными способами.


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

GPGPU всегда подключается через программу PCI Express и отправляет ее в обычное (игры используют набор шейдеров (GPU-программ), которые быстро переключаются), поэтому он больше похож на устройство обработки партии. Сегодня GPGPU имеет большое количество оперативной памяти и ядер/мультипроцессоров, поэтому он действительно больше похож на процессор, чем на FPGA.


Есть одна (возможно, больше, но я не помню больше) вещь, что FPGA будет намного быстрее. Я не знаю о какой-либо необходимости в этом (кроме (де) шифрования), но это огромные количества бит-бит. Графические процессоры специализируются на работе с float и ints (32-битные значения с плавающей запятой и целочисленными значениями), но они довольно медленны, когда вам нужно сделать двоичную магию. Просто используя FPGA-архитектуру, эта двоичная магия может быть выполнена в паралели в одном тике.

В графическом процессоре вы должны разделить каждую двоичную операцию (AND, OR, XOR, ...), изучить, в каком порядке они должны быть выполнены.


Tl, dr: Если у вас нет особой необходимости в FPGA, выберите GPGPU.