OpenCL для обработки сигналов
Я ищу написать код обработки сигнала, который будет нуждаться в обычных параллельных примитивах (например, scan()
, reduce()
, map()
, а также sort()
) наряду с эффективными процедурами для БПФ и плотными векторами / матричными операциями для поддержки таких вещей, как анализ главных компонентов, который будет включать в себя поиск собственных векторов и собственных значений. Множество обратных матриц и умножений. Хост-код будет C++11.
Я бы хотел использовать OpenCL, чтобы оставаться независимым от платформы, но несколько дней экспериментов не дают мне уверенности в зрелости инструментов. Мне нравится Boost.Compute с точки зрения модели программирования и примитивов, но я не уверен, что библиотека LAPACK, такая как clMAGMA и библиотека FFT FFTcl, будет хорошо работать с ней с точки зрения типов данных, общего контекста и асинхронных операций. Я также вижу, что последнее обновление clMAGMA было два года назад.
ViennaCL покрывает БПФ и некоторые матричные операции, но не помогает с LAPACK. VEXcl только для разреженных векторов / матриц.
Ничто из этого не кажется сложным с CUDA - установите инструменты разработчика Nvidia и начните. Здесь есть все современные библиотеки, плюс есть такие вещи, как NPP, чтобы охватить другие вещи, которые мне могут понадобиться. Я не вижу большого риска несовместимости между библиотеками.
Мне любопытно, прошел ли кто-нибудь еще этот путь с OpenCL. Я хотел бы сделать это, но я чувствую, что это более высокий риск, чем использование CUDA, которая, как представляется, дает гораздо меньше шансов столкнуться с непредвиденными препятствиями.