我正在尝试静态初始化 GPU 内存中的只读std::map
变量,如下所示:
// EXAMPLE 1:
using namespace std;
// first attempt: __device__ extern const
__device__ extern const map<char, const char*> BYTES_TO_WORDS = {
{0xB0, "zero"}, {0xB1, "one"}, {0xB2, "two"}, {0xB3, "three"}};
// second attempt: __const__ static
enum class Color{RED, GREEN, BLUE};
enum class Device{PC, TABLET, PHONE};
__constant__ static map<Color, Device> COLORS_TO_THINGS = {
{Color::RED,Device::PC},{Color::GREEN,Device::TABLET},{Color::BLUE,Device::PHONE}};
但我收到以下错误:
dynamic initialization is not supported for __device__, __constant__ and __shared__ variables
我很困惑,因为当我尝试这样的事情时我没有收到这个错误:
// EXAMPLE 2:
__device__ extern int PLAIN_ARRAY[] = {1, 2, 3, 4, 5};
我只是希望能够创建和初始化只读 std::map
并从 CPU 和 GPU 代码访问它。如果你能告诉我如何正确地做到这一点,我将不胜感激。
编辑: 有人指出设备代码不支持标准库。但我得到的错误似乎表明这是一个内存管理问题。