独家首发!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.mzph.cn/news/65894.shtml

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

相关文章

Python|小游戏之猫捉老鼠!!!

最近闲(mang)来(dao)无(fei)事(qi),喜欢研究一些小游戏,本篇文章我主要介绍使用 turtle 写的一个很简单的猫捉老鼠的小游戏,主要是通过鼠标控制老鼠(Tom)的移动,躲避通过电脑控制的猫(Jerry)的追捕。 游戏主体思考逻辑&#xff1…

嵌入式开发-SPI通信介绍

SPI(Serial Peripheral Interface)是一种串行外设接口规范,它是由摩托罗拉公司制定的一种通讯协议。它广泛应用于微控制器、存储器和其他外设之间的通信。 SPI是一种同步串行通信协议,它支持四线通信: SCK&#xff0…

Aspose导出word使用记录

背景:Aspose系列的控件,功能实现都比较强大,可以实现多样化的报表设计及输出。 通过这次业务机会,锂宝碳审核中业务功需要实现Word文档表格的动态导出功能,因此学习了相关内容,在学习和参考了官方API文档的…

C#知识点、常见面试题

相关源码 https://github.com/JackYan666/CSharpCode/blob/main/CSharpCode.cs 0.简要概括 1.删除集合元素 1.For循环删除集合元素:从后面往前删除 从前往后删,有可能不能完全删除 #region 01.For循环删除集合元素void Test01_ForDelListElement(){//错误代码 虽然可以跑…

iSCSI存储服务器

目录 一、ISCSI是什么? 二、ISCSI产生背景 三、存储分类 四、ISCSI架构 五、ISCSI存储服务搭建案例 一、ISCSI是什么? ISCSI名为互联网小型计算机系统接口又称为IP-SAN,是一种新的远程存储技术,提供存储服务的目标服务器默认使用的…

【C++】学习STL中的stack和queue

❤️前言 今天这篇博客的内容主要关于STL中的stack、queue和priority_queue三种容器。 正文 stack和queue的使用方式非常简单,我们只要根据之前学习数据结构的经验和文档介绍就可以轻松上手。于是我们直接开始对它们的模拟实现。 stack和queue的模拟实现 stack和q…

大数据HBase学习圣经:一本书实现HBase学习自由

学习目标:三栖合一架构师 本文是《大数据HBase学习圣经》 V1版本,是 《尼恩 大数据 面试宝典》姊妹篇。 这里特别说明一下:《尼恩 大数据 面试宝典》5个专题 PDF 自首次发布以来, 已经汇集了 好几百题,大量的大厂面试…

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

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

Java-Optional类

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

[深度学习]大模型训练之框架篇--DeepSpeed使用

现在的模型越来越大,动辄几B甚至几百B。但是显卡显存大小根本无法支撑训练推理。例如,一块RTX2090的10G显存,光把模型加载上去,就会OOM,更别提后面的训练优化。 作为传统pytorch Dataparallel的一种替代,D…

基于java+springboot+vue的交流互动系统-lw

​ 系统介绍: 随着现在网络的快速发展,网上管理系统也逐渐快速发展起来,网上管理模式很快融入到了许多企业的之中,随之就产生了“交流互动系统”,这样就让交流互动系统更加方便简单。 对于本交流互动系统的设计来说&a…

继承【C++】

文章目录 继承的概念继承的定义继承方式和访问限定符继承基类成员访问方式的变化 默认继承方式 基类和派生类对象赋值转换继承中的作用域派生类的默认成员函数继承与友元静态成员菱形继承及菱形虚拟继承继承的方式 菱形虚拟继承菱形虚拟继承原理 继承的概念 继承(inheritance)…

【Unity笔记】TimeLine的详细使用介绍

文章目录 前言素材一、timeline基础介绍1. 打开timeline轨道面板2. 创建TimeLine轨道3. Timeline常用轨道4. 修改Timeline单位5. 锁定界面 二、timeline的通用轨道使用三、Cinemeachine虚拟相机结合Timeline实现场景移动四、DialogueTrack:自定义的对话轨道(自己编写…

swagger 接口测试,用 python 写自动化时该如何处理?

在使用Python进行Swagger接口测试时,可以使用requests库来发送HTTP请求,并使用json库和yaml库来处理响应数据。以下是一个简单的示例代码: import requests import json import yaml# Swagger API文档地址和需要测试的接口路径 swagger_url …

设计模式之原型模式

文章目录 概述克隆羊问题传统方式解决克隆羊问题传统的方式的优缺点原型模式原理结构图-uml 类图原理结构图说明 原型模式解决克隆羊问题的应用实例原型模式在Spring框架中的应用深入讨论-浅拷贝和深拷贝浅拷贝的介绍深拷贝基本介绍深拷贝应用实例注意事项 概述 原型模式&…

Linux - Docker 安装使用 常用命令 教程

Docker 官方文档地址: Get Started | Docker 中文参考手册: https://docker_practice.gitee.io/zh-cn/ 1.什么是 Docker 1.1 官方定义 最新官网首页 # 1.官方介绍 - We have a complete container solution for you - no matter who you are and where you are on your contain…

Linux学习之NAS服务器搭建

NAS是Network Attached Storage的缩写,也就是网络附属存储。可以使用自己已经不怎么使用的笔记本搭建一台NAS服务器。 fdisk -l可以看一下各个磁盘的状态。 可以看到有sda、sdb、sdc和sdd等四块硬盘。 lvs、vgs和pvs结合起来看,sdb和sdc没有被使用。 …

Mac“其他文件”存放着什么?“其他文件”的清理方法

很多Mac用户在清理磁盘空间时发现,内存占用比例比较大的除了有iCloud云盘、应用程序、影片、音频、照片等项目之外,还有一个“其他文件”的项目磁盘占用比也非常大,想要清理却无从下手。那么Mac“其他文件”里存放的是什么文件?我…

文本标注技术方案(NLP标注工具)

Doccano doccano 是一个面向人类的开源文本注释工具。它为文本分类、序列标记和序列到序列任务提供注释功能。您可以创建用于情感分析、命名实体识别、文本摘要等的标记数据。只需创建一个项目,上传数据,然后开始注释。您可以在数小时内构建数据集。 支持…

并发下的Map常见面试题

HashMap 和 HashTable 有什么区别?java中的另一个线程安全的与HashMap极其类似的类是什么?同样是线程安全,它与HashTable在线程同步上有什么不同?HashMap 与 ConcurrentHashMap的区别?为什么 ConcurrentHashMap 比 Has…