C ++中用于高性能计算的资源
我正在寻找有关使用C ++进行高性能计算的编程技术的详细书籍或者在线资源。
解决方案
看一下自适应通信环境(ACE)。它是用于C ++高性能应用程序的模板和对象库。它具有出色的跨平台原语,用于线程,网络等。
第一件事可能是阅读有关HPC节点互连中事实上的标准MPI(消息传递接口)的信息。
实际上,我听说过的所有HPC代码都是用于求解线性方程式或者FFT的系统。以下是一些链接,至少可以在所使用的库中开始操作:
- BLAS-线性代数的标准例程集-矩阵乘法之类的东西
- LAPACK-高级线性代数例程的标准集合-LU decomp之类的东西。
- ATLAS-优化的BLAS实施
- FFTW-优化的FFT实施
- PBLAS-分布式处理器的BLAS
- SCALAPACK-分布式LAPACK实现
- MPI-分布式系统的通信库。
- PETSc-可扩展的非线性和线性求解器(用户可扩展,上面的接口)
Trilinos库和软件包套件为HPC提供了广泛的中间件库,包括稀疏的迭代线性求解器。非线性求解器本征求解器; ODE和DAE集成商,包括灵敏度分析;优化(侵入式和黑盒式);有限元接口;网格接口;预处理器;所有这些软件包都是使用相当现代的C ++技术(有Python API以及一些C和Fortran)设计的。在超大规模并行(5000+ CPU)中使用了特殊结果(核武器设计)的模拟,并取得了巨大的成功。这些软件包提供了一整套比BLAS等更高级别的功能。
尽管已有14年以上的经验,但Expression Templates的开拓性工作仍被视为多年来最出色的C ++工作。快速,高效,安全...我已经使用了这些技术,它们的确非常出色。
编辑:
如果以上链接仍然断开,这是表达式模板的备用参考。 DDJ的这篇文章引用了Veldhuizen的原始作品。
即使不是FOSS,如果我们需要执行这些库支持的任何操作(例如:信号处理,图像处理,矩阵),则Intel IPP和MKL库确实可以为我们节省大量时间(包括开发和运行时)。数学)。当然,是否可以从中受益,这取决于平台。
(否:我不是在英特尔工作,但我是他们的顾客。)
无论我们编写什么内容,以及从一开始就为性能进行了多少设计,都很有可能会从性能调整中受益。通常,程序越大,受益越多。这是进行调优的简单有效的方法。它基于"深度采样",该技术可在不强调测量的同时提供诊断的准确性。
我们也可以查看http://en.wikipedia.org/wiki/Performance_analysis#Simple_manual_technique
查看特征向量/矩阵库。该api非常优雅,并且生成的程序运行迅速(由于SSE2体系结构的显式矢量化)。
高可扩展性建设更大,更快,更可靠的网站。
http://highscalability.com/
并且:
http://www.ddj.com/hpc-high-performance-computing/