4

我必须对 1,2,3...9 维向量的数组进行计算,这些向量的数量变化很大(比如从 100 到数百万)。当然,如果数据容器可以很容易地分解以启用并行算法,那就太好了。

我遇到了 blitz++(几乎不可能为我编译),但是还有其他快速的库可以操纵矢量数据数组吗?boost::fusion 值得一看吗?此外,vtk 的 vtkDoubleArray 看起来不错,但 vtk 是仅用于可视化的库。我必须承认拥有元组数组是一个诱人的想法,但我没有看到任何关于 boost::fusion 和/或 vtkDoubleArray 的基准。就像它们不是为速度而设计的一样。有什么想法吗?

最好的祝福,

威多多

4

6 回答 6

4

Eigen,支持某些编译器上的向量自动向量化(GCC 4,VC++ 2008)。

于 2009-09-29T11:48:01.420 回答
1

对于线性代数,您可能想要评估Boost uBLAS,它是完整BLAS包的一个子集。正如您所提到的,Boost Fusion也可能是合适的,具体取决于您正在实施的算法。

我相信您可以使用VTK的非 GUI 部分,例如,vtkDoubleArray如果您不需要它们,则无需在可视化库中进行链接。请注意,VTK 旨在提高渲染效率,而不是计算效率。如果不想渲染结果,不妨使用提供优化算法的科学包之一。

BLAS 有一种 Parallel 风格,称为(奇怪的是)PBLAS。我认为这不能通过 Boost 包装获得,因此您可以直接使用 C 接口。

于 2009-09-29T11:46:05.000 回答
1

在不知道你想用你的阵列做什么的情况下,很难给出真正坚定的建议。如果需要对数组进行高性能操作,那么 Blitz++ 可能是您最好的选择。如果您在编译时遇到问题,那么您可能需要更改您的编译器或系统。他们确实支持 g++,所以几乎任何东西的最新版本都应该让你继续前进。

我没有使用过 Boost::fusion,但快速阅读手册表明它的主要目标只是制作异构容器。我不认为那是你想要的。

我曾尝试使用 GSL,但发现它对于我想做的任何事情都非常尴尬。

于 2009-09-29T11:56:27.550 回答
0

我不是专家,但您可能需要考虑使用MATLAB API

于 2009-09-29T11:07:16.087 回答
0

有用于向量或矩阵运算的GNU 科学库

于 2009-09-29T11:29:31.783 回答
0

我会尝试使用 Blitz++,它会给你一个非常好的性能。犰狳也很有效。

于 2010-08-02T20:33:43.697 回答