Academic Research in Educational Sciences Volume 4 | Issue 5 | 2023 ISSN: 2181-1385 ISI: 0,967 | Cite-Factor: 0,89 | SIS: 1,9 | ASI: 1,3 | SJIF: 5,771 | UIF: 6,1 sa 522 May, 2023 https://t.me/ares_uz Multidisciplinary Scientific Journal tiled_loop_body.extend(tile_statements)
tiled_loop_body.extend(loop_body[num_tiles*tile_size:])
return tiled_loop_body [loop_tile]
10.
Loop Strip-Mining . Yuqori xarajatlarni kamaytirish va keshdan
foydalanishni yaxshilash uchun halqani kichikroq bo'laklarga ajratadi.
Bu yerda Loop Strip-Mining uchun umumiy algoritm(kod) keltirilgan. Ushbu kodda
“strip_mine_loop” funksiyasi ikkita parametrni oladi: original sikl tanasini
ifodalovchi “loop_body” va har bir strip o'lchamini belgilaydigan “strip_size”.
Funktsiyaning ichida striplar soni (chiziqlar soni) sikl_tanasi uzunligini
“strip_size”ga bo'lish yo'li bilan hisoblanadi. Bu hosil bo'lishi mumkin bo'lgan to'liq
chiziqlar sonini aniqlaydi. “stripped_loop_body” deb nomlangan yangi ro'yxat strip
mining bilan yangi sikl tanasini saqlash uchun yaratilgan.
Loop 0 dan “num_strips” oralig'ida takrorlanadi. Har bir strip uchun
boshlang'ich va tugatish indekslari “strip_size” asosida aniqlanadi. Joriy strippga mos
keladigan statementlar slicing yordamida “loop_body” dan chiqariladi.
“Strip_loop” deb nomlangan satr o'zgaruvchisi chiziqli halqa tanasini qurish
uchun yaratilgan. U tarmoqli indeksi (j_strip_idx) uchun strip o'lchami bo'ylab
takrorlanadigan for loop statementi bilan boshlanadi. Keyin stripdagi har bir
statement ichkariga kiritiladi va satrlarni birlashtirish va birlashtirish operatsiyasidan
foydalangan holda “strip_loop” qatoriga qo'shiladi.
Olingan chiziqli halqa tanasini ifodalovchi „strip_loop‟ satri „stripped_loop_body‟ ga
qo'shiladi.
Sikldan so'ng, to'liq strip hosil qila olmagan qolgan barcha statementlar
“stripped_loop_body” ga qo'shiladi.
Nihoyat, funktsiya strip mining optimallashtirish qo'llanilgandan keyin halqa tanasini
ifodalovchi “stripped_loop_body” ni qaytaradi.
def strip_mine_loop(loop_body, strip_size):
# Kerakli bo‟laklar sonini aniqlash
num_strips = len(loop_body) // strip_size
# Strip bilan yangi sikl tanasini yaratish
stripped_loop_body = [ ]
for strip_idx in range(num_strips):
# Avvalgi strip uchun bosh va oxiri idexni aniqlash
start_idx = strip_idx * strip_size
end_idx = (strip_idx + 1) * strip_size
strip_statements = loop_body[start_idx:end_idx]
strip_loop = f"for j_{strip_idx} in range({strip_size}):\n"