Расхождения между результатами библиотеки производительности ARM EVD и собственными значениями CUDA cuSolverC++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Расхождения между результатами библиотеки производительности ARM EVD и собственными значениями CUDA cuSolver

Сообщение Anonymous »

Я сравниваю производительность cuSOLVER и ARM PL во встраиваемых системах. Хотя cuSOLVER прошел проверку, я столкнулся с некоторыми проблемами при использовании ARM PL.
Например, в следующей одноэтапной функции EVD chbevd_ результаты значительно отличаются от полученных с cuSOLVER.
Какие методы я могу использовать для отладки?

Код: Выделить всё

void ver_armpl(armpl_singlecomplex_t *cov_arm) {

float w[N]; // Array to store eigenvalues

armpl_singlecomplex_t *z = (armpl_singlecomplex_t *)malloc(N * N * sizeof(armpl_singlecomplex_t)); // Eigenvectors
armpl_singlecomplex_t *work = (armpl_singlecomplex_t *)malloc(2 * N * sizeof(armpl_singlecomplex_t)); // Workspace
float *rwork = (float *)malloc((1 + 5 * N + 2 * N * N) * sizeof(float)); // Real workspace
armpl_int_t *iwork = (armpl_int_t *)malloc((3 + 5 * N) * sizeof(armpl_int_t)); // Integer workspace

if (z == NULL || work == NULL || rwork == NULL || iwork == NULL) {
printf("Memory allocation failed\n");
free(z);
free(work);
free(rwork);
free(iwork);
exit(EXIT_FAILURE);
}

armpl_int_t lwork = 2 * N * N;
armpl_int_t lrwork = 1 + 5 * N + 2 * N * N;
armpl_int_t liwork = 3 + 5 * N;
armpl_int_t info;

// Set parameters for chbevd_ function
char jobz = 'V'; // Compute both eigenvalues and eigenvectors
char uplo = 'U'; // Use the upper triangle of the matrix
int n = N;
int kd = N - 1;

// Call chbevd_ for eigenvalue decomposition
chbevd_(&jobz, &uplo, &n, &kd, cov_arm, &n, w, z, &n, work, &lwork, rwork, &lrwork, iwork, &liwork, &info);

// Check if the computation was successful
if (info == 0) {
printf("Eigenvalues:\n");
for (int i = 0; i < N; ++i) {
printf("%f\n", w[i]);
}
} else {
printf("Error in computing eigenvalues/eigenvectors. Info code: %d\n", info);
}

// Free allocated memory
free(z);
free(work);
free(rwork);
free(iwork);
}
входные данные:

Код: Выделить всё

armpl_singlecomplex_t h_cov_arm[N * N] = {
{4140.65f, -2.24197e-06f}, {137.897f, 3938.01f}, {-158.647f, -1241.86f}, {-1936.52f, 2616.06f},
{-743.871f, 2664.88f}, {623.323f, -4050.98f}, {-1115.17f, 1268.56f}, {-1067.13f, 133.398f},
{137.897f, -3938.01f}, {4154.02f, 3.32665e-06f}, {-1563.14f, -967.872f}, {2961.04f, 2489.75f},
{3325.31f, 1229.58f}, {-3941.03f, -737.05f}, {1463.98f, 2163.99f}, {-995.137f, 1257.28f},
{-158.647f, 1241.86f}, {-1563.14f, 967.872f}, {3843.31f, -2.39818e-07f}, {-2763.36f, 255.503f},
{-2805.64f, 1415.83f}, {1326.26f, 228.303f}, {-3621.11f, -722.38f}, {584.441f, -3733.83f},
{-1936.52f, -2616.06f}, {2961.04f, -2489.75f}, {-2763.36f, -255.503f}, {4067.95f, -3.1887e-06f},
{3742.5f, -1311.93f}, {-2992.45f, 1599.3f}, {3214.86f, 1165.23f}, {-611.432f, 2481.71f},
{-743.871f, -2664.88f}, {3325.31f, -1229.58f}, {-2805.64f, -1415.83f}, {3742.5f, 1311.94f},
{4021.9f, -3.66673e-06f}, {-2973.91f, 342.678f}, {2854.54f, 2360.54f}, {-1725.97f, 2476.39f},
{623.323f, 4050.98f}, {-3941.03f, 737.05f}, {1326.26f, -228.303f}, {-2992.45f, -1599.3f},
{-2973.91f, -342.678f}, {4204.25f, 3.96076e-06f}, {-1613.83f, -1059.15f}, {-198.559f, -1266.46f},
{-1115.17f, -1268.56f}, {1463.98f, -2163.99f}, {-3621.11f, 722.38f}, {3214.86f, -1165.23f},
{2854.54f, -2360.54f}, {-1613.83f, 1059.15f}, {3900.07f, -1.04732e-06f}, {171.296f, 3648.69f},
{-1067.13f, -133.398f}, {-995.137f, -1257.28f}, {584.441f, 3733.84f}, {-611.432f, -2481.71f},
{-1725.97f, -2476.39f}, {-198.559f, 1266.46f}, {171.296f, -3648.69f}, {3863.89f, -2.28193e-06f}
};
Ответ от cuSOLVER и ARM PL:

cuSOLVER (верно)
-0,0141504
-0,00595834
-0,0012536
0,000805093
0,00987138
204,135
7947,25
24044,7
ARM PL chbevd (неверно)
-4962.964844
-2623.061279
-1067.130249
-760.607239
928.843750
1449.710327
2353,812500
4702,794922


Подробнее здесь: https://stackoverflow.com/questions/791 ... genvalue-r
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»