如何在CUDA中使用静态const成员?

时间:2015-03-18 00:46:31

标签: c++ cuda

我目前正在使用CUDA将我的光线跟踪器移植到GPU上,为了让我的脚湿透,我正在修改示例CUDA 6.5项目(添加整数数组)以使用自定义Color结构而不是整数。但是,每当我编译代码时,我都会遇到各种错误。

我的所有类的成员函数都使用__host____device__属性声明,并且我在.cu文件中包含了所有定义代码。在我的颜色结构中,我有一个Darken方法,用给定的量将给定的颜色插入到黑色中。我还有Darken函数使用的黑色静态定义。

例如,这是结构的精简版本:

// **********************
//       .hpp file
// **********************

struct Color
{
    float R;
    float G;
    float B;

    __host__ __device__ static Color Darken(const Color& c, float amount);

    static Color Black;
};

// **********************
//        .cu file
// **********************

const Color Color::Black( 1.0f, 1.0f, 1.0f );

Color Color::Darken(const Color& c, float amount)
{
    return Color( Math::Lerp( c.R, Black.R, amount ),
                  Math::Lerp( c.G, Black.G, amount ),
                  Math::Lerp( c.B, Black.B, amount )  );
}

但是,每当我编译代码时,都会收到以下错误:

error : identifier "rex::Color::Black" is undefined in device code

我尝试将__device____host____global__以及这些说明符的各种组合添加到颜色中,但CUDA编译器告诉我它们不适用。此外,在我将任何说明符添加到静态颜色后,颜色的RGB组件会出现相同的错误。

有谁知道如何在CUDA中使用静态颜色定义?

0 个答案:

没有答案