Часовня LinearAlgebra сообщает об ошибке при вызове eig (csrA, left = true, right = true); - PullRequest
2 голосов
/ 07 января 2020

Использование code внутри онлайновой IDE для создания прототипа, example2.chpl из Документация о том, как использовать модуль LinearAlgebra proc eig(…) не удалось работать с CSR-разреженной матрицей комплекса значения, csrMatrixA - экземпляр.

Код:

use LinearAlgebra.Sparse, IO.FormattedIO;

config var N = 3;                                 // May use on the CLI-cmdline or here, below in the launcher's Arguments.add: --N=<aNumber>

var csrDOMAIN  = CSRDomain( N, N );               // Create an empty 3x3 CSR domain ---------> https://chapel-lang.org/docs/primers/sparse.html#primers-sparse
var csrMatrixA = CSRMatrix( csrDOMAIN, complex ); // Create a CSR matrix over this domain
                                                  // The above is equivalent to:               var matA: [csrDOMAIN] <dtype>;

csrDOMAIN += (1,1);                               // Add as an exemaple these indices to the sparse domain for all the nonzero data-cells
csrDOMAIN += (1,2);
csrDOMAIN += (2,2);
csrDOMAIN += (2,1);
csrDOMAIN += (3,3);

csrMatrixA.re =  1.23;                            // Set as an example all nonzero elements, all sparsely distributed over a domain indirectly described by csrDOMAIN, to a value of 1.23
csrMatrixA.im = -4.56;                            // Set as an example all nonzero elements, all sparsely distributed over a domain indirectly described by csrDOMAIN, to a value of-4.56i

writef( "CSR-Sparse Matrix A::[%i x %i] has values of:\n",
         N,
         N
         );

writeln( csrMatrixA );                            // A is now a 3x3 sparse matrix

/*/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// CRASH-REPORT:

var (     eigenVALUEs,
     rightEigenVECTORs ) = eig( csrMatrixA, right = true ); // ------------------------------> https://chapel-lang.org/docs/modules/packages/LinearAlgebra.html#LinearAlgebra.eig

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// TiO.RUN::
// .code.tio.chpl:22: error: unresolved call 'eig([CSDom(2,int(64),domain(2,int(64),false),true,false,false)] complex(128), left=1, right=1)'
// $CHPL_HOME/modules/packages/LinearAlgebra.chpl:1404: note: this candidate did not match: eig(A: [] ?t, param left = false, param right = false)
// $CHPL_HOME/modules/packages/LinearAlgebra.chpl:1404: note: because where clause evaluated to false
// $CHPL_HOME/modules/packages/LinearAlgebra.chpl:1618: note: candidates are: eig(A: [] ?t, param left = false, param right = false)
//

writeln( eigenVALUEs );
  */

Настройки компилятора: --fast
Параметры времени выполнения: --N=3 (не относится к атм)

Не могли бы вы любезно дать совет :
a) каков будет правильный способ удовлетворения ожидаемого синтаксиса (позывная-подпись)
и
b) Не могли бы вы любезно расширить пример восстановленного кода MCVE еще на один шаг, чтобы продемонстрировать, как заставить eig() -обработку реально работать параллельно-распределенным образом на очень редкой, несимметричной. CSR-домен N x N для N ~ 2E7 (имеющий ~ 5 [GB] фактических данных), распределенный не из-за размера ОЗУ, а для более быстрой обработки по нескольким языкам, чтобы эффективно использовать все доступные ресурсы ЦП
и
c) что будет net ускорение обработки такого подхода, если сравнивается с обработкой в ​​одном локали?

Трассировка:

$CHPL_HOME/modules/packages/LinearAlgebra.chpl:1404: note:
this candidate did not match: eig(A: [] ?t, param left = false, param right = false)
$CHPL_HOME/modules/packages/LinearAlgebra.chpl:1404: note:
because where clause evaluated to false
$CHPL_HOME/modules/packages/LinearAlgebra.chpl:1618: note:
candidates are: eig(A: [] ?t, param left = false, param right = false)


Недавние повторные тесты после бен Альбрехта [выпуск-14725] тикет был отправлен, подтвердите как (complex), так и (int) eltType -s cra sh аналогичным образом, но экземпляр (real) CSRMatrix() выдает ошибку кода LAPACK: как документировано в обновлено- код

$CHPL_HOME/modules/packages/LAPACK.chpl:19775: error:
c_ptrTo unsupported array type

1 Ответ

2 голосов
/ 08 января 2020

а) Похоже, что это нереализованная функция для библиотеки линейной алгебры. Я подал вопрос здесь: https://github.com/chapel-lang/chapel/issues/14725

b) В часовне 1.20 еще нет распределенного собственного решателя в модуле LinearAlgebra. Я призываю вас открыть вопрос в репозитории github, запрашивающий эту функцию, если вы найдете ее полезной.

c) См. (B)

...