Совместное использование базовых данных между несколькими векторами cuSPARSE (API CUDA 12) ⇐ C++
-
Гость
Совместное использование базовых данных между несколькими векторами cuSPARSE (API CUDA 12)
Библиотека разреженной линейной алгебры NVIDIA CUDA, cuSPARSE, имеет новый API, который использует cusparseSpSV_solve для решения системы уравнений ([A][x]= ), где [A] — треугольная матрица. В старом API была функция под названием cusparseDcsrsv_solve (больше не поддерживается в CUDA 12), которая имела простые массивы, выделяемые устройством для векторных входных данных. Новая функция cusparseDcsrsv_solve использует объекты CUDA для организации данных.
Это фрагмент из новейшей документации CUDA 12.3 cuSPARSE:
cusparseSpSV_solve(дескриптор cusparseHandle_t, cusparseOperation_t опА, константная пустота* альфа, cusparseConstSpMatDescr_t matA, // поддерживается неконстантный дескриптор cusparseConstDnVecDescr_t vecX, // поддерживается неконстантный дескриптор cusparseDnVecDescr_t vecY, cudaDataType ComputeType, cusparseSpSVAlg_t alg, cusparseSpSVDescr_t spsvDescr) Выше показаны параметры для cusparseSpSV_solve. Векторы больше не полагаются на простые массивы данных (такие как double*), а теперь используют cusparseConstDnVecDescr_t для правого вектора и непостоянный cusparseDnVecDescr_t для вектора решения.
Если у меня есть несколько функций cusparseSpSV_solve в последовательности, как мне использовать вектор решения из первого cusparseSpSV_solve в качестве вектора правой части для второго < code>cusparseSpSV_solve и так далее...? Раньше вы просто передавали указатель от функции 1 к функции 2, но возможно ли это сделать с помощью нового API? Есть ли какая-либо опасность в назначении данных, выделенных устройством, нескольким объектам cusparseDnVecDescr_t, при этом достигается тот же эффект, что и при передаче указателей из одной функции в другую?
Я хочу избежать создания, копирования и уничтожения новых данных! Это отнимает слишком много времени, и кажется странным, что разработчики NVIDIA изменили API в худшую сторону. Итак, я ищу простой способ обмена данными между несколькими функциями cusparseSpSV_solve.
Библиотека разреженной линейной алгебры NVIDIA CUDA, cuSPARSE, имеет новый API, который использует cusparseSpSV_solve для решения системы уравнений ([A][x]= ), где [A] — треугольная матрица. В старом API была функция под названием cusparseDcsrsv_solve (больше не поддерживается в CUDA 12), которая имела простые массивы, выделяемые устройством для векторных входных данных. Новая функция cusparseDcsrsv_solve использует объекты CUDA для организации данных.
Это фрагмент из новейшей документации CUDA 12.3 cuSPARSE:
cusparseSpSV_solve(дескриптор cusparseHandle_t, cusparseOperation_t опА, константная пустота* альфа, cusparseConstSpMatDescr_t matA, // поддерживается неконстантный дескриптор cusparseConstDnVecDescr_t vecX, // поддерживается неконстантный дескриптор cusparseDnVecDescr_t vecY, cudaDataType ComputeType, cusparseSpSVAlg_t alg, cusparseSpSVDescr_t spsvDescr) Выше показаны параметры для cusparseSpSV_solve. Векторы больше не полагаются на простые массивы данных (такие как double*), а теперь используют cusparseConstDnVecDescr_t для правого вектора и непостоянный cusparseDnVecDescr_t для вектора решения.
Если у меня есть несколько функций cusparseSpSV_solve в последовательности, как мне использовать вектор решения из первого cusparseSpSV_solve в качестве вектора правой части для второго < code>cusparseSpSV_solve и так далее...? Раньше вы просто передавали указатель от функции 1 к функции 2, но возможно ли это сделать с помощью нового API? Есть ли какая-либо опасность в назначении данных, выделенных устройством, нескольким объектам cusparseDnVecDescr_t, при этом достигается тот же эффект, что и при передаче указателей из одной функции в другую?
Я хочу избежать создания, копирования и уничтожения новых данных! Это отнимает слишком много времени, и кажется странным, что разработчики NVIDIA изменили API в худшую сторону. Итак, я ищу простой способ обмена данными между несколькими функциями cusparseSpSV_solve.
Мобильная версия