magma_dpotrf_gpu дает ошибку сегментации - PullRequest
0 голосов
/ 10 апреля 2019

У меня есть код cblas и lapack, который я пытаюсь «преобразовать» в код магмы, чтобы воспользоваться преимуществами графического процессора.Это мой код процессора, который отлично работает:

cblas_dsyrk(CblasColMajor,CblasUpper,CblasTrans,n,m,1.0,A2,m, 0.0,C_theta,n);
cblas_dsyrk(CblasColMajor,CblasUpper,CblasTrans,n,m,1.0,A1,m,-1.0,C_theta,n);
clapack_dpotrf(CblasColMajor,CblasUpper,n,C_theta,n);

Теперь, для версии с графическим процессором magma, я сделал это:

magma_dmalloc(&d_A1, m*n);
magma_dmalloc(&d_A2, m*n);
magma_dmalloc(&d_C_theta, n*n);

magma_dsetmatrix(m ,n, A1, m, d_A1, m, queue);
magma_dsetmatrix(m ,n, A2, m, d_A2, m, queue);
magma_dsetmatrix(n ,n, C_theta, n, d_C_theta, n, queue);

magma_dsyrk(MagmaUpper, MagmaTrans, n, m, 1.0, d_A2, m, 0.0, d_C_theta, n, queue);
magma_dsyrk(MagmaUpper, MagmaTrans, n, m, 1.0, d_A1, m, -1.0, d_C_theta, n, queue);
magma_int_t *info_potrf; 
magma_dpotrf_gpu(MagmaUpper, n, d_C_theta, n, info_potrf);

И по какой-то причине последняя строка дает сегментациюнеисправность.Что я здесь не так делаю?Все кажется правильным.

1 Ответ

1 голос
/ 10 апреля 2019

На решение ответил @ RobertCrovella.

Звездочка должна быть удалена, чтобы выделить память для переменной info_potrf, а во второй строке необходимо добавить &, чтобы использоватьпеременный адрес.Это правильный путь:

magma_int_t info_potrf; 
magma_dpotrf_gpu(MagmaUpper, n, d_C_theta, n, &info_potrf);
...