海湾合作委员会和NVCC之间的代码共享

Code sharing between GCC and NVCC

本文关键字:之间 代码 共享 NVCC 委员会      更新时间:2023-10-16

给定某个项目要有一个可选的 CUDA 构建,如何在两个项目变体之间共享代码,以便最大限度地重用代码?

例如,在保证 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 的情况下如何实现这一点。

因此,经过一些实验,似乎与此类似的东西可以解决问题(在浏览器中编写的示例):-

//shared.h
#if defined(__CUDACC__) && defined(__CUDA_ARCH__)
    #define __SHARED_CODE__ __device__
#else
    #define __SHARED_CODE__ 
#endif
__SHARED_CODE__
inline float func1(float a, float b){
    return a + b;
}
相关文章: