Znalezienie maksimum i minimum z CUBLAS
Mam problemy z zrozumieniem, dlaczego moja funkcja, która znajduje maksimum i minimum w szeregu podwójnych urządzeń CUBLAS, nie działa prawidłowo.
Kod jest następujący:
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);
}
Gdzie wartości to wartości do wyszukiwania. Wartości max_idx i min_idx to indeks znalezionych liczb w wartościach. Wyniki wywołań CUBLAS wydają się raczej losowe i wyświetlają błędne indeksy.
Ktoś z dobrą odpowiedzią na mój problem? Jestem teraz trochę smutna :(