Короткий ответ заключается в том, что здесь нет решения этой проблемы.
Все, что обычно работает на процессоре, должно быть адаптировано для среды CUDA без каких-либо гарантий, что это возможно. Функции хоста - это просто другое имя в CUDA для обычных функций C. То есть, функции, выполняемые на архитектуре центрального процессора Von Neumann, как и все C/C++, до сих пор были на ПК. Графические процессоры дают вам огромное количество вычислительной мощности, но стоимость в том, что она не так гибка или совместима. Самое главное, что функции работают без возможности доступа к основной памяти, а доступная им память ограничена.
Если вы пытаетесь получить генератор случайных чисел, вам повезло, учитывая, что Nvidia столкнулась с проблемой специально внедрить высокоэффективный Mersenne Twister, который может поддерживать до 256 потоков на SMP. Он может быть вызван внутри функции устройства, описанной в более раннем сообщении шахты here. Если кто-нибудь найдет лучшую ссылку, описывающую эту функциональность, удалите мою и замените соответствующий текст здесь вместе со ссылкой.
Одна вещь, которую я постоянно удивляю, заключается в том, сколько программистов, похоже, не знают, как стандартизованные генераторы псевдослучайных чисел высокого качества. «Роллинг свой» - это действительно не очень хорошая идея, учитывая, сколько из произведений искусства псевдослучайных чисел. Проверка генератора в качестве обеспечения благоугодно непредсказуемых номеров занимает много работы и научных талантов ...
Насколько плохо ухудшается производительность при вызове функции хоста вместо использования встроенного cuda? – Mattia
Означает ли это, что хост и устройство будут выполнять только свои собственные копии функций? – avgvstvs