当数组> 1769472时,CUDA 不返回值
CUDA not returning values when Array > 1769472
am试图计算平均256组8192字节长的数据。我有一个内核,它可以处理216个数据集,但可以处理更多的数据集,并且内核对每个平均值返回0。我使用一个非常基本的归约系统来计算平均值。
显卡:GTX 780 Ti
这是我的代码
__global__ void Average(double *Input, int Length, int Sets, double *Average, int N) {
unsigned int Pos = (blockDim.x * blockIdx.x) + threadIdx.x;
unsigned int Offset;
int i = Length / N;
if (Pos < i * Sets) {
Offset = ((Pos / i) * Length) + (Pos % i);
Input[Offset] += Input[Offset + i];
}
__syncthreads();
if (N == Length) {
Average[Pos] = Input[Pos*Length] / Length;
}
}
using namespace std;
int main()
{
const int Length = 8192;
const int Sets =256;
const int Width = Length*Sets;
double *GPU_Average, *GPU_Data;
cudaMalloc((void**)&GPU_Average, CameraWidth*sizeof(double)*Sets);
cudaMalloc((void**)&GPU_Data, CameraWidth*sizeof(double)*Width);
double CPU_Data[Width];
double CPU_Average[Sets];
for (int i = 0; i < Width; i++) {
CPU_Data[i] = i;
}
cudaMemcpy(GPU_Data, CPU_Data, sizeof(double)*Width, cudaMemcpyHostToDevice);
int N = 2;
int Total, Blocks, Threads;
while (N < Length+1) {
Total = (Sets*Length) / N;
if (Total > 1024) {
Threads = 1024;
Blocks = Total / Threads;
}
else {
Threads = Total;
Blocks = 1;
}
Average << < Blocks, Threads>> >(GPU_Data, Length, Sets, GPU_Average, N);
N *= 2;
}
cudaMemcpy(CPU_Average, (GPU_Average), sizeof(double)*Sets, cudaMemcpyDeviceToHost);
return 0;
}
感谢在这件事上的任何帮助。
我没有意识到在我的实际代码中(不是上面的代码)我写了
cudaMalloc((void**)&GPU_Data, Width*sizeof(double)*Width);
而不是
cudaMalloc((void**)&GPU_Data, sizeof(double)*Width);
这分配了太多内存并导致错误。
相关文章:
- 从python中调用C++函数并获取返回值
- 为什么模板类中的对象不能返回值
- 返回值优化:显式移动还是隐式
- lock_guard是否保护返回值
- 调用CreateProcess()并获取字符串的返回值
- 如何使 windows 命令提示符在C++可执行文件上显示返回值?
- 编译器警告:执行到达值返回函数的末尾而不返回值
- 查找 GCD:并非所有控制路径都返回值
- 在 Arduino 上使用 sscanf 会导致与 const char * 不匹配,并且返回值始终相同,尽管输入值不同
- 将返回值存储在函数指针数组的指针中是如何工作的?
- 如何从 std::thread 返回值
- 将返回值从 exe 传递到 bat,并将其传递给 C# 中的进程
- 方法错误"not all control paths return a value"和方法不返回值
- 如何读取 C++ SAFEARRAY**,该 SAFEARRAY** 是 COM 互操作的结果,其中 C# 返回值为
- 对fread的返回值感到困惑
- 程序不向函数返回值
- 如何在另一个函数中使用返回值作为参数?
- 如何使用 uint64_t 键类型从 std::map<int, std::string> 返回值?
- CUDA返回值错误35的含义是什么
- 当数组> 1769472时,CUDA 不返回值