10天前,FFmpeg
今天,龙芯开源社区又发布了基于OpenJDK17的龙芯平台Java环境。
FFmpeg是被影音类软件大量使用的一个开源库,主要功能是编码、解码各种音频视频文件。几乎可以编码和解码所有的音视频格式、支持大量“滤镜”效果、支持硬件编码解码。市面上大多数的影音编辑类、影音播放类软件都以它为基础来实现更加丰富的功能。
以前龙芯的电脑上使用的FFmpeg是龙芯自己维护的分支,现在龙芯的LoongArch架构已经进入FFmpeg主线支持。像对x86、arm的支持一样,今后FFmpeg添加任何新功能、新特性也都会第一时间支持LoongArch。
FFmpeg在x86、arm架构的CPU上运行效率很高,因为代码中存在大量的针对x86、arm优化的汇编代码。在其它架构的CPU上,则主要使用c/c++的代码来替代这些更加优化的汇编代码,因此即使CPU性能相当,实际运行效率也会低很多。龙芯之前对自己维护的分支也添加了不少汇编代码优化,但总体上没有达到x86、arm的程度。在LoongArch进入FFmpeg主线之后,相信会有更多的开发者对其进行完善,使代码优化水平逐渐达到与x86、arm相当的程度。
Java是一种开发语言,也是一种程序运行环境。任何平台只要拥有符合规范的Java虚拟机软件,就可以运行使用Java语言开发的应用程序。Java程序跨平台运行时,不需要像C/C++这样的语言那样必须重新编译,也比解释型的脚本语言具有更高的运行效率。OpenJDK就是Java的功能包,提供Java程序开发和运行所需的各种API、Java虚拟机等基础环境。运行于龙芯平台上的Java虚拟机由龙芯团队开发和维护,并负责向最新版本OpenJDK增加对龙芯平台的支持。
以下内容来自龙芯中科
年1月27日,龙芯中科于龙芯开源社区正式对外发布基于OpenJDK17的龙芯平台Java环境。Java17提供了数千种性能、稳定性和安全性更新,以及14个JEP(JDKEnhancementProposal,即JDK增强建议)来进一步优化Java语言和平台,从而帮助开发人员提高工作效率。
Java17是Oracle最新发布的长期支持(Long-TermSupport,LTS)版本[1]。关于Java17更详细的内容请见下方Oracle
龙芯平台Java17环境经过验证符合JavaSE17,新应用程序和现有应用程序无需修改即可运行。
支持C1编译器和分层编译
C2编译器(ServerCompiler)主要满足了Java应用的峰值性能需求,此次发布的LoongArch64平台环境支持C1编译器(ClientCompiler)和分层编译,可进一步满足对启动性能有要求的Java应用,比如桌面应用。通过实测,龙芯平台开启C1和分层编译之后,部分应用得到了显著提升:Eclipse启动时间减少16.4%,NetBeans启动时间减少20.1%,SPECjvm中的startup项提升13.4%,Dacapo中luindex和fop用时分别降低31.9%和29.2%。
LoongArch向量指令优化
此次版本通过使用LoongArch向量指令对C2编译器进行了自动向量化优化,同时还进行了VectorAPI的硬件支持。通过实测,开启向量优化后,在LoongArch64平台上SPECjvm中的scimark.lu.small提升了.7%,JMHMicrobenchmarks含有Vector关键字的项测试中,计时类测试中有39项用时降低1/2以上,吞吐量类测试中有26项提升2倍以上、其中最高项提升了倍以上。
支持ZGC
ZGC(TheZGarbageCollector),是一款低延迟垃圾回收器,它的设计目标包括[3]:
●亚毫秒级最大停顿时间
●暂停时间不随堆的大小、存活集及根集的大小的增加而增加
●支持8MB至16TB级别的堆大小
通过实测,龙芯平台(LoongArch64)开启ZGC后,在3CL双路上SPECjbbmax-jOPS提升27.8%,critical-jOPS提升%以上。
加解密类优化
此次版本通过Intrinsics方式使用LoongArch基础指令对SHA1、SHA、AES、MD5以及CRC32相关API进行优化。这些优化对SPECjvm中的crypto等项目有显著提升效果。
数组拷贝优化
此次版本针对LoongArch进行了数组拷贝相关操作的重构和优化。通过JMHMicrobenchmarks测试显示,org.openjdk.bench.java.lang.ArrayCopy相关测试用例优化后平均执行时间下降33%,最多项下降了76.77%,SPECjvm中的serial项优化后提升了6%以上。
原子指令优化
此次版本通过使用LoongArch原子访存指令减少了内存屏障指令的使用,对volatile相关操作实现了优化。
后期规划
除了上述优化以外,此次发布的版本还包含针对龙芯平台的一些故障修复。这些优化和故障修复中的部分内容已集成至龙芯平台低版本JDK中,更多内容会根据情况陆续集成至低版本JDK中。