C++高性能计算的资源
Resources for high performance computing in C++
我正在寻找书籍或在线资源,详细介绍使用C++进行高性能计算的编程技术。
实际上我听说过的所有HPC代码都是用于求解线性方程或FFT的系统。这里有一些链接,至少可以在使用的库中开始:
- BLAS - 线性代数的标准例程集 - 矩阵乘法之类的东西
- LAPACK - 标准的高级线性代数例程集 - 像LU分解这样的东西。
- ATLAS - 优化的 BLAS 实施
- FFTW - 优化的FFT实现
- PBLAS - 用于分布式处理器的 BLAS
- SCALAPACK - 分布式 LAPACK 实现
- MPI - 分布式系统的通信库。
- PETSc - 可扩展的非线性和线性求解器(用户可扩展,接口远高于此)
尽管不是 FOSS,但如果您需要执行英特尔 IPP 和 MKL 库支持的任何操作(例如:信号处理、图像处理、矩阵数学),它们确实可以为您节省大量时间(无论是在开发中还是在运行时)。当然,这取决于您的平台是否可以从中受益。
(不:我不为英特尔工作,但我是他们的快乐客户。
Trilinos 库和软件包套件为 HPC 提供了广泛的中间件库,包括稀疏迭代线性求解器; 非线性求解器; 特征求解器;ODE 和 DAE 积分器,包括灵敏度分析;优化(侵入式和黑匣子);有限元接口;网状接口;预调理剂;等。 所有这些包都是使用相当现代的C++技术设计的(有Python API以及一些C和Fortran)。 在非常大规模的并行(5000+ CPU)模拟中使用了特殊后果(核武器设计),并取得了巨大成功。 这些软件包提供了一套比 BLAS 等级别高得多的功能。
第一件事可能是阅读有关MPI(消息传递接口)的信息,这是HPC节点互连中的事实标准。
查看特征向量/矩阵库。该 API 非常优雅,生成的程序速度非常快(由于 SSE2 架构的显式矢量化)。
尽管已有 14+ 岁,但表达式模板的开创性工作仍然被认为是多年来最杰出的C++工作之一。 快速、高效、安全...我用过这些技术,它们真的很了不起。
编辑:如果上述链接仍然断开,下面是表达式模板的替代参考。 这篇DDJ文章引用了Veldhuizen的原著。
看看自适应通信环境(ACE)。 它是一个模板和对象库,用于C++中的高性能应用程序。 它具有用于线程、网络等的出色跨平台原语。
无论你写了什么,以及你从一开始就设计了多少性能,它很有可能从性能调优中受益。通常程序越大,受益就越大。这是进行该调整的简单有效的方法。它基于"深度采样",这是一种在降低测量的同时提供诊断准确性的技术。
你也可以看看 http://en.wikipedia.org/wiki/Performance_analysis#Simple_manual_technique
高可扩展性 - 构建更大、更快、更可靠的网站。
http://highscalability.com/
还有:
http://www.ddj.com/hpc-high-performance-computing/
- 为什么"do while"循环不断退出,即使条件计算结果为 false?
- 具有瞬态资源的RAII类
- 递归函数计算序列中的平方和(并输出过程)
- (C++)分析树以计算返回错误值的简单算术表达式
- 我的字符计数代码计算错误.为什么
- 在计算中使用二的幂有多有利可图
- C++ 雷神库 - 使用资源加载器类时出现问题(不命名类型)
- 如何计算文件中的"columns"数?
- 计算排序向量的向量中唯一值的计数
- 如何使用 std::累积在 C++ 中计算总和立方体
- 使用Qt C++计算类似Git的SHA1哈希
- OpenCV C++.快速计算混淆矩阵
- cpp二进制搜索问题,计算给定数组中输入元素的出现次数
- C++如何计算用户输入的数字中的偶数位数
- 如何计算数据类型的范围,例如int
- 类似枚举的计算常量
- 计算每个节点的树高,帮助我解释这个代码解决方案
- 允许从 std::map 的密钥窃取资源?
- DirectX 11 -计算着色器:写入输出资源
- C++高性能计算的资源