当前位置:首页 > 技术 > 正文内容

毕昇编译器循环优化实践

访客 技术 2026年8月15日 1

毕昇编译器循环优化实践

本文介绍如何使用毕昇编译器在 openEuler 系统上进行循环优化,通过实际案例展示性能提升的过程。

环境准备

实验需要以下环境:

  • 系统:openEuler 22.03 LTS SP3
  • 架构:AArch64
  • 内存:8GB以上

服务器配置

以下是云服务器的推荐配置:

配置项配置值
计费模式按需计费
区域/可用区华北-北京四 | 可用区1
实例规格鲲鹏通用计算增强型 | kc1.xlarge.4 | 4vCPUs | 16GiB
操作系统镜像openEuler-22.03-LTS-SP3 (aarch64)(V22.03)
系统盘通用型SSD, 50GiB

连接服务器

使用SSH命令连接服务器:

ssh root@<服务器公网IP>

安装毕昇编译器

添加源

执行以下命令添加毕昇编译器的软件源:

dnf config-manager --add-repo https://repo.oepkgs.net/openeuler/rpm/openEuler-22.03-LTS/extras/aarch64/

更新源索引

运行以下命令更新软件包索引:

dnf update --nogpgcheck

安装编译器

安装BiShengCompiler:

dnf install BiShengCompiler.aarch64 --nogpgcheck

AutoTuner 工具安装

首先确保Python版本为3.11以上。如果需要,可以自行编译安装Python3.11:

sudo dnf groupinstall "Development Tools" -y
sudo dnf install openssl-devel bzip2-devel libffi-devel xz-devel sqlite-devel -y
wget https://registry.npmmirror.com/-/binary/python/3.11.9/Python-3.11.9.tgz
tar -xf Python-3.11.9.tgz
cd Python-3.11.9
./configure --enable-optimizations
make -j $(nproc)
sudo make altinstall

创建并激活虚拟环境:

python3.11 -m venv ~/autotuner_env
source ~/autotuner_env/bin/activate

实验一:循环展开

测试代码

编写一个包含密集计算的循环程序:

#include <stdio.h>

#define N 10000000

int main() {
    int sum = 0;
    for (int i = 0; i < N; i++) {
        sum += i % 10;
    }
    printf("%d\n", sum);
    return 0;
}

编译与优化

使用AutoTuner工具进行调优:

clang -O2 -o test_unroll test.c -fautotune-generate
export AUTOTUNE_DATADIR=~/autotune_data/
llvm-autotune minimize
for i in $(seq 10); do
    clang -O2 -o test_autotuned test.c -fautotune
    time_cost=$(./test_autotuned)
    llvm-autotune feedback $time_cost
done
llvm-autotune finalize
clang -O2 -o test_final test.c -fautotune

实验二:循环合并

编写两个独立的循环,并使用AutoTuner工具进行优化,步骤与实验一类似。

实验三:强度削弱

编写一个包含乘法运算的循环程序,并观察编译器是否将其替换为加法运算。

实验四:循环分块

编写矩阵乘法程序,并观察不同优化等级下的性能差异。

标签: openEuler

相关文章

Linux crontab 详解

1) crontab 是什么cron 是 Linux 的定时任务守护进程;crontab 是用来编辑/查看“按时间周期执行命令”的表(cron table)。常见两类:用户 crontab:每个用户一份(crontab -e 编辑)系统级 crontab / cron.d:可指定执行用户(/etc/crontab、/etc/cron.d/*)2) crontab 时间...

富文本里可以允许的 HTML 属性

一、所有标签默认允许的安全属性(极少)class        (可选)id           (通常建议禁用)title️ 注意:id 容易被滥用做锚点注入,很多系统直接禁用class 允许的话最好只允许固定前缀(如 editor-*)二、a 标签允许属性<a href="" t...

Mac 安装 Node.js 指南

方法一:通过官网安装包(最简单,适合初学者)如果你只是想快速安装并开始使用,这是最直接的方法。访问 Node.js 官网。页面会显示两个版本:LTS (Recommended For Most Users):长期支持版,最稳定。建议选这个。Current:最新特性版,包含最新功能但可能不够稳定。下载 .pkg 安装包并运行。按照安装向导点击“下一步”即可完成。方法二:使用 Homebrew 安装(...

Dom\HTML_NO_DEFAULT_NS 的副作用:自动加闭合标签

在使用Dom\HTMLDocument时,Dom\HTML_NO_DEFAULT_NS 将禁止在解析过程中设置元素的命名空间, 此设置是为了与DOMDocument向后兼容而存在的。当使用它时,已知的一个副作用就是:自动加闭合标签例如 </img> 为什么会这样?当你使用:Dom\HTML_NO_DEFAULT_NS文档会变成 无命名空间模式,此时内部更接近 XML...

Laravel 事件和监听器创建

在 Laravel 中,使用 Artisan 命令创建 Events(事件) 和 Listeners(监听器) 是非常高效的。你可以通过以下几种方式来实现:1. 手动创建单个 Event如果你只想创建一个事件类,可以使用 make:event 命令:Bashphp artisan make:event UserRegistered执行后,文件将生成在 app/Even...

自定义域名解析神器 dnsmasq

什么是 dnsmasq?dnsmasq 是一个轻量级、功能强大的网络服务工具,专为小型和中等规模网络设计。它是一个综合的网络基础设施解决方案[1]。dnsmasq 能做什么?功能说明应用场景DNS 转发与缓存将 DNS 查询转发到上游服务器(ISP、Google DNS 等),并在本地缓存结果加快 DNS 查询速度,减少外部 DNS 流量本地 DNS解析本地网络设备的主机名,无需编辑&n...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。