如何将数据类型声明从.cpp文件传输到 .cu 文件
How to transfer datatype declaration from .cpp file to .cu file?
我发现cuda支持使用"template"关键字作为代码,现在我想在nvcc和g ++之间链接"template"的使用。但是我似乎找不到正确的实现方法,所以我使用数据类型的字符串来取消数据类型声明。我能找到更好的方法来做到这一点吗?
//in .cpp
extern "C" void function(string T);
int main(){
function("float");
}
//in .cu
extern "C" void function(string T){
if(T == "short")
func<short>(...);
if(T == "int")
func<int>(...);
.......
}
您可以使用 C 样式的函数重载。
// in .cpp
extern "C" void func_short();
extern "C" void func_int();
extern "C" void func_float();
int main(){
func_float();
}
// in .cu
template <typename T>
void func() {
// ...
}
extern "C" void func_short() {
func<short>();
}
extern "C" void func_int() {
func<int>();
}
extern "C" void func_float() {
func<float>();
}
这比每次调用函数时比较字符串要快得多。如果需要,可以在C++端创建一个包装器模板函数,以使用法更清晰一些。
// in .cpp
extern "C" void func_short();
extern "C" void func_int();
extern "C" void func_float();
template <typename T>
void func() = delete;
template <>
void func<short>() {
func_short();
}
template <>
void func<int>() {
func_int();
}
template <>
void func<float>() {
func_float();
}
int main(){
func<float>();
}
为了使维护更容易一些,您可以定义一些宏。
// in .cpp
template <typename T>
void func() = delete;
#define DECLARE_FUNC(TYPE)
extern "C" void func_##TYPE();
template <>
void func<TYPE>() {
func_##TYPE();
}
DECLARE_FUNC(short)
DECLARE_FUNC(int)
DECLARE_FUNC(float)
int main(){
func<float>();
}
//in .cu
template <typename T>
void func() {
// ...
}
#define DECLARE_FUNC(TYPE)
extern "C" void func_##TYPE() {
func<TYPE>();
}
DECLARE_FUNC(short)
DECLARE_FUNC(int)
DECLARE_FUNC(float)
您可以将这些DECLARE_FUNC
行放在一个公共标题中,这样您只需在一个位置更新列表。如果要添加double
函数,只需将DECLARE_FUNC(double)
添加到标头即可。
// in declare_func.hpp
DECLARE_FUNC(short)
DECLARE_FUNC(int)
DECLARE_FUNC(float)
// in .cpp
template <typename T>
void func() = delete;
#define DECLARE_FUNC(TYPE)
extern "C" void func_##TYPE();
template <>
void func<TYPE>() {
func_##TYPE();
}
#include "declare_func.hpp"
int main(){
func<float>();
}
//in .cu
template <typename T>
void func() {
// ...
}
#define DECLARE_FUNC(TYPE)
extern "C" void func_##TYPE() {
func<TYPE>();
}
#include "declare_func.hpp"
我已经从易于设置变成了易于维护。您必须决定什么适合您的情况。
相关文章:
- C++文件传输的校验和算法
- 如何在Ubuntu中将内容从一个文件传输到另一个文件
- 使用 MQTT 进行文件传输
- 如何将数据类型声明从.cpp文件传输到 .cu 文件
- 如何将字符串形式的值从类文件传输到输出文件
- TCP/IP文件传输C
- 如何确保TCP文件传输完成(c++)
- 使用 Win32/WINAPI 通过内存映射文件传输数据
- 通过网络中的套接字进行文件传输时,该程序中的文件传输错误是什么
- 将内容从 C 文件传输到C++流
- 使用NS2/NS3实现P2P文件传输
- C++读取文件传输到2d数组
- 使用winsock(c++)进行文件传输
- 使用 SCP 和 C 或 C++ 进行文件传输
- 仿真过程后.cpp将变量从文件传输到 Matlab 工作区
- 文件传输C++
- 如何在C++中将文本文件传输到数组2D
- 停止并等待文件传输协议,何时停止侦听
- 使用 htonl & htons 进行 TCP 文件传输
- 用c++设计了一个文件传输协议