Mit CUBLAS das Maximum und das Minimum finden

Ich habe Probleme zu verstehen, warum meine Funktion, die mit CUBLAS Maximum und Minimum in einem Bereich von Doubles findet, nicht richtig funktioniert.

Der Code lautet wie folgt:

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

Wobei Werte die Werte sind, in denen gesucht werden soll. Der max_idx und der min_idx sind der Index der gefundenen Zahlen in Werten. Die Ergebnisse der CUBLAS-Aufrufe erscheinen eher zufällig und geben falsche Indizes aus.

Hat jemand eine gute Antwort auf mein Problem? Ich bin im Moment ein bisschen traurig :(

Antworten auf die Frage(2)

Ihre Antwort auf die Frage