Учитывая какой-то проект, который должен иметь дополнительную сборку CUDA, как можно разделить код между двумя вариантами проекта, чтобы максимизировать повторное использование кода?Обмен кодами между GCC и NVCC
Например, в проекте, где гарантирована CUDA сборка, можно разделить код между CPU и GPU частями проекта следующим образом: -
//shared_functions.h
float computeEta(float lambda, int t);
//shared_functions.cu
__host__ __device__
float computeEtaDevice(float lambda, int t){
return (1.0/(lambda*(float)t));
}
float computeEta(float lambda, int t){
return computeEtaDevice(lambda, t);
}
//test.cpp
#include "shared_functions.h"
...
computeEta(lambda, t);
Однако, не ясно, как это может быть достигнуто в отсутствие CUDA во время компиляции.
Я хотел бы дать ответ в этом направлении, когда вы предоставили ваши. Позвольте мне добавить следующее: стандартным способом во многих библиотеках является определение макроса типа '#define CUDA_HOST_DEVICE __host__ __device__', если он скомпилирован с помощью' nvcc', и пустой define, если скомпилирован с компилятором хоста. – havogt
@havogt Отличная идея. Благодарю. Обновленный ответ, чтобы отразить его. –