C++固定大小矩阵和向量库

4
我正在寻找一个C++固定大小矩阵库,它可以像boost::numeric::ublas一样实现向量和矩阵的大多数常见操作,但要在CUDA内核中使用(因此是固定大小,只使用本地内存而不是全局内存访问)。
我找到了几个基于主机的矩阵库:boost::numeric::ublas、Eigen、blitz,但它们没有我可以在我的内核上使用的固定大小矩阵。Eigen有Matrix3f和相应的东西,这正是我要找的,但它无法通过nvcc编译(尽管在这方面似乎有一些进展,请参见here)。
编辑:我在Linux上做所有这些事情,因此希望可能有跨平台的东西...

CUBLAS是什么?https://developer.nvidia.com/cublas - Steve Townsend
我不太了解你所问的内容,但我知道(我的知识来自于我在ArrayFire上的工作),许多Eigen用户正在使用ArrayFire进行GPU计算,因为它们之间有很多重叠的功能。这里有比较Eigen和ArrayFire的基准测试:http://www.accelereyes.com/products/benchmarks_arrayfire。干杯! - arrayfire
@accelereyes:我的目标是在CUDA内核中使用线性代数工具,从我所了解的来看,ArrayFire是通过GPU计算CPU的线性代数工具。我的目标不是这样的。 我要用GPU,由GPU完成(因此不使用任何并行ism进行线性代数运算)。 - Alexandre Kaspar
@SteveTownsend:似乎CUBLAS 5可能有一些可以在设备上运行的新东西,但我还没有发现任何有趣的东西(而且我现在使用的是CUDA 4)。 - Alexandre Kaspar
@AlexandreKaspar,你所要求的方式并不高效。任何能够运行的库都只能在单线程下工作,每个线程必须独自完成所有操作。 - Pavan Yalamanchili
@Pavan:是的,我知道,计划是在单个线程上完成这个操作的。原因是需要对许多这样的矩阵进行此操作,因此我将并行处理放在了这些矩阵的计算部分上,而不是通常的代数部分(特别是我不需要处理大型矩阵)。 - Alexandre Kaspar
2个回答

3
如果你在寻找一个被证明非常好用的流行的C++数学库,可以尝试使用glm。它是按照GLSL模型设计的,也就是说它的数据是以列优先顺序存储的,这对于所有着色器/ GPU导向的设计非常友好。GLM是一个纯头文件库,声称非常符合标准,所以也许它会为您编译成功。

非常感谢,这是一个很棒的库!它需要更多的宣传。我以前没有见过它,看起来它支持CUDA得很好。我会试试看的。 - Alexandre Kaspar

0

关于DirectX SDK中分发的XNA Math怎么样?它包含了专门用于向量和矩阵的类以及大量用于操作它们的特殊函数。

  • XMVECTOR
  • XMMATRIX
  • XMVectorMethodName
  • XMMatrixMethodName

那本来是个好主意,但我的项目要在Linux上运行,所以不能用DirectX。(我已经在我的帖子中添加了关于这一点的说明,很抱歉没有说明跨平台要求) - Alexandre Kaspar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接