C++ 连接端口C+的简易方法+;使用std::array来使用CUDA推力的代码?

C++ 连接端口C+的简易方法+;使用std::array来使用CUDA推力的代码?,c++,cuda,C++,Cuda,我使用std::array的现有C++11代码的格式如下: #include <array> const unsigned int arraySize = 1024; #define ARRAY_DEF std::array<int, arraySize> int main() { ARRAY_DEF x; x.fill(1); return 0; } #包括 常量unsigned int arraySize=1024; #定义数组_DEF

我使用std::array的现有C++11代码的格式如下:

#include <array>
const unsigned int arraySize = 1024;
#define ARRAY_DEF std::array<int, arraySize>

int main()
{
    ARRAY_DEF x;
    x.fill(1);

    return 0;
}
#包括
常量unsigned int arraySize=1024;
#定义数组_DEF std::ARRAY
int main()
{
数组_DEF x;
x、 填充(1);
返回0;
}
在整个代码中,我使用ARRAY_DEF以便于阅读,并使其更易于维护。没问题

现在我想把代码移植到GPU上的CUDA中运行。问题,因为std::array无法在设备上运行

我认为我需要利用
推力::设备_向量
,但我看不到一种简单的方法来声明#define中静态大小的向量。(我只看到在构造函数中的变量名之后执行此操作,这就破坏了使用#define的意义。)

是否有另一种方法在#define中使用静态大小声明向量


或者,我是否可以在CUDA库中使用另一个类来模拟在设备上运行的std::array?

谢谢大家!遗憾的是,这些答案都不符合我的需要。 我亲自动手创建了一个类,它模仿std::array(大部分),可以在设备/内核函数中运行,主要是一个查找/替换来编辑。(好的,我需要替换其他STL函数,但这是另一个问题。)


希望它能帮助其他人。

以您的方式使用预处理器符号可能是我见过的最糟糕的想法。定义一个类型。这就是为什么它们被添加到语言中。我们不是生活在20世纪60年代……不,在推力方面没有一个函数等价于std::array,也没有一种方法可以用向量进行静态声明。大小是一个构造函数参数,构造函数在运行时执行。这就是C++对象模型的工作原理以及为什么<>代码> STD::数组< /代码>最初被发明。您可能需要使用实际需要的特性编写自己的实现,或者使用静态大小的C样式数组。我认为typedef更好。但是,同样的问题也会出现。关于这一点:
是否有另一种方法可以在#define
中声明向量(静态大小)以用于主机代码使用,您可以这样做:
#define INTVEC_DEF(x)推力::设备_vector x(arraySize)
。使用推力,我们通常不会直接在设备代码中使用这样的定义。在任何情况下,我建议阅读,例如推力的典型/基本用法。