Запишите результат в текстовый файл в CUDA / Optix
Я хотел знать, возможно ли написать текстовый файл переменных, рассчитанных в моей программе Cuda / Optix. Это переменные находятся в моих.cu файлах и поэтому не могут быть записаны процессором.
6 ответов
Насколько я знаю, невозможно выполнить файловый ввод-вывод из ядра CUDA. Вам нужно будет использовать cudaMemcpy
и скопируйте данные обратно в память хоста, и оттуда вы можете записать значения в файл.
В optix вы можете перенести все свои данные обратно на хост, используя буфер, после того как они загружены обратно в память HOST, вы можете легко конвертировать данные в формат csv или txt
У меня нет опыта работы с Optix, но, насколько я знаю, нет возможности записать в файл из CUDA. Вы должны загрузить свои значения на хост, чтобы сохранить их в файл.
Ты можешь использовать cudaMemcpy( dstPointer, srdPointer, size, cudaMemcpyDeviceToHost);
скопировать данные с устройства (GPU) на хост (CPU). Смотрите: Библиотека NVIDIA CUDA: cudaMemcpy Знайте, что ваш dstPointer
должен быть достаточно большим, чтобы хранить данные!
Как показывают предыдущие ответы, невозможно записать данные в файл через ядра CUDA. Если ваш код включает в себя несколько циклов, вы можете подумать, как медленно ваша программа будет передавать и записывать данные в каждом цикле; Если это так, вы должны выполнить передачу данных после заданного числа циклов. Другими словами, записывайте файл частями из нескольких циклов, а не в каждый отдельный цикл.
Я не знаю, как открыть файловый дескриптор и записать в него прямо с устройства; однако я использовалrtPrintf
1 в OptiX, чтобы перенаправить вывод программы в файл.rtPrintf
позволит вам распечатать содержимое переменных и т. д., и если вы поставите перед печатью ключевое слово, вы можете grep
для конкретных предметов легко. Эта стратегия - хороший способ отладки кода OptiX на ранней стадии и даже до некоторой степени отслеживания того, что он делает.
Нет, вы не можете открыть файл в коде вашего устройства; вы можете выполнять printf() в консоли для отладки (неважно, в optix или cuda), но не можете открывать или записывать файлы.
Вероятно, самым простым решением является создание управляемой памяти CUDA (cudaMallocManaged()), которую можно читать и записывать как на хосте, так и на устройстве; запишите свои значения переменных в это на устройстве, затем откройте файл и выгрузите их на хост. Это также работает как на cuda, так и на Optix.