치수에 구애받지 않는 코드를위한 빠르고 가벼운 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.