海湾合作委员会和NVCC之间的代码共享
Code sharing between GCC and NVCC
给定某个项目要有一个可选的 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;
}
相关文章:
- 在c代码之间共享数据的最佳方式
- 我是C++编程的新手,这些代码之间有什么区别,我应该使用哪一个
- 无法理解代码背后的逻辑,这是在两个给定数字之间生成素数的优化问题
- 两个代码段之间有什么区别?
- 当我使用按引用返回时,我不知道这些代码之间的区别
- 如何在括号与代码之间添加空格以进行C++?
- 为什么这个C++程序在代码::块和在线 IDE 之间返回不同的结果?
- 如果我在下面的代码中使用 list 而不是 vector,为什么在我尝试在迭代器之间执行减法的行中编译失败?
- 在两个派生类之间执行专用代码
- 在Emscripten和Qt之间共享OpenGL代码
- 这两个代码之间的差异(为什么我的数组也有额外的空间,即使我限制了它)
- 无法将Android WebView渲染到C 和Java代码之间共享的外部纹理中
- 使用运行时参数与编译时参数在类之间共享代码
- 任何可以在单个 CPU 指令中在 0 和 1 之间翻转位/整数/布尔值的可能代码
- 为什么两个相同的代码给出不同的输出,而它们之间的唯一区别是不同的变量名称和写作样式
- 不理解连续数字之间的空格代码
- 这些代码之间的区别在哪里?输出不应该是一样的吗?
- Objective-C源代码和clang -rewrite-objc C++代码之间有什么关系?
- 框架代码和普通代码之间的区别
- 如何避免语法相同的常量和非常量函数之间代码重复,这些函数在语义上不相同