独家首发!openEuler 主线集成 LuaJIT RISC-V JIT 技术

RISC-V SIG 预期随主线发布的 openEuler 23.09 创新版本会集成 LuaJIT RISC-V 支持。本次发版将提供带有完整 LuaJIT 支持的 RISC-V 环境并带有相关软件如 openResty 等软件的支持。

随着 RISC-V SIG 主线推动工作的进展,LuaJIT 和相关软件在 RISC-V 架构下的支持也被合入到 openEuler 主线代码中。这标志着,openEuler 将成为首个在主线分支为 LuaJIT 提供 RISC-V 架构支持的主流发行版。

LuaJIT 的优势与特点

LuaJIT 是一个高效的 Lua5.1 实现,有高效的解释器与优雅的即时编译引擎,拥有相较原版 Lua5.1 平均数倍的性能,不仅如此,它也有诸如 FFI、Bitop 扩展和部分 Lua 高版本的特性。基于以上原因,LuaJIT 被广泛使用,成为了事实上的 Lua5.1/5.2 运行时。

LuaJIT RISC-V 项目背景

LuaJIT RISC-V(简称 LJRV)是将 LuaJIT 移植到 64 位 RISC-V 平台上的项目,旨在为 RISC-V 平台提供一个高效的 Lua 运行时,让依赖 LuaJIT 的项目在 RISC-V 平台上也能无障碍运行。此前,相关工作在国内外各个开源发行版平台仍然属于技术空白。

技术挑战与工作进展

由于 LuaJIT 的核心部分使用汇编编写,移植到不同指令集平台中的复杂性很大。尤其是 LuaJIT 的 JIT 部分不依赖于如 LLVM 的通用编译框架,此前仅在 x86、ARM 等平台完成移植,而 RISC-V 指令集的移植工作尚未开始,大量依赖 LuaJIT 的软件包在 RISC-V 架构的各个发行版上或无法运行,或只能使用低速的原版 Lua5.1。

目前,中科院软件所成功移植了 LuaJIT 的大部分功能,包括 DynASM 动态汇编器,解释器运行时和 RISC-V 后端,现已通过 PUC Lua5.1 回归测试与 LuaJIT 回归测试。同时,可以在 RISC-V 64 平台上运行依赖 LuaJIT 的程序有 Sysbench,Neovim,OpenResty,LÖVE 等。已知存在的问题是 Unwinding 功能尚未充分移植,JIT 可能会出现一些未知的 bug。待相关工作完成与修复后,工程会进一步合入上游。

另外在 openEuler 主线上,一些依赖 luajit 的包,都是深度集成形式的,如 openResty,wrk 等,移植工作需要进行进一步适配。

合入 openEuler 主线

基于 LuaJIT 的移植成果,RISC-V SIG 打包了相关 patch 并且合入了 openEuler 的 LuaJIT master 分支。这意味着从即将发布的 openEuler 23.09 创新版本开始,openEuler 将原生支持 RISC-V 平台的 LuaJIT 以及相关生态软件包,这将是首个在主线分支为 LuaJIT 提供 RISC-V 架构支持的主流发行版。

同时,在 LuaJIT 开发工作的基础上,RISC-V SIG 也为 openResty 等 LuaJIT 强依赖的软件包提供了相应的支持,目前已合入主线。下图是依赖 LuaJIT 的开源游戏 Minetest 的运行演示图,基于的环境是 openEuler RISC-V 平台和 Unmatched 开发板。根据用户测试反馈,游戏画面流畅,操作延迟低。

图片

性能对比及结果展示

我们在 VisionFive 2 和 LicheePi 4A 上分别使用 PUC Lua5.1、LJRV 关闭 JIT、LJRV 开启 JIT,运行了 Lua-Benchmarks。在 TH1520 和 JH7110 环境的结果如下:

图片

图片

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/95903.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C# 试图加载格式不正确的程序。 (异常来自 HRESULT:0x8007000B)

C# 在调用Cdll时,可能会出现 :试图加载格式不正确的程序。 (异常来自 HRESULT:0x8007000B)这个错误。 一般情况下是C#目标平台跟Cdll不兼容,64位跟32位兼容性问题, a.客户端调用Cdll报的错则, 1)允许的话把C#客户端…

数据结构 -作用及基本概念

为什么要使用数据结构 学习数据结构是计算机科学和软件工程领域中非常重要的一门课程。以下是学习数据结构的几个重要原因: 组织和管理数据:数据结构提供了一种组织和管理数据的方式。通过学习不同的数据结构,你可以了解如何有效地存储和操作…

[dasctf]misc3 chrchrchr.pcapng

webshell 流量分析 php代码部分没啥看的,主要在标黄的部分,裁剪掉前面的字符可base解码 能看到在向a.txt中写入数据 wp # tshark.exe -r chrchrchr.pcapng -T fields -e urlencoded-form.value -Y "urlencoded-form.keyzd2ebbfb26dd" >…

xss前十二关靶场练习

目录 一、xss原理和分类 1.原理 2.分类:xss分为存储型和反射型以及dom型 (1)反射性 (2)存储型 (3)dom型 二、靶场关卡练习​编辑 1.第一关 2.第二关 3.第三关 4.第四关 5.第五关 6…

Rn实现省市区三级联动

省市区三级联动选择是个很频繁的需求,但是查看了市面上很多插件不是太老不维护就是不满足需求,就试着实现一个 这个功能无任何依赖插件 功能略简单,但能实现需求 核心代码也尽力控制在了60行左右 pca-code.json树型数据来源 Administrative-d…

【高效编程技巧】编程菜鸟和编程大佬的差距究竟在哪里?

🎬 鸽芷咕:个人主页 🔥 个人专栏: 《高效编程技巧》《C语言进阶》 ⛺️生活的理想,就是为了理想的生活! 文章目录 📋 前言1.如何写出好的代码?1.2 如何分析一个函数写的怎么样 2. 代码板式的重要性2.1 代码…

推荐个一行代码的Python可视化神器

学过Python数据分析的朋友都知道,在可视化的工具中,有很多优秀的三方库,比如matplotlib,seaborn,plotly,Boken,pyecharts等等。这些可视化库都有自己的特点,在实际应用中也广为大家使…

【LLM】chatglm-6B模型训练和推理

本篇文章记录下 chatglm-6B 训练和推理过程 环境:Ubuntu 20.04 1.13.0cu116 chatglm-6B 源代码仓库:链接 chatglm-6B 模型权重:链接 源代码及模型 clone 到本地 这里使用的是 THUDM 在 hugging face 开源的模型。 因为模型比较大&#xff…

《Python魔法大冒险》004第一个魔法程序

在图书馆的一个安静的角落,魔法师和小鱼坐在一张巨大的桌子前。桌子上摆放着那台神秘的笔记本电脑。 魔法师: 小鱼,你已经学会了如何安装魔法解释器和代码编辑器。是时候开始编写你的第一个Python魔法程序了! 小鱼:(兴奋地两眼放光)我准备好了! 魔法师: 不用担心,…

为什么删除Windows 11上的Bloatware可以帮助加快你的电脑速度

如果你感觉你的电脑迟钝,彻底清除软件会有所帮助,而且这个过程对Windows用户来说越来越容易。 微软正在使删除以前难以删除的其他预装Windows应用程序成为可能。专家表示,这项新功能可能会改变用户的游戏规则。 科技公司Infatica的主管Vlad…

Docker从认识到实践再到底层原理(二-1)|容器技术发展史+虚拟化容器概念和简介

前言 那么这里博主先安利一些干货满满的专栏了! 首先是博主的高质量博客的汇总,这个专栏里面的博客,都是博主最最用心写的一部分,干货满满,希望对大家有帮助。 高质量博客汇总 然后就是博主最近最花时间的一个专栏…

SourceTree 使用技巧

参考资料 SourceTree使用教程(一)—克隆、提交、推送SourceTree的软合并、混合合并、强合并区别SourceTree 合并分支上的多个提交,一次性合并分支的多次提交至另一分支,主分支前进时的合并冲突解决 目录 一. 基础设置1.1 用户信息…