gpt4 book ai didi

cudaMemset 无法获取参数

转载 作者:行者123 更新时间:2023-11-30 15:02:26 29 4
gpt4 key购买 nike

我正在处理 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);

程序编译但失败:

We are unable to execute your code. Did you set the grid and/or block size correctly?

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

有人可以帮助我吗?

最佳答案

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

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

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

用常量字节值填充 devPtr 指向的内存区域的前 count 个字节。

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

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

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

关于cudaMemset 无法获取参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41073229/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com