эффективный способ организации файлов cuda: .cpp .h .cu .cuh .curnel файлы

Что является наиболее простым для понимания / эффективной и т. Д. Организацией кода для cuda. После некоторого исследования я обнаружил, что объявления функций cuda должны быть в файле .cuh, а реализации находятся в файле .cu, а реализации функций ядра — в файлах .curnel. Другие c ++ вещи в файлах .cpp и .h обычно. Недавно я отправил вопрос Файл Visual Studio .cu показывает синтаксическую ошибку, но успешно компилируется . Правильна ли эта организация? где .cpp вызывает .cu и вызывает функцию ядра, которая в .curnel.

7

Решение

  • час, CPP, с, HPP, вкл — файлы, которые не содержат код CUDA C (например, __устройство___ и другие ключевые слова, вызовы ядра и т. д.) и не делают никаких вызовов времени выполнения cuda (функции cuda …). Из этих файлов прекрасно вызывать функции API-интерфейса драйвера CUDA (cu …). Обратите внимание, что эти файлы можно компилировать с помощью компиляторов, отличных от NVCC.
  • у.е. — CUDA C исходные файлы. Эти файлы передаются компилятору NVCC для компиляции в связываемые объекты (хост / устройство).
  • CuH, cuinc — файлы, которые включены в .cu файлы. Эти файлы могут иметь ключевые слова CUDA C и / или вызывать функции времени выполнения CUDA.
6

Другие решения

В качестве примера предположим, что имеется код FDTD на основе графического процессора. Я обычно делаю следующее (Visual Studio 2010).

  • файл main.cpp, включая передачу памяти CPU-GPU;
  • FDTD.cu, включая extern "C" void E_update(...) функция, которая содержит ядро <<< >>> вызов;
  • файл main.h, включая extern "C" void E_update(...) прототип;
  • FDTD.cuh, включая __global__ void E_update_kernel(...) функция.
1

По вопросам рекламы [email protected]