独家首发!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 环境的结果如下:

图片

图片

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Spring Boot中通过maven进行多环境配置

上文 java Spring Boot将不同配置拆分入不同文件管理 中 我们说到了,多环境的多文件区分管理 说到多环境 其实不止我们 Spring Boot有 很多的东西都有 那么 这就有一个问题 如果 spring 和 maven 都配置了环境 而且他们配的不一样 那么 会用谁的呢? 此…

设计模式—外观模式(Facade)

目录 一、什么是外观模式? 二、外观模式具有什么优点吗? 三、外观模式具有什么缺点呢? 四、什么时候使用外观模式? 五、代码展示 ①、股民炒股代码 ②、投资基金代码 ③外观模式 思维导图 一、什么是外观模式?…

基于JavaWeb和mysql实现校园订餐前后台管理系统(源码+数据库)

一、项目简介 本项目是一套基于JavaWeb和mysql实现网上书城前后端管理系统,主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的Java学习者。 包含:项目源码、项目文档、数据库脚本等,该项目附带全部源码可作为毕设使用。 项目都…

python conda实践 sanic框架gitee webhook实践

import subprocess import hmac import hashlib import base64 from sanic.response import text from sanic import Blueprint from git import Repo# 路由蓝图 hook_blue Blueprint(hook_blue)hook_blue.route(/hook/kaifa, methods["POST"]) async def kaifa(req…

使用栈检查括号的合法性 C 实现

使用栈检查括号的合法性 思路讲解:首先从数组数组0下标开始,如果是左括号直接无脑压入栈,直到出现右括号开始判断合法与否。遇到右括号分两种情况,第一种是空栈的情况,也就是说我们第一个字符就是右括号,那…

ShardingSphere——弹性伸缩原理

摘要 支持自定义分片算法,减少数据伸缩及迁移时的业务影响,提供一站式的通用弹性伸缩解决方案,是 Apache ShardingSphere 弹性伸缩的主要设计目标。对于使用单数据库运行的系统来说,如何安全简单地将数据迁移至水平分片的数据库上…

shiro550漏洞分析

准备工作 启动该项目 可以看到没有登录时候,cookie中没有rememberme字段 登录时候 当账号密码输入正确时候 登录后存在该字段 shiro特征: 未登陆的情况下,请求包的cookie中没有rememberMe字段,返回包set-Cookie⾥也没有del…

Java-Optional类

概述 Optional是JAVA 8引入的一个类,用于处理可能为null的值。 利用Optional可以减少代码中if-else的判断逻辑,增加代码的可读性。且可以减少空指针异常的发生,增加代码的安全性。 常用的方法 示例 代码 public class OptionalTest {pub…

Spark有两种常见的提交方式:client 模式和 cluster 模式对机器 CPU 的影响

Spark有两种常见的提交方式:client 模式和 cluster 模式。这两种方式对机器 CPU 的影响略有不同 ,请参考以下说明 Client 模式: 在 Client 模式下,Spark Driver 运行在提交任务的客户端节点上(即运行 spark-submit 命…

一种改进多旋翼无人机动态仿真的模块化仿真环境研究(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

Swift 如何从图片数据(Data)检测原图片类型?

功能需求 如果我们之前把图片对应的数据(Data)保持在内存或数据库中,那么怎么从 Data 对象检测出原来图片的类型呢? 如上图所示:我们将 11 张不同类型的图片转换为 Data 数据,然后从 Data 对象正确检测出了原图片类型。 目前,我们的代码可以检测出 jpeg(jpg), tiff,…

实际并行workers数量不等于postgresql.conf中设置的max_parallel_workers_per_gather数量

1 前言 本文件的源码来自PostgreSQL 14.5,其它版本略有不同并行workers并不能显箸提升性能。个人不建议使用并行worker进程,大多数情况下采用postgresql.conf默认配置即可。 PostgreSQL的并行workers是由compute_parallel_worker函数决定的&#xff0c…

无涯教程-Android - AutoCompleteTextView函数

AutoCompleteTextView是一个类似于EditText的视图,只是它在用户键入时自动显示补充数据。 AutoCompleteTextView - 属性 以下是与AutoCompleteTextView控件相关的重要属性。您可以查看Android官方文档以获取属性的完整列表以及可以在运行时更改这些属性的相关方法。…

【人工智能】—_维度灾难、降维、主成分分析PCA、获取旧数据、非线性主成分分析

文章目录 高维数据与维度灾难维度灾难降维为什么需要降维?PRINCIPLE COMPONENT ANALYSIS主成分的几何图像最小化到直线距离的平方和举例主成分的代数推导优化问题计算主成分(Principal Components, PCs)的主要步骤获取旧数据的方法&#xff1…

ChatGPT插件的优缺点

虽然西弗吉尼亚大学的研究人员看到了最新的官方ChatGPT插件——名为“代码解释器”( Code Interpreter)的教育应用潜力,但他们也发现,对于使用计算方法处理针对癌症和遗传疾病的定向治疗的生物数据的科学家来说,这款插…

Python钢筋混凝土结构计算.pdf-T001-混凝土强度设计值

以下是使用Python求解上述问题的完整代码: # 输入参数 f_ck 35 # 混凝土的特征抗压强度(单位:MPa) f_cd 25 # 混凝土的强度设计值(单位:MPa) # 求解安全系数 gamma_c f_ck / f_cd # …

MySQL分页查询详解:优化大数据集的LIMIT和OFFSET

最近在工作中,我们遇到了一个需求,甲方要求直接从数据库导出一个业务模块中所有使用中的工单信息。为了实现这一目标,我编写了一条SQL查询语句,并请求DBA协助导出数据。尽管工单数量并不多,只有3000多条,但…

[CISCN 2019初赛]Love Math

文章目录 前言考点解题过程 前言 感慨自己实力不够,心浮气躁根本做不来难题。难得这题对我还很有吸引力,也涉及很多知识。只能说我是受益匪浅,总的来说加油吧ctfer。 考点 利用php动态函数的特性利用php中的数学函数实现命令执行利用php7的特…

两个pdf文件合并为一个怎么操作?分享pdf合并操作步骤

不管是初入职场的小白,还是久经职场的高手,都必须深入了解pdf,特别是关于pdf的各种操作,如编辑、合并、压缩等操作,其中合并是这么多操作里面必需懂的技能之一,但是很多人还是不知道两个pdf文件合并为一个怎…

C++------vector【STL】

文章目录 vector的介绍及使用vector的介绍vector的使用 vector的模拟实现 vector的介绍及使用 vector的介绍 1、vector是表示可变大小数组的序列容器。 2、就像数组一样,vector也采用的连续存储空间来存储元素。也就是意味着可以采用下标对vector的元素进行访问和数…