我正在尝试在CUDA中使用最小值,最大值,总和和平均值实现并行减少。
这是我目前的主要代码段。
GC.Collect();
这是我的SUM CUDA内核:
int main()
{
const auto count = 8;
const int size = count * sizeof(int);
int h[] = {13, 27, 15, 14, 33, 2, 24, 6};
int* d;
int choice = 0;
do{
cout <<"\n ---MENU--- \n";
cout <<"1. Find Sum of Numbers in Array\n";
cout <<"2. Find Max of Array\n";
cout <<"3. Find Min of Array\n";
cout <<"4. Find Average of Array\n";
cout <<"5. Exit\n";
cout <<"Enter your Choice : ";
cin >> choice;
switch(choice){
case 1:
cudaMalloc(&d, size);
cudaMemcpy(d, h, size, cudaMemcpyHostToDevice);
sum <<<1, count / 2 >>>(d);
int result;
cudaMemcpy(&result, d, sizeof(int), cudaMemcpyDeviceToHost);
cout << "Sum is " << result << endl;
getchar();
cudaFree(d);
delete[] h;
break;
case 5:
break;
default:
cout<<"Wrong Input!! Try Again!";
break;
}
}while(choice != 5);
return 0;
}
在运行程序时,我将其显示为OUTPUT:
如何解决此问题?请帮我。
答案 0 :(得分:2)
不要忽略编译器警告。您正在非动态分配的数组上调用delete[]
。这是未定义的行为,可能是导致核心转储的原因。
您无需为堆栈中的数组调用delete[]
。