2009-09-29 3 views
4

1,2,3 ... 9 차원 벡터의 배열에 대한 계산을해야하며 그 벡터의 수는 크게 다릅니다 (100에서 최대 2 천만). 물론 데이터 컨테이너를 병렬 알고리즘을 사용하기 위해 쉽게 분해 할 수 있다면 좋을 것입니다.C++의 벡터 배열에 가장 적합한 라이브러리

나는 blitz ++ (나에게있어서 거의 컴파일 불가능)를 보았지만 벡터 데이터 배열을 조작하는 다른 빠른 라이브러리가 있습니까? 부스트 : 퓨전 가치가 있나요? 또한, vtk의 vtkDoubleArray는 좋지만 vtk는 시각화에만 사용되는 lib입니다. 나는 튜플 배열을 갖는 것이 유혹스러운 아이디어라는 것을 인정해야하지만 boost :: fusion 및/또는 vtkDoubleArray와 관련된 벤치 마크는 보지 못했습니다. 속도를 염두에 두지 않은 것처럼 말입니다. 이견있는 사람?

안부,

mightydodol

답변

4

Eigen은 특정 컴파일러 (GCC 4, VC++ 2008)에서 벡터의 자동 벡터화를 지원합니다.

+0

Eigen은 훌륭한 퍼포먼스를보고합니다 (독립적 인 벤치 마크를 원하지만). 무료이며 훌륭한 API를 가지고 있습니다. 나는 다른 어떤 것보다 먼저 살펴볼 것이고, 나는 꽤 많은 해결책 (PetsC, Atlas, VNL, GSL, ...)을 시도했다. –

0

은 난 전문가는 아니지만, 당신은 MATLAB API 사용을 고려할 수 있습니다.

0

은 선형 대수를 들어 벡터 또는 행렬

+0

질문은 C++에 관한 것입니다. –

1

의 작업에 대한 GNU Scientific Library있다, 당신은 아마 전체 BLAS 패키지의 하위 집합입니다 Boost uBLAS을 평가하고 싶다. 언급 한 바와 같이 구현중인 알고리즘에 따라 Boost Fusion도 적절할 수 있습니다.

VTK과 같은 GUI가 아닌 부분은 vtkDoubleArray과 같이 시각화 라이브러리에 링크하지 않아도 사용할 수 있다고 생각합니다. VTK는 계산이 아니라 렌더링의 효율성을 위해 설계되었습니다. 결과를 렌더링하지 않으려면 최적화 된 알고리즘을 제공하는 과학 패키지 중 하나를 사용할 수도 있습니다.

BLAS의 병렬 풍미가 (이상하게 불림) PBLAS입니다. 이것은 Boost 랩핑을 통해 사용할 수 있다고 생각하지 않으므로 C 인터페이스를 직접 사용하십시오.

+0

좋은 점은 vtkDoubleArray가 pt를 배열에 반환하므로 성능 (http://stackoverflow.com/questions/446866/boostmultiarray-performance-question/539001#539001 기반)이 네이티브와 거의 같을 수 있습니다. 배열 (즉 double * pt [sizex * sizey]). Eigen with MatrixXd m (sizex, sizey)와 동일한 문제 – dodol

+0

VTK는 매우 복잡하며 비 시각화 작업 만 사용하면 가치가 두 배가됩니다. –

1

배열과 관련하여 무엇을하고 싶은지 알지 못하면 실제로 충고하는 것이 어렵습니다. 고성능 어레이 조작이 필요한 경우 Blitz ++가 가장 좋은 방법 일 것입니다. 컴파일에 문제가있는 경우 컴파일러 나 시스템을 변경해야합니다. 그들은 g ++를 지원합니다. 그래서 최신 버전이 당신을 끌어들일 것입니다.

나는 Boost :: fusion을 사용하지 않았지만 매뉴얼을 빨리 읽으면 주요 목적은 이기종 컨테이너를 만드는 것이다. 나는 그것이 당신이 원하는 것이라고 생각하지 않습니다.

나는 GSL을 사용하려고 시도했지만, 내가 원했던 무엇이든 절망적으로 찾았다.

+0

POOMA http://acts.nersc.gov/pooma/를 보라. 병렬 처리가 정말로 중요한 경우. 아이겐 (Eigen)은 필요한 다중 복잡성의 정도를 알려주지 않습니다. –

+0

블리치 컴파일에 어려움이 있다는 사실은 내가 멍청이임을 보여줍니다. :). 하지만 네, 아마 아마도 이것이 최선의 해결책 일 수 있다는 것을 알고 있습니다. – dodol

0

나는 Blitz ++를 사용해 볼 것이고, 정말 좋은 성능을 제공 할 것입니다. 아르마딜로 또한 매우 효율적입니다.

관련 문제