百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

.NET9 PreView2的重磅功能(.net5新功能)

cac55 2024-10-11 11:03 18 浏览 0 评论




前言

.NET9 PreView2发布了,它的CLR方面主要有两个重磅功能

  • RyuJIT 增强功能

  • Arm64 矢量化

下面分别看下

RyuJIT增强功能

1.环路优化

这种优化实际上是一种for循环叠加态的优化,for循环叠加计算的过程中,会对其中部分变量进行感应。比如循环中放置0扩展(第一个索引为0),这种优化灵感来源于LLVM标量演化。下面看例子,说明下这个优化:

[MethodImpl(MethodImplOptions.NoInlining)]static int Foo(int[] arr){ int sum = 0; for (int i = 0; i < arr.Length; i++) { sum += arr[i]; }
return sum;}

未优化前:

G_M8112_IG01: sub rsp, 40 ;; size=4 bbWeight=1 PerfScore 0.25G_M8112_IG02: xor eax, eax xor edx, edx mov r8d, dword ptr [rcx+0x08] test r8d, r8d jle SHORT G_M8112_IG04 align [0 bytes for IG03] ;; size=13 bbWeight=1 PerfScore 3.75G_M8112_IG03: mov r10d, edx add eax, dword ptr [rcx+4*r10+0x10] inc edx cmp r8d, edx jg SHORT G_M8112_IG03 ;; size=15 bbWeight=4 PerfScore 19.00G_M8112_IG04: add rsp, 40 ret  ;; size=5 bbWeight=1 PerfScore 1.25
; Total bytes of code 37, prolog size 4, PerfScore 24.25, instruction count 14, allocated bytes for code 37 (MethodHash=d1cce04f) for method ConsoleApp34.Program:Foo(int[]) :int (FullOpts); ============================================================

未优化前37字节,优化后:

G_M8112_IG01: ;; offset=0x0000 sub rsp, 40 ;; size=4 bbWeight=1 PerfScore 0.25G_M8112_IG02: ;; offset=0x0004 xor eax, eax mov edx, dword ptr [rcx+0x08] test edx, edx jle SHORT G_M8112_IG04 xor r8d, r8d align [0 bytes for IG03] ;; size=12 bbWeight=1 PerfScore 3.75G_M8112_IG03: ;; offset=0x0010 add eax, dword ptr [rcx+4*r8+0x10] inc r8d cmp edx, r8d jg SHORT G_M8112_IG03 ;; size=13 bbWeight=4 PerfScore 18.00G_M8112_IG04: ;; offset=0x001D add rsp, 40 ret  ;; size=5 bbWeight=1 PerfScore 1.25
; Total bytes of code 34, prolog size 4, PerfScore 23.25, instruction count 13, allocated bytes for code 34 (MethodHash=d1cce04f) for method ConsoleApp34.Program:Foo(int[]) :int (FullOpts)

优化后34字节,减少了3字节,优化的指令如下,刚好三字节。这里的优化点是减却寄存器置零或者赋值(称之为放置0扩展),进行共用。

mov 41 89 d2 r10d, edx

2.NativeAOT改进:内联+TLS

这种优化,需要了解一些知识点。假如一个类成员被多个线程访问,一般的访问的时候会设置锁,以避免数据干扰。但是,这同时也产生性能问题。为了提高性能,可以把这个类成员放到线程本地存储(TLS)当中,访问的时候直接去线程本地存储获取,这样极大提高了性能。

但是这还不够,我们需要把访问类成员的代码进行内联。进一步提高性能,不然怎么能叫极致性能优化呢?

代码:

: 90000000 adrp x0, 0 <System_Console_System_ConsoleKeyInfo____GetFieldHelper> 5a2f0: R_AARCH64_TLSDESC_ADR_PAGE21 tls_InlinedThreadStatics 5a2f4: 91000000 add x0, x0, #0x0 5a2f4: R_AARCH64_TLSDESC_ADD_LO12 tls_InlinedThreadStatics 5a2f8: d53bd041 mrs x1, tpidr_el0 5a2fc: f9400002 ldr x2, [x0] 5a2fc: R_AARCH64_TLSDESC_LD64_LO12 tls_InlinedThreadStatics 5a300: d63f0040 blr x2 5a300: R_AARCH64_TLSDESC_CALL tls_InlinedThreadStatics 5a304: 8b000020 add x0, x1, x0 5a308: f9400013 ldr x19, [x0]

2.PGO的改进:类型检查

PGO是.NET8的一大亮点,启用了动态配置文件引导优化 (PGO)。.NET9 Pre2扩展了PGO,以便分析更多的代码模式。启用分层编译后,RyuJIT 已经将检测插入到程序中以分析其行为;在使用优化重新编译时,RyuJIT 利用它在运行时构建的配置文件来做出特定于程序当前运行的决策。在预览版 2 中,RyuJIT 现在默认使用 PGO 数据来提高类型检查的性能。

一般来说,确定对象的类型需要调用运行时。这会带来一些性能上的损失,也就是说当进行类型检查的时候,运行时为了确保类型正确性,必须进行检查。通过.NET8里面启用的PGO,如果在PGO里面能够确定对象是某个类型,JIT就会用一个快速路径编码,以比较快速的方式进行类型检查。并且在必要的时候退回到慢速路径(常规检查)

bool IsList<T>(IEnumerable<T> source) => source is IList<T>;

如果PGO检测到source总是数组,则会快速路径返回true,否则慢速路径进行检测

if (source is int[]){ return true;}else{ return slow_path(); // Let the runtime figure it out}

ARM64矢量化

.NET9 Pre2支持了一种新的实现,利用JIT在Arm64上操作寄存器的加载和存储的能力。简单点来说,就是用SEE,YMM等一次性操控32字节或者64字节的寄存器处理更大量的数据,提升性能。



相关推荐

当SD卡/U盘一插入设备就提示格式化?可能导致的结果及解决方法。

编辑当SD卡一插入设备就提示格式化,通常意味着文件系统损坏或存储结构异常,但数据可能并未完全丢失。以下是可能的原因和恢复方法:一、为什么SD卡提示格式化?1、文件系统损坏突然断电、强制拔卡、病毒感染可...

sd卡格式化数据恢复(sd卡 格式化 恢复)

  在数字时代,SD卡作为我们存储照片、视频、文档等重要数据的便携设备,扮演着不可或缺的角色。然而,一旦不慎对SD卡进行了格式化操作,那些珍贵的记忆和数据似乎就在瞬间消失无踪。幸运的是,通过一些专业的...

怎样恢复内存卡数据(怎样恢复内存卡数据和文件)

  在数字时代,内存卡作为我们存储重要数据的便携设备,其安全性与数据恢复能力显得尤为重要。不慎删除文件、病毒感染或硬件故障都可能导致内存卡数据丢失,给个人和工作带来不便。本文将介绍几款国内外知名的数据...

sd卡损坏如何修复数据?sd卡修复方法详解

SD卡受损无法读取该怎么恢复?媒体从业者都知道,SD卡是数码相机、行车记录仪、摄像机等设备的文件存储器械。如果使用媒体设备的方式不正确,可能会导致内存卡损坏而无法正常读取文件。小编给大家分享5种简单好...

recovery功能详解,小白一秒变大神

一、说文解字1.Recovery是什么意思?相信这个问题难不住各位老鸟,recovery翻译过来就是“恢复”的意思,是开机后通过特殊按键组合(各个厂商各个型号不尽相同)能够进去的一个系统(工程模式),...

无法从SD卡中删除文件怎么办?(sd卡显示无法删除文件)

在使用SD卡时,有时我们会无法从SD卡中删除文件,那么这该怎么办呢?下面我们就一起来了解一下吧。方式1.检查SD卡(读卡器)上的写保护选项卡对于某些SD卡,SD卡的一侧可能有一个开关,并有标有Loc...

相机SD卡照片数据不小心全部删除了怎么办?有什么方法恢复吗?

前几天,小编在后台友收到网友反馈说他在整理相机里的SD卡,原本是想把那些记录着美好瞬间的照片导出来慢慢欣赏。结果手一抖,不小心点了“删除所有照片”,等他反应过来,屏幕上已经显示“删除成功”。那一刻,他...

Win10手机版系统分区拼接:减少空间不足错误

IT之家讯微软WinHec大会正在深圳如火如荼的进行中,在今天的大会中,微软为我们提供了更多关于Win10的相关信息。Win10手机预览版已经发布许久,相信许多用户都对其印象深刻,而第一版Win10...

SD卡打不开是怎么回事?SD卡打不开里面数据怎样恢复

SD卡已经成为了移动设备和数码相机中受欢迎的存储选项之一。但是使用过程中难免会遇到一些问题,例如SD卡突然打不开了,并且无法访问其中的数据。这种情况常常让人感到烦恼和无助。但是不要紧张,下面我们将介绍...

误删、格式化SD卡数据还能恢复吗?教你一招快速恢复

在我们的日常生活中,说到SD卡,相信使用相机的小伙伴都很熟悉,SD卡是一种便携式数据存储工具,独立小巧,价格低廉,方便用于存储和转移数据。为此大家常常用SD卡来存储各种珍贵的数据,如照片、视频、重要文...

内存卡数据恢复,四种恢复方法全解析

内存卡数据恢复,四种恢复方法全解析旅行归来,满心欢喜准备导出相机内存卡中的绝美风景照,却发现文件全部丢失;着急使用手机里内存卡储存的工作资料,打开却空空如也……类似的内存卡数据丢失场景,想必不少人都...

电脑删除的内存卡文件怎么找回?SD卡数据恢复,小白也能学会

电脑删除的内存卡文件怎么找回?SD卡数据恢复,小白也能学会在日常使用中,SD卡因其便携性和大容量,成为存储照片、视频、文件的常用设备。但不小心删除文件或遭遇数据丢失的情况也时有发生,别担心,本文就来...

手机老说sd卡存储空间满了,这如何处理

安卓手机显存已满是所有安卓机友的恶梦。轻则造成部份小型游戏难以进行,重则造成连收邮件这样的基本功能都难以运行。究其缘由,是由于手机会界定一部份固定的储存作为手机应用软件的数据储存,通常是/data或则...

在Windows操作系统中克隆SD卡的简单方法!

如今,在数据备份和传输方面,SD卡克隆软件发挥着重要作用。本文将向大家介绍一款好用的WindowsSD卡克隆软件,可以帮助你轻松将数据克隆到新卡中。为什么需要在Windows中进行SD卡克隆?在许多...

sd卡深度清理后怎样恢复数据?实用的三个方法

在现代社会,SD卡已经成为了我们生活中不可或缺的存储设备,从数码相机到智能手机,从平板电脑到电子阅读器,SD卡在其中起到了重要的作用。然而,当SD卡出现数据丢失的问题时,我们该如何应对呢?尤其是在进行...

取消回复欢迎 发表评论: