К сожалению, единственным способом было бы написать собственное ядро, так как не существует «автоматических» способов конвертирования не пакетного ядра в пакетное (запись хорошо работающей пакетной версии ядра сама по себе является научная статья, которую можно легко принять на известную конференцию HPC).
Вы уверены, что вам действительно нужно обратное? Операции с обратным обычно могут быть выражены как решение линейной системы, для которой вы могли бы использовать cusolverDnPotrsBatched
.
Если вам действительно нужно обратное, единственный способ, который я могу придумать без необходимости написания кода CUDA, - это вызвать cusolverDnPotrsBatched
с правыми сторонами Barray
, установленными в пакет идентичных матриц. Таким образом, решения Xi систем Ai * Xi = I
(которые перезаписывают Barray
) являются инверсиями матрицы матрицы Aarray
. Он требует дополнительной памяти и не так эффективен, как запись ядра для инверсии, но должен быть быстрее, чем делать это последовательно.
Другим вариантом было бы забыть, что матрицы симметричны, и рассматривать их как общие матрицы. Затем вы можете использовать библиотеку MAGMA и ее функцию magma_dgetri_outoflace_batched()
, чтобы инвертировать матрицы (опять же не на месте). К сожалению, MAGMA также не поддерживает пакетную версию симметричной инверсии.