首页 > 解决方案 > 如何在 CUDA/C++ 中使用 atomicMin()

问题描述

我尝试使用atomicMin线程共享内存在 CUDA/C++ 中使用函数,无论我输入什么数组,输出始终为“0”。任何人都可以帮我解决这个问题,如果语法或指针使用有一些错误,或者我使用的函数不正确。这是代码:

__global__ void npd(int *a, int *g)         
{   
    int index = threadIdx.x;

    __shared__ int d[N];

    d[threadIdx.x]=a[index];        

    __syncthreads();        

    int dd;
    int inn;
    int u;

    if( 0==threadIdx.x )
    { 
        for( int u = 0; u<16; u++ )
        {
            atomicMin( g, d ) ;     
        }
    }
}

标签: c++cudagpushared-memoryatomic

解决方案


正如文档所描述的,函数的第二个输入应该是一个值,而不是一个指针。

您没有对您的功能所做的任何描述,所以我无法帮助修复它,但是类似

atomicMin( g, d[0]) ;

将编译,可能不会做你在这里的目标。

注意:始终发布完整的可编译示例。并尝试整理您的代码。有一个双重定义,u你声明变量index然后忽略它。


推荐阅读