Как сделать поэлементную экспоненту для матрицы в программировании Cuda?

Например:

A = [1 3 4; 6 5 2];

Я хочу вычислить:

B = [ехр (1), ехр (3), ехр (4); ехр (6); ехр (5); (2)]

Есть ли способ сделать это эффективно и сделать это на месте (например, B заменяет A)? Кажется, что cublas не обеспечивает поэлементную работу с матрицей.

0
read Read 19 Авг 2014 в 06:51

1 ответ

Лучший ответ

Я не знаю, существуют ли библиотеки, которые выполняют поэлементные операции с матрицами, но вы можете легко настроить ядро ​​CUDA для выполнения этой работы. Вы можете, например, передать один элемент матрицы A каждому потоку, и они могут выполнить экспоненту и записать ответ в B. Затем вы вызываете свое ядро ​​CUDA как обычно. Взгляните на это, чтобы получить представление о как реализовать ваше ядро ​​и как его вызвать (но вместо умножения двух векторов, как в gpuMM, вы бы сделали экспоненту).

РЕДАКТИРОВАТЬ : похоже, что вы можете выполнять поэлементные операции, используя Thrust и набор макросов Newton, как показано в этом SO question.

2
Community 23 Май 2017 в 13:33