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 :(

Respuestas a la pregunta(2)

Su respuesta a la pregunta