cudaMemset 无法获取参数
cudaMemset fail to obtain an argument
我正在 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。这可能不是什么你想到了。
我正在 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。这可能不是什么你想到了。