CRC6.13C checksum ကိုရှာဖွေခြင်းအတွက် ပြန်လည်ပြင်ဆင်ထားသော အကောင်အထည်ဖော်မှုပါရှိသော patch ကို Linux 32 kernel ၏ အနာဂတ်ဌာနခွဲတွင် ထည့်သွင်းရန် အဆိုပြုထားသည်။ CRC32C အကောင်အထည်ဖော်မှုကုဒ်ကို ခန့်မှန်းခြေအားဖြင့် 10 ဆ (4546 bytes မှ 418 bytes) သို့ လျှော့ချထားသည်။ Spectre တိုက်ခိုက်မှုများကို ပိတ်ထားသည့်အတွက် retpoline အကာအကွယ်ဖြင့်၊ အကောင်အထည်ဖော်မှုအသစ်ကို အသုံးပြုသည့်အခါ စွမ်းဆောင်ရည်သည် AMD Zen 11.8 ပရိုဆက်ဆာများတွင် 2%၊ Intel Emerald Rapids တွင် 6.4% နှင့် Intel Haswell ပရိုဆက်ဆာများတွင် 4.8% အထိ တိုးလာပါသည်။ retpoline ကိုဖွင့်ထားသောအခါတွင်၊ စွမ်းဆောင်ရည်ပိုမိုသိသာလာပြီး Intel Emerald Rapids ပရိုဆက်ဆာများပါသည့်စနစ်များတွင် 66.8%၊ Intel Haswell ပရိုဆက်ဆာများတွင် 35.0% နှင့် AMD Zen 29.5 ပရိုဆက်ဆာများတွင် 2% အထိရောက်ရှိသည် | 512 | 833 | 1024 | 2000 | 3173 | 4096 | —————+——-+——-+——-+—— +——-+——-+ Intel Haswell | 35.0% | 20.7% | 17.8% | 9.7% | -0.2% | 4.4% | Intel Emerald Rapids | 66.8% | 45.2% | 36.3% | 19.3% | 0.0% | 5.4% | AMD Zen 2 | 29.5% | 17.2% | 13.5% | 8.6% | -0.5% | 2.8% | retpoline ပိတ်ထားသည်- | 512 | 833 | 1024 | 2000 | 3173 | 4096 | —————+——-+——-+——-+—— +——-+——-+ Intel Haswell | 3.3% | 4.8% | 4.5% | 0.9% | -2.9% | 0.3% | Intel Emerald Rapids | 7.5% | 6.4% | 5.2% | 2.3% | -0.0% | 0.6% | AMD Zen 2 | 11.8% | 1.4% | 0.2% | 1.3% | -0.9% | -0.2% |
မူရင်း CRC32C တွင် unrolled loop ၁၂၈ ခု ပါဝင်သောကြောင့် codebase အတော်လေး ကြီးမားလာပါသည်။ ခေတ်မီပရိုဆက်ဆာများ အစီအစဉ်မကျသော ညွှန်ကြားချက်လုပ်ဆောင်မှု ပံ့ပိုးမှုသည် ညွှန်ကြားချက်များကို parallel လုပ်ဆောင်မှုပြုလုပ်ရန် ခွင့်ပြုသော်လည်း၊ loop များတွင် branch ညွှန်ကြားချက်များကို အကောင်းဆုံးဖြစ်အောင်ပြုလုပ်ခြင်းသည် မလိုအပ်ဘဲ ကုဒ်များ အလွန်အကျွံကြီးမားစေခဲ့သည်။ ထပ်ခါထပ်ခါလုပ်ဆောင်ခြင်း ၁၂၈ ခုအစား၊ ဗားရှင်းအသစ်သည် ၄ ခုသာအသုံးပြုပြီး ကုဒ်အရွယ်အစားကို သိသိသာသာလျှော့ချပေးရုံသာမက လုပ်ဆောင်မှုကိုလည်း အရှိန်မြှင့်ပေးခဲ့သည်။
source: opennet.ru
