Я изучаю CUDA и пишу программу, чтобы найти минимальное значение двухмерного массива. Определена память для работы функции графического процессора. Называется функция. Но в результате появляется мусор. Предоставляем код с поиском процессора и графического процессора. Уже понятия не имею, что не так, обратитесь за помощью
#include "cuda_runtime.h"
#include "device_launch_parameters.h"
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
using namespace std;
int call(int rows, int cols, int &min, int **arr) {
min = arr[0][0];
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
if (min > arr[i][j]) { min = arr[i][j]; }
}
}
return min;
}
__global__ void call_gpu(int rows, int cols, int *mini, int **arr) { //main function
int idx = blockIdx.x*blockDim.x + threadIdx.x;
int idy = blockIdx.y*blockDim.y + threadIdx.y;
int temp;
if ((idx < rows) && (idy < cols)) {
temp = arr[idx][idy];
for (int i = 0; i < rows; i++) {
for (int y = 0; y < cols; y++) {
if (temp > arr[idx][idy]) {
temp = arr[idx][idy];
*mini = arr[idx][idy];
}
}
}
}
}
int main()
{
int rows, cols, min, result;
printf("Enter the height/width of the matrix\n");
scanf_s("%d", &rows);
scanf_s("%d", &cols);
int **arr = new int*[rows];
for (int i = 0; i < rows; i++) {
arr[i] = new int[cols];
}
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
arr[i][j] = rand();
}
}
int *mini;
cudaMalloc((int**)&mini, sizeof(int));
int *marr;
size_t pitcharr;
cudaMallocPitch(&marr, &pitcharr, cols * sizeof(int), rows);
cudaMemcpy2D(marr, pitcharr, arr, cols * sizeof(int), cols * sizeof(int), rows, cudaMemcpyHostToDevice);
call_gpu << <1, 1 >> > (rows, cols, mini, arr);
cudaDeviceSynchronize();
cudaMemcpy(&result, mini, sizeof(int), cudaMemcpyDeviceToHost);
printf("Result from GPU = %d\n", result);
/*for (int i = 0; i < rows; i++) { //outup on display
for (int j = 0; j < cols; j++) {
printf("%d ",arr[i][j]);
}
printf("\n");
}*/
call(rows, cols, min, arr); //CPU function
printf("min = %d\n", min);
system("pause");
cudaFree(marr);
cudaFree(mini);
delete[] arr;
return 0;
}
Как исправить, укажите ошибки. Было бы неплохо конкретно посмотреть, в чем я был не прав