В настоящее время я участвую в разработке крупного научного вычислительного проекта и изучаю возможность аппаратного ускорения с помощью графических процессоров в качестве альтернативы подходу MPI/кластера. Мы находимся в основном в ситуации, связанной с памятью, когда слишком много данных нужно поместить в память, чтобы поместиться на GPU. В связи с этим у меня два вопроса:
1) В книгах, которые я читал, говорится, что доступ к памяти на хосте с помощью указателя на устройстве незаконен (по понятным причинам). Вместо этого нужно скопировать память из памяти хоста в память устройства, затем выполнить вычисления, а затем скопировать обратно. Мой вопрос заключается в том, есть ли обходной путь для этого - есть ли любой способ прочитать значение в системной ОЗУ из графического процессора?
2) В более общем плане, какие существуют алгоритмы/решения для оптимизации передачи данных между ЦП и ГП во время таких вычислений с привязкой к памяти?
Спасибо за вашу помощь в этом! Я с энтузиазмом отношусь к переходу на CUDA просто потому, что распараллеливание гораздо более интуитивно понятно!