У меня есть разреженная матричная структура, которую я использую совместно с CUBLAS для реализации класса линейных решателей. Я ожидаю, что размеры разреженных матриц, которые я буду решать, будут довольно большими (порядка 10^7 на 10^7). Я также предвижу, что решатель нужно будет использовать много раз и что часть этой матрицы потребуется обновлять несколько раз (между вычислительными решениями).Как изменить подматрицу разреженной матрицы на устройстве CUDA
Копирование всей матричной матрицы из системной памяти в память устройства может стать довольно шероховатостью бутылки, поскольку только часть матричных записей когда-либо понадобится изменить в данный момент времени.
Я хотел бы иметь возможность обновить только конкретный поднабор/подматрицу, а не переустанавливать всю матричную структуру из системной памяти в память устройства каждый раз, когда мне нужно изменить матрица.
Матрица структура данных будет находиться на устройстве CUDA в массивах: d_col, d_row и d_val
На стороне системы я бы соответствующей массивы I, J, и вал.
В идеале я хотел бы только изменить подмножества d_val, соответствующие значениям в системном массиве val, которые были изменены.
Обратите внимание, что я не ожидаю, что какие-либо записи будут добавлены или удалены из матрицы, но только существующие записи изменятся в значении.
Наивно я бы подумал, что для реализации этого, у меня будет целочисленный массив или вектор на стороне хоста, например. updateInds, который будет отслеживать индексы записей в val, которые изменились, но я не уверен, как эффективно сообщить устройству CUDA обновить соответствующие значения d_val.
По существу: как изменить записи в боковом массиве устройств CUDA (d_val) при указании updateInds [1], updateInds [2], ..., updateInds [n] на новый набор значений val [ updatInds [1]], val [updateInds [2]], ..., val [updateInds [3]], не возвращая весь массив валов из системной памяти в массив памяти устройства CUDA d_val?
У вас есть конкретный конкретный вопрос программирования CUDA? – talonmies
Это сводится к следующему: как изменить записи в массиве сторон устройства CUDA (d_val) при указании updateInds [1], updateInds [2], ..., updateInds [n] на новый набор значений val [updatInds [1]], val [updateInds [2]], ..., val [updateInds [3], не возвращая весь массив валов из системной памяти в массив памяти устройства CUDA d_val? – wmsmith
Вы имеете в виду код хоста или код устройства? И ваша матрица действительно в формате COO? – talonmies