开发者
资源
我要评分
获取效率
正确性
完整性
易理解
在线提单
论坛求助

毕昇编译器

毕昇编译器是华为编译器实验室针对鲲鹏等通用处理器架构场景,打造的一款高性能、高可信及易扩展的编译器工具链,增强和引入了多种编译优化技术,支持C/C++/Fortran等编程语言及对应编程语言的OpenMP扩展。

详情请参见《毕昇编译器用户指南》

KMP_DISABLE_MEMKIND_INIT环境变量说明

Bisheng编译器5.0.0.2版本新增KMP_DISABLE_MEMKIND_INIT环境变量,详细说明,请参见表1

表1 KMP_DISABLE_MEMKIND_INIT环境变量说明

环境变量配置

说明

KMP_DISABLE_MEMKIND_INIT=true

将源码中OpenMP高带宽内存相关扩展接口(omp_high_bw_mem_alloc等)替换为DDR版本的实现,相关接口性能会受一定影响。

KMP_DISABLE_MEMKIND_INIT=false

将源码中OpenMP高带宽内存相关扩展接口(omp_high_bw_mem_alloc等)替换为memkind版本的实现,在具备高带宽内存的硬件平台上,相关接口具有更好性能。

Bisheng编译器中该环境变量默认配置为KMP_DISABLE_MEMKIND_INIT=false,维持原版本实现。但为优化OMP相关程序的初始化时间,在HPCKit Bisheng编译器相关环境变量脚本中,已将该变量配置为KMP_DISABLE_MEMKIND_INIT=true。若用户认为该配置影响业务性能,可通过修改Bisheng编译器对应的modulefile文件或setvars.sh文件,将环境变量修改为KMP_DISABLE_MEMKIND_INIT=false。

KMP_BLOCKTIME环境变量说明

KML_BLOCKTIME是LLVM/OpenMP运行时环境变量。该变量用于控制并行区域执行完毕后,工作线程在进入阻塞状态前保持自旋等待的主动轮询时长。

当程序离开一个并行区域时,工作线程不会立即释放CPU资源,而是进入自旋阶段以优化后续并行任务的响应延迟。其具体状态行为取决于KMP_BLOCKTIME的设定值

  • 在KMP_BLOCKTIME设定的时间内:线程保持活跃并积极轮询新任务。如果在期间有新的并行区域启动,线程可以迅速做出响应。
  • 超过KMP_BLOCKTIME时间后:如果依然没有新任务,线程就会进入睡眠状态,将CPU资源还给操作系统内核。此后如需再次触发,将引入系统内核开销。

保持OpenMP默认时长设置,请执行:

export KMP_BLOCKTIME=200ms

如有其他配置需要,可参照如下方式:

# 设置等待时间为 5 毫秒
export KMP_BLOCKTIME=5ms

# 设置等待时间为 500 微秒
export KMP_BLOCKTIME=500us

# 让工作线程永远保持活跃,不进入睡眠
export KMP_BLOCKTIME=infinite