Encontrando máximo y mínimo con CUBLAS
Tengo problemas para comprender por qué mi función que encuentra el máximo y el mínimo en un rango de dobles usando CUBLAS no funciona correctamente.
El código es el siguiente:
<code>void findMaxAndMinGPU(double* values, int* max_idx, int* min_idx, int n) { double* d_values; cublasHandle_t handle; cublasStatus_t stat; safecall( cudaMalloc((void**) &d_values, sizeof(double) * n), "cudaMalloc (d_values) in findMaxAndMinGPU"); safecall( cudaMemcpy(d_values, values, sizeof(double) * n, cudaMemcpyHostToDevice), "cudaMemcpy (h_values > d_values) in findMaxAndMinGPU"); cublasCreate(&handle); stat = cublasIdamax(handle, n, d_values, sizeof(double), max_idx); if (stat != CUBLAS_STATUS_SUCCESS) printf("Max failed\n"); stat = cublasIdamin(handle, n, d_values, sizeof(double), min_idx); if (stat != CUBLAS_STATUS_SUCCESS) printf("min failed\n"); cudaFree(d_values); cublasDestroy(handle); } </code>
Donde valores son los valores para buscar dentro. Max_idx y min_idx son el índice de los números encontrados en los valores. Los resultados de las llamadas a CUBLAS parecen más bien aleatorios y generan índices erróneos.
¿Alguien con una buena respuesta para mi problema? Estoy un poco triste en este momento :(