cudaMemset无法获得参数

时间:2016-12-10 07:29:38

标签: c memory cuda gpu

我正在a quiz on Udacity工作并遇到一个非常奇怪的问题:

#include "reference_calc.cpp"
#include "utils.h"

void your_histogram_and_prefixsum(const float* const d_logLuminance,
                                  unsigned int* const d_cdf,
                                  float &min_logLum,
                                  float &max_logLum,
                                  const size_t numRows,
                                  const size_t numCols,
                                  const size_t numBins)
{
    float* an_array;
    cudaMalloc(&an_array, sizeof(float) * 1);

    cudaMemset(an_array, 0, 1);
    //cudaMemset(an_array, d_logLuminance[0], 1);

}

该程序除了为数组分配(cudaMalloc)一些内存并将其(cudaMemset)的第一个子索引设置为0之外什么都不做。

直到我改变

才顺利
cudaMemset(an_array, 0, 1);

cudaMemset(an_array, d_logLuminance[0], 1);

程序编译但失败:

  

我们无法执行您的代码。您是否正确设置了网格和/或块大小?

我不知道为什么我无法将d_logLuminance[0]传递给cudaMemset

有人能帮助我吗?

1 个答案:

答案 0 :(得分:1)

cudaMemset中的值是字节值,而不是字值,即。与C标准库memset中的相同。

正如您所发现的那样,cudaMemset的工作方式与C标准库memset类似。引自文档:

cudaError_t cudaMemset  (   void *      devPtr,
                            int         value,
                            size_t      count    
                        ) 

使用常量字节值填充devPtr指向的内存区域的第一个计数字节。

所以value是一个字节值。如果您执行以下操作:

int *devPtr;
cudaMalloc((void **)&devPtr,number_bytes);
const int value = 5;
cudaMemset(devPtr,value,number_bytes);

你要求发生的是devPtr的每个字节将被设置为5.如果devPtr是一个整数数组,结果将是每个整数字的值为84215045.这可能不是你所拥有的记住。