用户登录

你在这里

关于最新版本的c++库:Eigen (v. 3.0)有什么提示/评论吗?

你好,

1.新版本的Eigen(现在是v3.0)已经发布(2011年3月23日),看起来很有希望。首先是几个环节:

该项目的主页面如下:[].v3.0的页面在这里:[].似乎是非常快速:[].


2.在Win32平台上没有编译问题:我今天刚刚下载了它,发现它在Win32 (BUILD_ALL项目)上用vc++ 10.0编译OK。不过,我还没有时间进一步尝试。


3.请分享你的经验:无论出于何种原因,如果在座的任何人最终决定使用它,或者不使用它,或者有任何意见或建议,我希望听到他/他们的意见,特别是关于以下几点:

3.1对于特征值计算,比较优势/劣势,包括速度比较,与现有的库如ARPACK, Trilinios等。

假设要求解的系统起源于典型的结构/实体力学有限元。如果可能的话,请分享您对3k、10k、100k或更大的全局[A]矩阵阶数的经验,这些矩阵是典型的FEM矩阵:稀疏、对称等。

[这个注释不是必要的,只是为了清楚起见:如果一个矩阵有10行10列,那么它的顺序是10,而不是100。]

3.2求解线性有限元生成系统使用直接求解器,与GOTO(最新版本),Taucs等中实现的现有FORTRAN/ c++代码进行速度比较。同样,矩阵的阶数从3k到100k甚至更大,当然,矩阵是稀疏的,对称的,等等。

4.任何其他技巧如果你愿意分享,我也会很感激。

提前感谢。

——特

(E&OE)

评论

tlaverne的照片

亲爱的特,

对我来说,特征的附加价值是允许在密集矩阵和向量上自动调整操作。因此,从这个角度来看,这是一个非常有前途和令人兴奋的代码。据我所知,Eigen的直接稀疏解算器并不是最先进的,它只是复制了Tim Davis的CSparse代码。我问了特征团队,他们是否考虑实现一个可以利用blas3操作(他们优化的)的左视或多额直接求解器,但不幸的是,他们不会(至少在不久的将来)。所以要得到一个有效的直接解你还需要依赖其他经典方程。

我关于混合求解器研究的博客:http://mechenjoy.blogspot.com/

亲爱的托马斯,


非常感谢您的澄清. ...所以,我猜想,既然“特征3.0”暂时还不具备多额功能,其他经典的blas可能会更好……嗯…

对于这些库,我几乎是一个新手,而且还在学习它们的过程中。所以,你能不能澄清一下或者指出一下“左看”是什么意思?

另一个点。我想与您私下沟通一下我们目前的需求和各种求解器库的功能(包括公共和商业领域)。如果你不介意的话,你能给我发一封邮件到aj175tp [at] yahoo [do t] co [do t] in吗?提前感谢。

——特

- - - - -
(E&OE)

tlaverne的照片

亲爱的特,

事实上,关于(让我们说)choolesky分解,有6种不同的方式来编写算法,这取决于你是开始处理行还是列(基本上有3个for循环)。向右或向左看的版本就是其中的两种。这种命名来自于这样一个事实:在向右看的版本(实际上是逐行)中,您更新对角线之后(在右侧)的分解项,而向左看的版本(这是一列一列的,是CSparse的实际实现)您在左侧进行分解。也许我错了(我经常混淆不同的因数分解),但这个想法接近于此。

根据您编写因数分解算法的方式(即:您选择的术语的更新,或FOR循环的顺序),算法具有不同的属性,特别是应该如何以及何时更新因数分解的新计算值。一些实现(它们被称为supernodal)允许收集一些节点并以块方式进行更新工作(不时地,但不是在所有矩阵上)。这允许使用密集矩阵算法(如密集矩阵乘积等),这些算法被BLAS实现高度优化。即使这些优化只影响完整分解的一小部分,加速也可能令人印象深刻。多额叶解算器也允许使用相同的技巧,但有另一个想法。

蒂姆·戴维斯(Tim Davis)的书是一个很好的参考(但我发现要完全理解它需要很多投入)http://www.amazon.com/Direct-Methods-Systems-Fundamentals-Algorithms/dp/..。

正如你可能知道的,到目前为止,blas的性能依赖于硬件架构(缓存属性,流水线等),因为库使用汇编器来获得完全的加速。ATLAS的自动调优在很大程度上改变了这一点,因为它几乎可以在任何机器上获得最佳性能。然而,eigen的主要部分是致力于创建一个可比较的代码,但使用SSE3指令,1)在代码层次结构中更高,2)更通用。因此,eigen能够在任何支持SSE3指令的硬件上创建优化的blas。这很好,但仅限于密集算法。

另一方面,我知道他们正在开发一些稀疏矩阵的算法,但据我所知,这些算法不会受益于密集算法的加速。然而,我一年前就查过了,所以在完全肯定这一点之前,我应该再查一遍。

最好的问候,

托马斯。

亲爱的托马斯,

0.再次感谢您的详细回复。

1.关于书籍:只是在写完关于“左看”等的请求后,我才想到去查阅数值食谱。(我有2/e,在c++中。)然后我意识到我有多少东西要学. ...我会完成NR,然后试着浏览戴维斯的书。我相信你们的意见也会在学习过程中派上用场。

2.缺乏比较数据:然而,我想指出的另一件事是:缺乏大型系统和公共(PC)平台上的比较性能数据。请允许我解释一下。

不久前,我们在iMechanica上讨论了FORTRAN与c++的关系,万博manbetx平台有人提到默认的FORTRAN代码会比默认的c++代码更快。(我试着寻找这条线索,但没有找到。我脑子里想的不是这条线[]或这个[]。)有了表达式模板,即使是c++代码也应该很快。但是有多快呢?人们希望对阶为10K+的矩阵有一些确定的数据,但令人惊讶的是,很难找到这样的数据。

另一件事。所有解决运行非常随着系统大小的增大(例如,每个处理器的矩阵顺序为bbb10k),速度会缓慢。算法上的细微差别肯定会起作用。但对于大型系统来说,减少了多少呢?百分比或因素是多少?我不知道,而且没有一个用定量数据备份算法描述....

事实是,如果非常标准的算法(比如那些在NR中给出的算法)不会慢超过50%,那么,坦率地说,人们不会关心任何高级库。(再次强调,重点是针对大型系统。)类似地,如果允许使用密集矩阵算法(考虑到今天普通桌面中常规的2GB和4GB ram),那么,再一次,人们不会特别关心稀疏矩阵算法。

但是没有办法轻易得到这样的定量数据。通常,人们会遇到这样的东西:“我们的库是自Backus编写FORTRAN规则手册以来最伟大的库;我们甚至使用MPI。”好的,但是通过OpenMP提供的更简单的共享内存支持呢?清空。GPGPU支持怎么样?清空。除了线性系统解之外还有特征值计算吗?清空。如何在Windows平台上使用vc++(而不是MinGW等)轻松编译? Mostly blank-out.

今天,事实是,为了评估一个库(比如我日常工作中的商业应用程序),我必须自己下载它、编译它、运行测试数据,然后得出我自己的结论。这就引出了下一点。

3.求解程序库性能数据互联网存储库:我们能不能有一个类似佛罗里达大学矩阵收集的互联网存储库,人们可以去那里报告他们用不同的硬件和软件组合得到的性能数据?

4.我要做的是:不管怎样,我已经说得够多了。我想在接下来的几个月(或更长时间)里,我会为这个想法做一些事情。我将首先用FORTRAN和c++编写最愚蠢的(即最简单的)算法(例如,直接解,数值分析101类型的高斯消去实现),并将它们的数据作为比较的共同基线。然后,我将编译NR图书算法,作为第二个基线。然后,我将开始编译和测试8到10个常用的库。我将上传我的程序和结果在一些合适的地方(也许在iMechanica)。万博manbetx平台

…我肯定会这样做,在这样做的同时,特别是在实现NR书籍算法的同时,我也将开始学习这个迷人的数值算法主题。正如你可以从上面引用的两个在iMechanica的帖子中看到的那样,我已经寻找了足够长的时间,现在是时候开始总结至万博manbetx平台少一些中间结论. ...了我认为专门的博客比较数据将是一个好主意…一旦成立,我将立即宣布。”


——特

- - - - -
(E&OE)

Penyakit Pembesaran padjantung, menyerang padjantung是sendiriObat草药jantong bengkak。Kolesterol tinggi kebanyakan disebabkan oleh pola makan yang tidak sehatObat草药胆固醇www.veherba.comMerupakan salah satu分销商Veherba Plus terbesar & terpercaya。

订阅评论查看“关于最新版本的c++库:Eigen (v. 3.0)的任何提示/评论?”

最近的评论

更多的评论

辛迪加

订阅辛迪加