Amaliy ish №13 mavzu: biosfera holati bilan axborot jarayonlarini o’zaro aloqasi. Bug’ tenglamalari. Mavzu


const int SIZE = 10000000; // Класс-обработchик class CalculationTask


Download 397.67 Kb.
bet15/15
Sana25.03.2023
Hajmi397.67 Kb.
#1294920
1   ...   7   8   9   10   11   12   13   14   15
Bog'liq
13 - 18AMALIY ISH (1)

const int SIZE = 10000000;


// Класс-обработchик
class CalculationTask
{
vector &myArray;
public:
// Оператор () выполнyaетсya над диапазоном из пространства итераtsий
void operator()(const tbb::blocked_range &r) const
{
for (int i = r.begin(); i != r.end(); i++)
Calculate(myArray[i]);
}

// Конструктор


CalculationTask (vector &a) : myArray(a) { }
};

int main()


{
vector myArray(SIZE);

// Запуск параллельного алгоритма for


tbb::parallel_for(tbb::blocked_range(0, SIZE), CalculationTask(myArray));

return 0;


}
С использованием лyaмбда-функtsий из С++11:
// Подклюchаютсya необходимые заголовоchные файлы
#include “tbb/blocked_range.h”
#include “tbb/parallel_for.h”
#include


// Колиchество элементов вектора
const size_t SIZE = 10000000;
int main()
{
std::vector myArray(SIZE);

// Запуск параллельного алгоритма for


tbb::parallel_for(tbb::blocked_range(0, SIZE),
// Лyaмбда-функtsиya
[&myArray](const tbb::blocked_range &r)
{
for (size_t i = r.begin(); i != r.end(); i++)
Calculate(myArray[i]);
});

return 0;


}

Intel thread building block kutubxonasini qo’llagan xolda sikllarni matritsali vektorli ko’paytma ko’rinishidagi misollarni ko’rib chiqamiz. Bunday misollarni yechishni birinchi bor 1969 yilda Stranser topmonidan yaratilgan. Ushbu holatni dasturlash muhitida ko’rib chiqamiz.


strassen_mult_par (Strassen parallel)
void strassen_mult_par (
// A, B va C lar submatritsaning qiymatlari
int n,
// (ax,ay) = multiplicand uchun submatrix kelib chiqishi
double *A, int ax, int ay, int as,
// (bx,by) = origin of B submatrix for multiplicand
double *B, int bx, int by, int bs,
// (cx,cy) = origin of C submatrix for result
double *C, int cx, int cy, int cs,
// current depth of Strassen's recursion
int d,
// Strassen's recursion limit for array dimensions
int s
)
{
StrassenMultiply& t = *new (tbb::task::allocate_root ( ))
StrassenMultiply (n, A, ax, ay, as,
B, bx, by, bs,
C, cx, cy, cs, d, s);
tbb::task::spawn_root_and_wait (t);
}

Download 397.67 Kb.

Do'stlaringiz bilan baham:
1   ...   7   8   9   10   11   12   13   14   15




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling