|
Mavzu: Vektorlash Usullari Vektorlash (vectorization)
|
Sana | 09.10.2024 | Hajmi | 362,01 Kb. | | #274338 |
Bog'liq 6-Amaliyot Matyakubov Odamboy
912.21-guruh talabasi Matyakubov Odamboy.
6-Amaliyot
Mavzu: Vektorlash Usullari
Vektorlash (vectorization) — parallel kompyuter arxitekturasida ma'lumotlarni bir vaqtning o'zida bir nechta elementlar bilan ishlash imkonini beruvchi dasturlash texnikasidir. Bu usul kompyuterning hisoblash quvvatini oshirish va dastur samaradorligini yaxshilash maqsadida qo'llaniladi.
Ma'lumotlarni parallel ishlash: Vektorlash, odatda, ma'lumotlar to'plamlarini bir vaqtning o'zida qayta ishlash imkonini beradi. Bu, masalan, vektorlar (bir o'lchovli massivlar) yoki matritsalar (ikki o'lchovli massivlar) bilan ishlaganda juda muhimdir.
import numpy as np
# Ikki vektorni yig'ish
a = np.array([1, 2, 3, 4])
b = np.array([5, 6, 7, 8])
c = a + b # Natija: array([ 6, 8, 10, 12])
Vektorlash — parallel hisoblash va samaradorlikni oshirishda muhim vosita. U ma'lumotlar bilan ishlashni soddalashtirib, hisoblash jarayonini tezlashtiradi. Vektorlashni to'g'ri qo'llash orqali dastur samaradorligini sezilarli darajada oshirish mumkin
Amaliyot darsidagi mashqlar
Mashq 1: Soddalashtirilgan vektorlash
Talabalarga ikki vektorni qo'shishni amalga oshirish vazifasini bering. Har bir talaba o'z vektorlarini yaratishi va ularni qo'shishi kerak.
Mashq 2: SIMD qo'llash
Talabalarga SIMD usuli yordamida bir xil operatsiyani (masalan, vektor elementlarini ko'paytirish) bajarishni taklif eting. Talabalar har bir element uchun bitta operatsiya bajarishi va natijani chiqarishi kerak.
Mashq 3: OpenMP bilan parallel dasturlash
Talabalarga OpenMP yordamida oddiy dastur yozishni so'rang. Masalan, massivning barcha elementlarini 2 ga ko'paytirish. Har bir talaba o'z dasturini yozadi va uning samaradorligini o'lchaydi.
Mashq 4: CUDA dasturlash
Agar laboratoriya imkoniyatlari mavjud bo'lsa, talabalarga CUDA yordamida vektorlarni ko'paytirish dasturini yozishni taklif eting. Bunda, talabalarga GPU resurslaridan qanday foydalanishni tushuntirish kerak.
Mashq Tafsilotlari
Vektorlarni tayyorlash:
Har bir talaba o'z dasturida ikkita vektor yaratadi. Har bir vektor 1000000 elementdan iborat bo'ladi.
Vektorlarning birinchi elementi 1 dan boshlanadi va har bir keyingi element 1 ga oshadi (ya'ni, birinchi vektor [1, 2, 3, ..., 1000000] va ikkinchi vektor [1, 2, 3, ..., 1000000] bo'ladi).
Vektorlarni qo'shish:
Har bir talaba ikki vektorni qo'shishi va natijaviy vektorni hosil qilishi kerak. Bunda natijaviy vektorning har bir elementi ikki vektordagi mos elementlarning yig'indisi bo'lishi kerak.
Parallel Dasturlash:
Talabalar OpenMP kutubxonasidan foydalanib, vektorlarni parallel ravishda qo'shishni amalga oshiradilar.
#include
#include
#define SIZE 1000000
int main() {
int a[SIZE], b[SIZE], c[SIZE];
// Vektorlarni to'ldirish
for (int i = 0; i < SIZE; i++) {
a[i] = i + 1;
b[i] = i + 1;
}
// Parallel qo'shish
#pragma omp parallel for
for (int i = 0; i < SIZE; i++) {
c[i] = a[i] + b[i];
}
// Natijani chiqarish
printf("c[0] = %d, c[999999] = %d\n", c[0], c[SIZE-1]);
return 0;
}
1-misol
Talabalarga ikki vektorni qo'shishni amalga oshirish vektorlarini yaratishi va ularni qo'shishildi.
2- misol
vektor elementlarini ko'paytirish
|
| |