Kommutativlikni tahlil qilish

Source: https://isi.edu/~pedro/CA/commutativity.html

Pedro Diniz

Xulosa

Parallel mashinalar bir nechta protsessorlarga hisoblashning turli qismlarini bir vaqtning o’zida bajarishga imkon berish orqali ish unumdorligini sezilarli darajada oshirishni va’da qilmoqda. Dasturchilar aniq parallel tillarni ishlatadigan parallel mashinalar uchun odatiy dasturlarni ishlab chiqdilar. Ketma-ket dasturlash tillaridan farqli o’laroq, aniq parallel tillar qulflash, noaniqsiz bajarish va xabarlarni uzatuvchi mashinalarda hisoblash orqali ma’lumotlar harakatini bevosita boshqarish zarurati kabi hodisalar bilan tavsiflanadigan murakkab dasturiy modelni taqdim etadi. Keyingi imperativ dasturlash paradigmasining yaqqol dasturiy afzalliklari shu sababli ketma-ket dasturlarni avtomatik ravishda parallellashtirish uchun ishlab chiqilgan tahlil usullari va kompilyatorlarni ilhomlantirdi.

Hozirgi parallel parallel kompilyatorlar ma’lumotlarga bog’liqlikni saqlab, original seriya dasturining semantikasini saqlab qolishadi. Ushbu kompilyatorlar mustaqil hisoblash qismlarini aniqlashga harakat qilishadi (ikkita hisoblash jarayoni mustaqil, agar boshqa ma’lumotlar kirishga imkon beradigan ma’lumotlarni yozmasa), keyin mustaqil qismlarni bir vaqtning o’zida bajaradigan kodni yaratishga harakat qilishadi. Ushbu yondashuvning sezilarli cheklovi bu katta miqdordagi kelishuvni fosh qilish uchun etarli darajada aniq bo’lgan qaramlik tahlilini o’tkazishdagi qiyinchilikdir. Tadqiqotchilar Affine kirish funktsiyalari yordamida zich matritsalarni manipulyatsiya qiladigan pastadirli uyalar uchun oqilona samarali algoritmlarni ishlab chiqishga muvaffaq bo’lishganiga qaramay, ko’rsatgichlarga asoslangan ma’lumotlar tuzilmalarini boshqaradigan dasturlarni muvaffaqiyatli avtomatik tahlil qilish borasida ozgina yutuqlarga erishildi. Tadqiqotchilar mutlaqo avtomatik tizimlarni yaratishga harakat qilishdi, ammo eng istiqbolli yondashuvlar dasturchi tomonidan boshqariladigan ma’lumotlar tuzilmalarining global topologiyasi to’g’risida ma’lumot beradigan izohlarni talab qiladi. Ikkinchidan, ma’lumotlarga bog’liq yondoshuvlarni yanada fundamental cheklash bu grafikka o’xshash ma’lumotlar tuzilishini boshqaradigan hisoblashlarni parallellashtirishning mumkin emasligidir. Ushbu ma’lumotlar tuzilmalarida mavjud bo’lgan taxalluslar mustaqil kod qismlarining statik kashf etilishiga to’sqinlik qiladi va bu kompilyatorni seriya kodini yaratishga majbur qiladi. Va nihoyat, almashinadigan ma’lumotlar tuzilmalarini vaqti-vaqti bilan yangilab turadigan dasturlarning ma’lumotlarga bog’liqligini saqlab qolish, aniqlangan moslik miqdorini sun’iy ravishda cheklab qo’yishi mumkin, chunki vazifalar har bir yangilanish o’qishning nisbiy tartibini o’zgartirmasligiga ishonch hosil qilinmaguncha yangilanishni kechiktirishi kerak.

Kommutativlik tahlili – bu kommutatsion operatsiyalarni aniqlash uchun statik tahlil doirasi. Ikkala operatsiya, ularning bajarilish tartibidan qat’i nazar, bir xil natijani yaratganda, bir-birini almashtiradi. Kommutativlik tahlili mavjud ma’lumotlarga bog’liq yondashuvlarning ko’plab cheklashlarini bekor qiladi, yakka tartibdagi xotira so’zlarini o’qish va yozish tartibini saqlab qolish o’rniga, komutativlik tahlili ikkala ma’lumotni va hisoblashlarni yirik don birliklariga ajratadi. Keyin u hisoblashning statistik tahlilini ushbu teranlik darajasi bo’yicha hisoblash kommutatsiyasi qismlari, ya’ni ularning bajarilish tartibidan qat’i nazar, bir xil natijaga olib kelishini aniqlash uchun aniqlaydi. Agar berilgan hisoblash kommutatorini bajarish uchun zarur bo’lgan barcha operatsiyalar bajarilsa, kompilyator avtomatik ravishda parallel kodni yaratishi mumkin. Olingan parallel dastur asl seriyali dasturning ma’lumotlarga bog’liqligini buzishi mumkin bo’lsa-da, xuddi shu natijani olish kafolatlanadi.

Ushbu yondashuv bir nechta qiziqarli xususiyatlarga ega. Kommutativlik tahlili boshqariladigan ma’lumotlar tuzilmalari topologiyasi to’g’risidagi ma’lumotlarga tayanmaganligi sababli, kommutativlik tahlilini ishlatadigan kompilyator ma’lumotlarning tuzilishini yaratadigan kod qismlarini tahlil qilish kerak emas. Shu sababli komutativlik tahlili doimiy bo’lmagan ma’lumotlarni boshqaradigan dasturlar (masalan, ob’ektga yo’naltirilgan ma’lumotlar bazasi ilovalari) yoki jug’rofiy tarqalib ketgan ma’lumotlarni boshqaradigan dasturlar (masalan, Umumjahon Internetdagi mobil hisoblashlar) kabi to’liq bo’lmagan hisoblashlar uchun javob beradi. Bunday holda, dastlab ma’lumotlar tuzilishini yaratgan kod mavjud bo’lmasligi yoki umuman bo’lmasligi mumkin. Kommutativlikni tahlil qilish, ayniqsa grafikalarni boshqaradigan hisoblashlar uchun juda mos keladi. Bu kommutativlik tahlilining muhim jihatidir, chunki ushbu ma’lumotlar tuzilmalarini boshqaradigan hisob-kitoblar ma’lumotlarga bog’liqlikni tahlil qilishning imkoni yo’q.

Biz kommutativlik tahlilining to’liq amaliy dasturlarda katta miqdordagi parallelizmni ajratib olish va ulardan foydalanish qobiliyatini baholash uchun tizimga asoslangan yondashuvni qo’lladik. Biz komutativlik tahlilini asosiy tahlil paradigmasi sifatida ishlatadigan parallellashtiruvchi kompilyatorni qurdik. Ushbu kompilyator C++ to’plamida yozilgan e’lon qilinmagan ketma-ketlik dasturini oladi va umumiy xotira ko’p protsessoriga parallel kod yaratadi. Ushbu parallellashtiruvchi kompilyatordan foydalanib, biz Barnes-Hut N-tanasi erituvchisi, suyuq suvni simulyatsiya qilish kodi va seysmik modellashtirish kodi kabi bir nechta dasturlarni avtomatik ravishda parallellashtiramiz. Ushbu barcha amaliy dasturlar uchun kommutativlik tahlili katta miqdordagi kelishuvni yuzaga keltirishi mumkin va yaratilgan parallel kod juda yaxshi ishlashga ega. 16 protsessorda Barnes-Xutning avtomatik ravishda parallellashtirilgan versiyasi dastlabki ketma-ket versiyasidan 11 va 12 marta tezroq ishlaydi; suvni simulyatsiya qilish uchun avtomatik parallellashtirilgan versiya dastlabki ketma-ket versiyadan 7 va 8 marta tezroq ishlaydi; seysmik modellashtirish ilovasi uchun avtomatik parallellashtirilgan versiya dastlabki ketma-ket versiyadan 12 baravar tez ishlaydi.

Ushbu tajriba natijalari juda dalda beradi. Ushbu dasturlar tabiatan juda dinamikdir – ular murakkab ko’rsatgichlarga asoslangan ma’lumotlar tuzilmalarini boshqaradi yoki ma’lumotlarga kirishning juda tartibsiz shakllarini namoyish etadi. Ushbu xususiyatlarga ega bo’lgan dasturlarda qo’pol donli parallelizmning ekspluatatsiyasi juda qiyin muammo sifatida tan olingan. Biz ushbu hisoblashlar uchun katta miqdordagi kelishuvni olishga qodir bo’lgan boshqa kompilyator yoki kompilyatsiya texnikasidan bexabarmiz. Bundan tashqari, ijobiy eksperimental natijalar komutativlik tahlilining avtomatik parallellashtiruvchi kompilyator usuli sifatida amaliy ahamiyatga ega ekanligining aniq dalilidir.