Skip to content
  • 最新
  • 版块
  • 东岳流体
  • 随机看[请狂点我]
皮肤
  • Light
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • 默认(不使用皮肤)
  • 不使用皮肤
折叠
CFD中文网

CFD中文网

  1. CFD中文网
  2. CFD彩虹条
  3. 分享个有关矢量化编程的Guide

分享个有关矢量化编程的Guide

已定时 已固定 已锁定 已移动 CFD彩虹条
3 帖子 2 发布者 2.5k 浏览
  • 从旧到新
  • 从新到旧
  • 最多赞同
回复
  • 在新帖中回复
登录后回复
此主题已被删除。只有拥有主题管理权限的用户可以查看。
  • 星 离线
    星 离线
    星星星星晴
    写于 最后由 编辑
    #1

    无论是GCC还是Intel compiler 无论C/C++还是Fortran,在涉及到高性能计算的时候难免会遇到性能表现低于预期的情况。在刨除硬件原因,程序的编写也是个值得注意的地方。

    矢量化是将算法从一次对单个值进行操作转换为一次对一组值进行操作的过程。现代 CPU 直接支持向量运算,其中单个指令应用于多个数据 (SIMD)。
    https://www.intel.com/content/www/us/en/developer/articles/technical/vectorization-a-key-tool-to-improve-performance-on-modern-cpus.html

    矢量化这里指的并不是说将变量转换为array 或者向量,矩阵。这里指的是编译的时候,基于AVX512/SSE等CPU指令集的优化。

    下面是Intel 官方提供的 A Guide to Vectorization with Intel C++ Compilers.
    https://www.intel.com/content/dam/develop/external/us/en/documents/31848-compilerautovectorizationguide.pdf

    在我使用OpenFOAM的经历中,OF的编译都是直接使用wmake然后系统会自动编译,从来没有考虑过什么Compiler flag,有没有矢量化等等。

    因此,有的时候user-define的model往往成为高性能计算的bottleneck。希望有空的时候,有些同学可以研究一下,提高计算效率~同时在b占看到用人用inteladvisor记性程序性能分析测试,推荐一波,没仔细看,但是感觉挺有用。
    https://www.bilibili.com/video/BV1bg411S7kY/?vd_source=9b9f509ff457caa06206ec8f5560c371

    游荡

    1 条回复 最后回复
  • 田畔的风田 离线
    田畔的风田 离线
    田畔的风 神
    写于 最后由 田畔的风 编辑
    #2

    我以前对OF加过矢量化的编译指令,但是计算会出错。想用这套东西在设计代码时候就需要考虑,日常我写自己程序的时候用Eigen是支持矢量化的。

    星 1 条回复 最后回复
  • 星 离线
    星 离线
    星星星星晴
    在 中回复了 田畔的风 最后由 编辑
    #3

    @田畔的风 之前用of的时候,从来没考虑过这种优化 -O2 -O3, -xHost等等
    现在知道c++编译的时候有这么个东西,所以就是给个想法。。谁知道是不是在某个版本,of添加了相关的东西呢?反正这种编程的手法基本上是不会错的。

    游荡

    1 条回复 最后回复

  • 登录

  • 登录或注册以进行搜索。
  • 第一个帖子
    最后一个帖子
0
  • 最新
  • 版块
  • 东岳流体
  • 随机看[请狂点我]