치수에 구애받지 않는 코드를위한 빠르고 가벼운 C ++ 텐서 라이브러리


20

차원에 관계없이 코드를 지원하는 C ++ 텐서 라이브러리를 찾고 있습니다. 특히 가중 합계 계산과 같이 각 차원 (최대 3 개)을 따라 작업을 수행해야합니다. 차원은 템플릿 매개 변수 (따라서 컴파일 타임 상수)입니다. 또 다른 제약은 라이브러리가 비교적 경량이어야하므로 Trilinos / PETSc보다 고유 / 부스트 스타일입니다.

어떤 제안?

참고 : 나는 Eigen을 살펴 보았고 2D 텐서에 국한되지 않았다면 프로파일에 거의 맞다고 생각합니다. 이 실수로 틀렸다면 정정하십시오.

답변:


9

FTensor 는 인체 공학적 요약 표기법을 포함하는 경량의 헤더 전용의 완전한 템플릿 라이브러리입니다. 2, 3 및 4 차원에서 광범위하게 테스트되었지만 모든 차원에서 잘 작동합니다.


6

그 가치를 위해 Eigen은 지원되지 않는 모듈로 텐서 클래스를 가지고 있습니다.

http://eigen.tuxfamily.org/dox-devel/unsupported/group_ CXX11 _Tensor__Module.html

나는 그것을 직접 사용하지 않았으므로 그것에 대해 더 말할 수 없습니다.

Armadillo 클래스 라이브러리에는 3 차 텐서 클래스가 있습니다.

http://arma.sourceforge.net/

Armadillo의 텐서 기능도 사용하지 않았지만 표준 매트릭스 클래스를 실험했으며 상대적으로 사용하기 쉽고 성능이 좋습니다.


2
보다 구체적으로, Armadillo는 3 차 텐서를 구현 하는 Cube 클래스 를 가지고 있습니다
mtall

6

이 새로운 taco라이브러리도 정말 좋다고 생각합니다.

Tensor Algebra Compiler (taco)는 스파 스 및 밀도가 높은 텐서에서 텐서 대수 표현을 계산하는 C ++ 라이브러리입니다. 새로운 컴파일러 기술을 사용하여 희소 텐서 대수 및 희소 선형 대수 모두에 널리 사용되는 라이브러리에서 손으로 최적화 된 커널과 성능 경쟁력을 갖습니다.

taco를 C ++ 라이브러리로 사용하여 텐서를로드하고 파일에서 텐서를 읽고 텐서 식을 계산할 수 있습니다. taco를 텐서 식을 계산하는 C 함수를 생성하는 코드 생성기로 사용할 수도 있습니다.

대화 : https://www.youtube.com/watch?v=Kffbzf9etLE 종이 : http://tensor-compiler.org/kjolstad-oopsla17-tensor-compiler.pdf


2
SciComp.SE에 오신 것을 환영합니다! 라이브러리 (링크가 작동하지 않을 수 있음)를 설명하고 특히 OP의 요구 사항을 어떻게 충족하는지 설명하기 위해 답을 확장 할 수 있습니까? 그렇지 않으면 더 많은 주석입니다.
Christian Clason

매우 흥미로운 도서관 인 것 같습니다! 그래도 추가 컴파일 단계가 생성되는 것 같습니다. 대신 템플릿을 사용하여 이것을 구현할 수 있는지 궁금합니다.
HelloGoodbye


4

deal.II 라이브러리 ( http://www.dealii.org )는 훨씬 더 큰 목적으로 작성되었지만 원하는 많은 작업을 수행하는 텐서 클래스의 하위 라이브러리도 있습니다. 특히 차원에 템플릿을 사용합니다.

(면책 조항 : 나는이 도서관의 주요 저자 중 하나입니다.)


2

라이브러리 Boost.Numeric.uBlas는 최근 Boost 버전 1.70과 함께 제공되는 텐서 확장을 추가했습니다. https://github.com/boostorg/ublas를 살펴보십시오 . 런타임 가변 순서 (차원 수), 1 차 및 마지막 순서의 스토리지 형식 (열 및 행 주요)에 대한 표준 매트릭스 및 텐서 작업을 제공합니다. 아인슈타인 합산 규칙을 ​​쉽게 사용하여 수차 텐서 곱셈을 표현할 수도 있습니다. Boost.Numeric.uBlas는 헤더 전용이며 기존 프로젝트에 쉽게 통합 할 수 있습니다.


Godbolt의 라이브러리를 가지고 놀 수도 있습니다 : godbolt.org/z/Sf5V77
Cem Bassoy



1

LTensor ( https://code.google.com/p/ltensor/ )는 빠르고 가벼운 최대 4 등급 (인디 컬 표기법 기반)의 텐서를 위해 사용하기 매우 쉬운 C ++ 템플릿 라이브러리입니다. 메인 헤더 파일 만 포함하면됩니다. 여러 프로젝트에서 사용하고 정상적으로 작동했습니다.

선형 솔버, svd, LU 및 Cholesky 분해 등과 같은 순위 2 텐서에 대한 내장 기능이 있습니다. 나는 그것들을 사용하지 않았습니다 (나는 다른 라이브러리를 사용합니다).


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.