SPMD တိုးချဲ့မှုများပါရှိသော C ဘာသာစကားအတွက် Intel မှ ဖန်တီးထားသည့် ISPC 1.26 စုစည်းမှုအား ဖြန့်ချိခြင်း

Intel သည် မတူညီသော ပရိုဂရမ်၏ instance များစွာကို မတူညီသော input data အစုံဖြင့် အပြိုင်လုပ်ဆောင်နိုင်စေသည့် C code ကို SPMD (Single Program, Multiple Data) parallel programming extensions များဖြင့် စုစည်းရန် ISPC 1.26 (Implicit SPMD Program Compiler) ကို ထုတ်ဝေထားပါသည်။ ပရောဂျက်ကုဒ်ကို C++ ဖြင့် ရေးသားထားပြီး BSD လိုင်စင်အောက်တွင် ဖြန့်ဝေထားသည်။ Linux၊ Windows၊ macOS နှင့် FreeBSD တွင် အလုပ်လုပ်ရန် ပံ့ပိုးပေးသည်။

SPMD တိုးချဲ့မှုများပါရှိသော C ပရိုဂရမ်များကို CPU နှင့် GPU မှပေးဆောင်သော SIMD တွက်ချက်မှုယူနစ်များတွင် လုပ်ဆောင်ရန်အတွက် စုစည်းထားပြီး၊ အဆင့်နိမ့်သောပိုမိုကောင်းမွန်အောင်ပြုလုပ်ခြင်းများနှင့် SIMD ညွှန်ကြားချက်များကို တိကျပြတ်သားစွာအသုံးပြုခြင်းမရှိဘဲ SIMD vectorization ယန္တရားများကို အသုံးပြုခွင့်ပေးသည်။ Parallelizable functions များကိုရေးရန်၊ C language ၏ ရင်းနှီးသော syntax နှင့် idioms များကို အသုံးပြုသည် - SPMD လုပ်ဆောင်ချက်များသည် C/C++ တွင်ရေးသားထားသော functions များနှင့် structures များနှင့် တိုက်ရိုက် အပြန်အလှန်သက်ရောက်မှုရှိသည်။ ပရိုဂရမ်များကို အမှားရှာရန် ရှိပြီးသား အမှားရှာများကို အသုံးပြုနိုင်သည်။

ISPC သည် LLVM အခြေခံအဆောက်အအုံအား ကုဒ်ထုတ်လုပ်ခြင်းနှင့် ပိုမိုကောင်းမွန်အောင်ပြုလုပ်ခြင်းအတွက် နောက်ကွယ်တွင် အသုံးပြုသည်။ x86 (SSE2၊ SSE4၊ AVX၊ AVX2၊ AVX512) နှင့် ARM (NEON) vector ညွှန်ကြားချက်များကို ပံ့ပိုးပေးထားပြီး GPU ဘက် (Intel Gen9 နှင့် Xe) သို့ တွက်ချက်မှုများကို offloading လုပ်ထားသည်။ SSE vector blocks များဖြင့် တစ်ကြိမ်လျှင် element 4 ခုကို processing လုပ်ထားသော architectures တွင်၊ ISPC ကိုအသုံးပြုခြင်းသည် program execution acceleration ကို 3 ကြိမ် သို့မဟုတ် ထို့ထက်ပို၍အောင်မြင်နိုင်စေသည်၊ နှင့် AVX vector blocks များဖြင့် တစ်ကြိမ်လျှင် element 8 ခုကို processing လုပ်သော အရှိန်အဟုန်သည် 5- သို့ရောက်ရှိနိုင်သည်။ ၆ ကြိမ်။ ထို့အပြင်၊ vector block ၏အရွယ်အစားအပြင်၊ မတူညီသောပရိုဆက်ဆာ cores များပေါ်တွင်လုပ်ဆောင်ခြင်းဖြင့်စကေးချဲ့ခြင်းကိုသေချာစေသည်။

ISPC ဗားရှင်း 1.26 တွင် ထည့်သွင်းထားသော အဓိက တီထွင်ဆန်းသစ်မှုများ-

  • ARM ဗိသုကာအတွက် ပိုမိုကောင်းမွန်သော ပံ့ပိုးမှု-
    • "--arch=arm" အလံ၏ အပြုအမူကို ပြောင်းလဲခဲ့ပြီး၊ ယခု ARMv8 (32-ဘစ်) ဗိသုကာနှင့် ဆက်နွယ်နေသည့် ARMv7 (8-bit မုဒ်တွင် ARMv64 အတွက်၊ "--arch=aarch64" အလံကို ဆက်လက်အသုံးပြုသင့်သည်)။
    • ARMv7 Cortex-a9 နှင့် Cortex-a15 ပရိုဆက်ဆာများအတွက် ပံ့ပိုးမှုကို ရပ်ဆိုင်းလိုက်ပါပြီ။
    • Cortex-a55၊ Cortex-a78၊ Cortex-a510၊ Cortex-a520 ပရိုဆက်ဆာများအပြင် Apple ARM ပရိုဆက်ဆာအသစ်များအတွက် ပံ့ပိုးမှု ထပ်ထည့်ထားသည်။
    • အသစ်ထည့်သွင်းထားသော တည်ဆောက်မှုပစ်မှတ်များ- နီယွန်-i16x16 နှင့် နီယွန်-i8x32။
    • ARM SDOT နှင့် UDOT vector ညွှန်ကြားချက်များကို အခြေခံ၍ လုပ်ဆောင်ချက်များအတွက် ပံ့ပိုးမှု ထပ်လောင်းထည့်ထားပါသည်။
    • ပိုမိုကောင်းမွန်အောင် လုပ်ဆောင်ပြီးပြီ၊ ARMv8 အတွက် စွမ်းဆောင်ရည်သည် ပျမ်းမျှအားဖြင့် 13% တိုးလာသည်။
  • တည်ဆောက်မှုပစ်မှတ် အမျိုးအစားအသစ်ကို ထည့်သွင်းထားသည် - "ယေဘူယျ" သည် compiler ၏ အတွင်းပိုင်းဗိသုကာကို အကောင်းဆုံးဖြစ်အောင်လုပ်ပြီး တည်ဆောက်မှုပစ်မှတ်အသစ်များ ထပ်ပေါင်းထည့်ခြင်းကို ရိုးရှင်းစေသည်။ အိုင်ဒီယာသည် တိကျသော ဟာ့ဒ်ဝဲစွမ်းရည်များအတွက် အခြေခံပစ်မှတ်များကို ပံ့ပိုးပေးရန်ဖြစ်ပြီး၊ တိကျသော ပိုမိုကောင်းမွန်အောင်လုပ်ဆောင်နိုင်သည့် ပစ်မှတ်များကို အလွယ်တကူ တည်ဆောက်နိုင်သည်။ ARM ဗိသုကာအတွက် ပံ့ပိုးမှုသည် ယေဘူယျပစ်မှတ်များကို အသုံးပြုခြင်းသို့ ပြောင်းထားသည်။
  • "-O1" ပိုမိုကောင်းမွန်အောင်လုပ်ဆောင်မှုမုဒ်တွင် ရလဒ်ကုဒ်၏အရွယ်အစားကို လျှော့ချရန်အတွက် ကုဒ်ထုတ်လုပ်သူသည် ၎င်း၏ကွင်းဆက်နှင့် လုပ်ဆောင်ချက်ကို ပြန်ဖွင့်ရန် ချိန်ညှိထားသည်။ Built-in လုပ်ဆောင်ချက် count_leading_zeros နှင့် count_trailing_zeros အတွက် ပိုမိုကောင်းမွန်သော ကုဒ်ထုတ်လုပ်ခြင်းအပြင် လုပ်ဆောင်ချက်များမှ ဖွဲ့စည်းပုံများကို ပြန်ပေးသည့်အခါနှင့် int8/int16 အမျိုးအစားများဖြင့် ဒေတာကို သိမ်းဆည်းခြင်း သို့မဟုတ် တင်သည့်အခါတွင် ပိုမိုကောင်းမွန်လာပါသည်။
  • "--enable-llvm-intrinsics" အလံကို သတ်မှတ်ခြင်းဖြင့် ဖွင့်ထားသည့် LLVM ပင်ကိုယ်ပိုင်းအတွက် ပံ့ပိုးမှု တိုးချဲ့ထားသည်။
  • LLVM toolchain ကို ဖာထေးမှုများဖြင့် ဗားရှင်း 18.1.8 သို့ အပ်ဒိတ်လုပ်ထားသည်။ ISPC တွင်အသုံးပြုသည့် LLVM ဗားရှင်းကိုရှာဖွေရန် မက်ခရိုကို ထည့်ထားသည်။
  • လုပ်ဆောင်ချက်ကို ခေါ်သောအခါ သတိပေးချက်ကို ပရင့်ထုတ်ရန်အတွက် "__attribute__((ရပ်ဆိုင်းထားသည်))" ရည်ညွှန်းချက်ကို အသုံးပြုရန် ခွင့်ပြုထားသည်။
  • တည်ဆောက်မှုပစ်မှတ် avx512knl-x16 (KNL) ကို ဖယ်ရှားခဲ့သည်။
  • macOS နှင့် iOS အတွက် ပစ်မှတ်ပလက်ဖောင်း၏ အနည်းဆုံး ပံ့ပိုးပေးထားသော ဗားရှင်းကို သတ်မှတ်ရန် "--darwin-version-min" ရွေးစရာကို ထည့်ထားသည်။

source: opennet.ru

မှတ်ချက် Add