Нахождение максимума и минимума с CUBLAS
У меня возникают проблемы с пониманием того, почему моя функция, которая находит максимум и минимум в диапазоне двойных чисел с использованием CUBLAS, не работает должным образом.
Код выглядит следующим образом:
<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>
Где значения - это значения для поиска. Max_idx и min_idx - это индекс найденных чисел в значениях. Результаты CUBLAS-вызовов кажутся довольно случайными и выводят неверные индексы.
Кто-нибудь с чертовски хорошим ответом на мою проблему? Я немного грустный в данный момент :(