CUDA编译错误:指令'{atom,red} .shared'需要.target sm_12或更高版本

时间:2014-07-31 05:15:15

标签: c++ cuda

我试图通过利用CUDA提供的Atomic操作从浮点值集合中获取最小值。 。由于内存限制,我无法使用缩减。但是,我收到错误消息:指令'{atom,red} .shared'需要.target sm_12或更高当我尝试使用作为“SharedMem”争论传递的__Shared__变量编译下面的代码时。

我有一个9400m的GPU,其计算能力为1.1。

__device__ static float* atomicMin(float* SharedMem, float value, float *old)
{
    old[0] = *SharedMem;
    float assumed;
    if (old[0] <= value)
    {
        return old;
    }

    do
    {
        assumed = old[0];
        old[0] = ::atomicCAS((unsigned int*)SharedMem, __float_as_int(assumed), __float_as_int(value));
    } while (old[0] != assumed);

    return old;
}

例如,调用下面的函数“getMin_Kernel”:

__shared__ __device__ float LowestDistance;
__global__ void getMin_Kernel(float* AllFloats, int* NumberOfFloats)
{
    int j = (blockDim.x * blockIdx.x + threadIdx.x);
    if (j < NumberOfFloats[0])
    {
        float myFloat;
        myFloat=*(atomicMin(&LowestDistance, NumberOfFloats[0], &myFloat));
    }

}

但是,如果我传递一个非共享变量,它编译没有问题,但是,我得到一个运行时错误。我猜测发生运行时错误,因为atomicCAS需要全局或共享变量。任何人都可以帮助解决编译错误。

感谢。

1 个答案:

答案 0 :(得分:1)

此表http://docs.nvidia.com/cuda/cuda-c-programming-guide/index.html#features-and-technical-specifications__feature-support-per-compute-capability提供了各种计算功能及其匹配功能支持的完整说明。

谢谢大家,我没有注意到文档中的额外要点,说明了atomicCas和共享内存变量的条件。我还在学习CUDA的绳索。

感谢。