Добавлен: 13.02.2019
Просмотров: 326
Скачиваний: 3
Лабораторная работа №1 («Конструкция Parallel.For»)
Золотых Светлана, 2161121
Задание: реализовать конструкцию Parallel.For
namespace ParallelFor
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
int[,] array2Da = new int[4, 2] { { 1, 2 }, { 3, 4 }, { 5, 6 }, { 7, 8 } };
int[,] array2Db = new int[4, 2] { { 1, 2 }, { 3, 4 }, { 5, 6 }, { 7, 8 } };
//Multiply_array(array2Db);
Stopwatch timer2 = new Stopwatch();
timer2.Start();
int result1 = 1;
for (int i = 0; i < array2Db.GetLength(0); i++)
for (int j = 0; j < array2Db.GetLength(1); j++)
checked { result1 *= array2Db[i, j]; }
timer2.Stop();
label2.Text = "Результат умножения элементов массива: " + result1 + " \n Time: " + Convert.ToString(timer2.Elapsed);
Stopwatch timer1 = new Stopwatch();
timer1.Start();
int result = 1;
Parallel.For(0, array2Da.GetLength(0), i =>
{
for (int j = 0; j < array2Da.GetLength(1); j++)
checked { result *= array2Da[i, j]; }
}
);
timer1.Stop();
label1.Text = "Результат умножения элементов массива: " + result + " \n Time: " + Convert.ToString(timer1.Elapsed);
}
}}
Результат:
Вывод:
Разработано приложение WinForm, в котором перемножаются элементы матрицы. В программе реализованы два варианта перемножение: с использованием Parallel.For и обычное перемножение путём процедуры For. В данном примере Parallel.For является внешним циклом. Для нахождения наилучшего способа был использован таймер и велся подсчёт затраченного на каждый цикл времени. В итоге, Parallel.For оказался наиболее быстродействующим, оставляя результат выполнения программы таким же как и цикл For.