Esileht > Alustus > Rööpsusastme piiramine

Rööpsusastme piiramine


Eelmises blogis vaatlesime, kuidas rööpe sektsioonimisega võib ehitada jadakoodi sektsioone ja piirata rööbete arvu. Tegelikult on .NETis olemas ka spetsiaalsed parameetrid.

double[] values = new double[10000];

List<int> threadids = new List<int>();

values.AsParallel().WithDegreeOfParallelism(5).ForAll(value =>
{
int id = System.Threading.Thread.CurrentThread.ManagedThreadId;
Console.WriteLine(id);
threadids.Add(id);
});

Console.WriteLine(threadids.Distinct().Count() + ” lõime”);

Ülaltoodud koodis näed sätet WithDegreeOfParallelism, mis minu katsete põhjal piirab kasutatavate lõimede arvu. Me lihtsalt salvestame kõigi lõimede id-d ja vaatame pärast, mitu erinevat oli. Antud juhtumil oligi see täpselt 5. Sisendväärtuse suurenedes üle 10 ei kasvanud kasutatavate lõimede arv üle 10.

double[] values = new double[10000];

List<int> threadids = new List<int>();

Parallel.For(0, values.Length, new ParallelOptions{ MaxDegreeOfParallelism = 2 }, (i) =>
{
int id = System.Threading.Thread.CurrentThread.ManagedThreadId;
Console.WriteLine(id);
threadids.Add(id);
});

threadids.GroupBy(g => g).AsParallel().ForAll(s => Console.WriteLine(s.Key + ” “ + s.Count()));

Teises näites on tulemus huvitavam. Siin anname kaasa ParallelOptions objekti ja selle MaxDegreeOfParallelism peaks tähendama igal ajahetkel maksimaalset töös olevate ülesannete (task) arvu. Tulemus on, et erinevate kasutatud lõimede arv on sisendväärtusest umbes 2 korda suurem. Sisendi 1 korral on see 1 (see on siis jadaprogramm), aga 2 korral 4 ja 5 korral 10. Kui palju neid korraga jooksis, seda ei tea, aga erinevate lõimede rakendatus oli üsna erinev (viimasel real olnud grupeerimist kasutades oli näha, et lõimede hõivatuse vahe oli kuni 5-kordne).

Kokkuvõtteks, WithDegreeOfParallelism tundub rangem, samas kui MaxDegreeOfParallelism on lõdvem ja näitab mingit venivat rööpsusastet.

  1. Kommentaare veel pole.
  1. No trackbacks yet.

Lisa kommentaar

Please log in using one of these methods to post your comment:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Muuda )

Twitter picture

You are commenting using your Twitter account. Log Out / Muuda )

Facebook photo

You are commenting using your Facebook account. Log Out / Muuda )

Google+ photo

You are commenting using your Google+ account. Log Out / Muuda )

Connecting to %s

%d bloggers like this: