---
title: 毕昇编译器
description: "毕昇编译器是华为编译器实验室针对鲲鹏等通用处理器架构场景，打造的一款高性能、高可信及易扩展的编译器工具链，增强和引入了多种编译优化技术，支持C/C++/Fortran等编程语言及对应编程语言的OpenMP扩展。"
url: https://www.hikunpeng.com/document/detail/zh/kunpenghpcs/hpckit/devg/KunpengHPCKit_developer_005.html
sourcePath: /source/zh/kunpenghpcs/hpckit/devg/KunpengHPCKit_developer_005.html
indexId: 346813ce9ff966d6af39c694c04d1d586ad850f8e7f21c0ee8e7b3a6f6408f1d67
---
# 毕昇编译器

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

详情请参见《毕昇编译器用户指南》(https://www.hikunpeng.com/document/detail/zh/kunpengdevps/compilation/ug-bisheng/kunpengbisheng_06_0001.html)。

#### 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
```
