2013-03-28 3 views
0

У меня есть кусок кода, который должен запускаться как на процессоре, так и на CUDA-GPU, а также на другом фрагменте кода, работающем только на процессоре. #define ENABLE_CUDA - это то, что я 'включил', чтобы включить код CUDA во всем приложении. Вот что мой код выглядит ....#ifdef/#ifndef и #endif

# define ENABEL_CUDA is the preprocessor directive to turn ON/OFF CUDA code. 

CPU and GPU code --This piece of code has to be executed irrespective of whether CUDA is ON/OFF. 

standalone CPU code alone -- This piece of code has to be executed only if CUDA is OFF. 

Мое решение:

#ifdef ENABLE_CUDA 

    CPU AND GPU code 
# else 
    CPU AND GPU code 
    standalone CPU code 
# endif 

Но это предполагает дублирование кода (CPU и код GPU) в обоих IfDef и еще блоков, я хотел бы избежать этого.

Как это сделать? Что нужно сделать, чтобы избежать дублирования кода? Любые указатели относительно этого оценили ...

+5

Почему вы не можете просто поставить '# ifdef' на« автономный код процессора »? –

ответ

1

Почему бы не просто использовать:

CPU AND GPU code 

#ifndef ENABLE_CUDA 
    standalone CPU code 
# endif 
5
#ifdef ENABLE_CUDA 

    CPU AND GPU code 
# else 
    CPU AND GPU code 
    standalone CPU code 
# endif 

эквивалентно:

CPU AND GPU code 
# ifndef ENABLE_CUDA 
    standalone CPU code 
# endif 

В общем случае, если код является общим для обоих if и else вы можете переместить его из обоих.

1

Кроме того, что другие уже сказали,

#ifndef ENABLE_CUDA 
# define __device__ 
#endif 

займет у вас долгий путь написания функций, которые работают на устройстве, если CUDA присутствует или на хосте, если нет, то без дублирования кода.

Смежные вопросы