Очевидно, что это сложный вопрос. Вопрос может также включать процессор клетки.
И, вероятно, нет ни одного правильного ответа на другие связанные вопросы.
По моему опыту, любая реализация, выполненная в абстрактной манере, то есть скомпилированная реализация языка высокого уровня по сравнению с реализацией на уровне машины, неизбежно будет иметь снижение производительности, особенно в реализации сложного алгоритма. Это верно как для FPGA, так и для процессоров любого типа. FPGA, разработанная специально для реализации сложного алгоритма, будет работать лучше, чем FPGA, чьи элементы обработки являются общими, что обеспечивает определенную степень программируемости из регистров управления вводом, ввода-вывода данных и т. Д.
Еще один общий пример, когда FPGA может иметь гораздо более высокую производительность, - это каскадные процессы, где выходы процесса становятся входами для другого, и они не могут быть выполнены одновременно. Каскадные процессы в FPGA просты и могут значительно снизить требования к вводу / выводу памяти, в то время как память процессора будет использоваться для эффективного каскадирования двух или более процессов, в которых существуют зависимости данных.
То же самое можно сказать о GPU и CPU. Алгоритмы, реализованные на С, выполняемые на ЦП, разработанные без учета присущих характеристик производительности кэш-памяти или системы основной памяти, не будут работать так же хорошо, как реализованный, который работает. Конечно, если не учитывать эти характеристики производительности, это упрощает реализацию. Но по стоимости исполнения.
Не имея прямого опыта работы с графическим процессором, но зная присущие ему проблемы производительности системы памяти, он тоже будет подвержен проблемам с производительностью.