စုစည်းမှုလုပ်ငန်းစဉ်ကို GCC သို့ အပြိုင်အပြိုင်ပြုလုပ်ရန် ပံ့ပိုးကူညီမည့် ပရောဂျက်

သုတေသနပရောဂျက်၏ တစ်စိတ်တစ်ပိုင်းအနေဖြင့် Parallel GCC အလုပ်သည် စုစည်းမှုလုပ်ငန်းစဉ်ကို အပြိုင်အစည်းများစွာသို့ ပိုင်းခြားနိုင်စေမည့် GCC တွင် အင်္ဂါရပ်တစ်ခုကို စတင်ထည့်သွင်းလိုက်ပါသည်။ လက်ရှိတွင်၊ multi-core စနစ်များပေါ်တွင် တည်ဆောက်မှုအမြန်နှုန်းကို မြှင့်တင်ရန်၊ make utility သည် သီးခြားကုဒ်ဖိုင်တစ်ခုစီကို ဖန်တီးပေးသည့် သီးခြား compiler လုပ်ငန်းစဉ်များကို စတင်ခြင်းအား အသုံးပြုသည်။ ပရောဂျက်အသစ်သည် multi-core စနစ်များတွင် စွမ်းဆောင်ရည်ကို မြှင့်တင်ပေးနိုင်သည့် compiler အဆင့်တွင် ပြိုင်တူပေါင်းစပ်မှုကို ပံ့ပိုးပေးနိုင်ရန် စမ်းသပ်နေသည်။

စမ်းသပ်ခြင်းသည် ပြင်ဆင် စာတွဲအရေအတွက်ကို သတ်မှတ်ရန် ကန့်သတ်ချက်အသစ် “—param=num-threads=N” ကို ပေးဆောင်သည့် GCC ၏ သီးခြားအပြိုင်ဌာနခွဲတစ်ခု။ ကနဦးအဆင့်တွင်၊ လုပ်ဆောင်မှုတစ်ခုစီအတွက် စက်ဝိုင်းပုံစံဟုခေါ်ပြီး လွယ်ကူစွာ မျဉ်းပြိုင်နိုင်စေသည့် သီးခြားအစီအစဥ်များအဖြစ် အပြန်အလှန်လုပ်ထုံးလုပ်နည်းများ ပိုမိုကောင်းမွန်အောင်ပြုလုပ်ခြင်းကို ကျွန်ုပ်တို့လုပ်ဆောင်ခဲ့သည်။ တစ်ခုနှင့်တစ်ခု လုပ်ဆောင်ချက်များ၏ အပြန်အလှန်အကျိုးသက်ရောက်မှုကို အကဲဖြတ်သည့် ဟာ့ဒ်ဝဲ-အမှီအခိုကင်းသော ပိုမိုကောင်းမွန်အောင်လုပ်ဆောင်မှုအတွက် တာဝန်ရှိသည့် GIMPLE လုပ်ဆောင်ချက်များကို သီးခြားအစီအစဥ်များတွင် ထည့်သွင်းထားသည်။

နောက်အဆင့်တွင်၊ ၎င်းသည် ဟာ့ဒ်ဝဲပလပ်ဖောင်း၏ ဝိသေသလက္ခဏာများကို ထည့်သွင်းစဉ်းစားကာ interprocedural RTL ပိုမိုကောင်းမွန်အောင်ပြုလုပ်ခြင်းကို သီးခြားအစီအစဥ်များအဖြစ် ရွှေ့ရန် စီစဉ်ထားသည်။ ၎င်းနောက်၊ ကျွန်ုပ်တို့သည် ဖုန်းခေါ်ဆိုမှု၏ အသေးစိတ်အချက်များ မည်သို့ပင်ရှိစေကာမူ လုပ်ဆောင်ချက်အတွင်းရှိ ကုဒ်သို့ အသုံးပြုသည့် လုပ်ငန်းစဉ်အတွင်း ပိုမိုကောင်းမွန်အောင်လုပ်ဆောင်မှုများ (IPA) ကို အပြိုင်အကောင်အထည်ဖော်ရန် စီစဉ်ထားသည်။ ယခုအချိန်တွင် ကန့်သတ်လင့်ခ်သည် အမှိုက်စုဆောင်းသူဖြစ်ပြီး၊ ပေါင်းစည်းသည့်မုဒ်တွင် လုပ်ဆောင်နေချိန်တွင် အမှိုက်စုဆောင်းခြင်းလုပ်ငန်းကို ပိတ်ထားသည့် ကမ္ဘာလုံးဆိုင်ရာလော့ခ်ကို ပေါင်းထည့်ထားသည် (အနာဂတ်တွင် အမှိုက်စုဆောင်းသူသည် GCC ၏ Multi-threaded လုပ်ဆောင်ချက်အတွက် အဆင်ပြေသွားလိမ့်မည်)။

စွမ်းဆောင်ရည်ပြောင်းလဲမှုများကို အကဲဖြတ်ရန်အတွက်၊ ကုဒ်လိုင်းပေါင်း 100 ကျော်နှင့် လုပ်ဆောင်ချက်များ 1700 ပါဝင်သော gimple-match.c ဖိုင်ကို စုစည်းထားသည့် စမ်းသပ်မှုအစုံကို ပြင်ဆင်ထားပါသည်။ ရုပ်ပိုင်းဆိုင်ရာ cores 5 ခုနှင့် 8250 virtual (Hyperthreading) ပါရှိသော Intel Core i4-8U CPU ဖြင့် စမ်းသပ်မှုများတွင် Intra Procedural GIMPLE optimizations ၏ လုပ်ဆောင်ချိန်သည် 7 မှ 4 စက္ကန့်မှ 2 စက္ကန့်အထိ နှင့် 3 လည်ပတ်သောအခါ 4 စက္ကန့်အထိ လျော့ကျသွားသည်ကို ပြသခဲ့သည်။ threads, i.e. ထည့်သွင်းစဉ်းစားထားသည့် စည်းဝေးပွဲဇာတ်ခုံ၏ အရှိန်ကို 1.72 နှင့် 2.52 ဆ အသီးသီး ရရှိခဲ့သည်။ Hyperthreading ဖြင့် virtual cores များကိုအသုံးပြုခြင်းသည် စွမ်းဆောင်ရည်တိုးမြှင့်ခြင်းသို့ ဦးတည်ခြင်းမရှိကြောင်း စမ်းသပ်မှုများလည်းပြသခဲ့သည်။

စုစည်းမှုလုပ်ငန်းစဉ်ကို GCC သို့ အပြိုင်အပြိုင်ပြုလုပ်ရန် ပံ့ပိုးကူညီမည့် ပရောဂျက်

အလုံးစုံတည်ဆောက်ချိန်ကို ခန့်မှန်းခြေအားဖြင့် 10% လျှော့ချထားသော်လည်း ခန့်မှန်းချက်များအရ၊ အပြိုင် RTL ပိုမိုကောင်းမွန်အောင်ပြုလုပ်ခြင်းက ပိုမိုမြင်သာထင်သာသောရလဒ်များကို ရရှိနိုင်စေမည်ဖြစ်သောကြောင့် ဤအဆင့်သည် စုစည်းမှုအတွင်း အချိန်သိသိသာသာပို၍ကြာပါသည်။ RTL parallelization ပြီးနောက် ခန့်မှန်းခြေအားဖြင့် စုစုပေါင်း တပ်ဆင်ချိန်ကို 1.61 ကြိမ် လျှော့ချပါမည်။ ၎င်းပြီးနောက်၊ IPA ပိုမိုကောင်းမွန်အောင်လုပ်ဆောင်ခြင်းဖြင့် တည်ဆောက်ချိန်ကို နောက်ထပ် 5-10% လျှော့ချနိုင်မည်ဖြစ်သည်။

စုစည်းမှုလုပ်ငန်းစဉ်ကို GCC သို့ အပြိုင်အပြိုင်ပြုလုပ်ရန် ပံ့ပိုးကူညီမည့် ပရောဂျက်

source: opennet.ru

မှတ်ချက် Add