Элементно векторное умножение в кубла [дубликат]

У меня есть одобрение для просмотра приложений Facebook

Нет, вы не ...

Вы заполнили всю необходимую информацию, чтобы теперь мог отправить ваш отзыв - вот что означают эти зеленые отметки.

Если вы на самом деле имели это уже рассмотрено, тогда он будет показывать зеленый круг перед разрешениями и не будет показывать «Изменить детали».

0
задан Baptiste Wicht 2 June 2016 в 06:06
поделиться

1 ответ

CUBLAS основан на эталонном BLAS, а ссылка BLAS никогда не содержала продукт Адамара (комплексный или реальный). Следовательно, у CUBLAS тоже нет. Intel добавила v?Mul в MKL для этого, но она нестандартна и не в большинстве реализаций BLAS. Это тот вид операции, в котором программист старой программы fortran просто записывал цикл, поэтому я полагаю, что это действительно не гарантировало выделенную процедуру в BLAS.

Нет «стандартной» библиотеки CUDA I я знаю, что реализует продукт Адамара. Была бы возможность использовать CUBLAS GEMM или SYMM для этого и извлечь диагональ результирующей матрицы, но это было бы ужасно неэффективно, как с точки вычисления, так и с точки зрения хранения.

Библиотека шаблонов Thrust может сделать это тривиально с помощью thrust::transform , например:

thrust::multiplies<thrust::complex<float> > op;
thrust::transform(thrust::device, x, x + n, y, z, op);

будет перебирать по каждой паре входов с указателей устройств x и y и вычислять z [i] = x [i] * y [i] (возможно, вам нужно сделать несколько бросков, чтобы скомпилировать это, но вы получите эту идею). Но для этого требуется компиляция кода CUDA в рамках вашего проекта, и, по-видимому, вы этого не хотите.

4
ответ дан 4 revs 31 August 2018 в 22:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: