Jaros aw kuchta programowanie wsp bie ne
This presentation is the property of its rightful owner.
Sponsored Links
1 / 16

Równoległe kwerendy danych PowerPoint PPT Presentation


  • 117 Views
  • Uploaded on
  • Presentation posted in: General

Jarosław Kuchta Programowanie Współbieżne. Równoległe kwerendy danych. Podstawy. LINQ – Language-Integrated Query język zapytań wbudowany w C# począwszy od wersji 3. PLINQ – Parallel LINQ równoległa wersja LINQ. Przykład wyrażenia LINQ. // The Three Parts of a LINQ Query:

Download Presentation

Równoległe kwerendy danych

An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -

Presentation Transcript


Jaros aw kuchta programowanie wsp bie ne

Jarosław Kuchta

Programowanie Współbieżne

Równoległe kwerendy danych


Podstawy

Podstawy

  • LINQ – Language-Integrated Query

    • język zapytań wbudowany w C# począwszy od wersji 3.

  • PLINQ – Parallel LINQ

    • równoległa wersja LINQ

PLINQ


Przyk ad wyra enia linq

Przykład wyrażenia LINQ

// The Three Parts of a LINQ Query:

// 1. Data source.

int[] numbers = new int[7] { 0, 1, 2, 3, 4, 5, 6 };

// 2. Query creation.// numQuery is an IEnumerable<int>

var numQuery =

from num in numbers

where (num % 2) == 0

select num;

// 3. Query execution.

foreach (int num in numQuery)

Console.Write("{0,1} ", num);

PLINQ


R d a danych dla linq

Źródła danych dla LINQ

  • tablice C#

  • łańcuchy znaków

  • kolekcje i listy .NET

  • bazy danych SQL

  • zbiory danych ADO.NET

  • dokumenty XML

PLINQ


R wnoleg a wersja wyra enia linq

Równoległa wersja wyrażenia LINQ

// The Three Parts of a LINQ Query:

// 1. Data source.

int[] numbers = new int[7] { 0, 1, 2, 3, 4, 5, 6 };

// 2. Query creation.// numQuery is an IEnumerable<int>

var numQuery =

from num in numbers.AsParallel()

where (num % 2) == 0

select num;

// 3. Query execution.

foreach (int num in numQuery)

Console.Write("{0,1} ", num);

PLINQ


Foreach a forall

foreach a ForAll

foreach (int num in numQuery)

aBag.Add(Compute(num)));

numQuery.ForAll

( (num) => aBag.Add(Compute(num)) );

PLINQ


Por wnanie foreach i forall

Porównanie foreach i ForAll

PLINQ


Zalety i wady plinq

Zalety i wady PLINQ

  • PLINQ dobrze się sprawdza, gdy:

    • elementy kolekcji są niezależne od siebie

    • operacje łatwo dzielą się na niezależne wątki

    • pojedyncza operacja jest "dość długotrwała"

  • Kosztem PLINQ jest narzut na:

    • podział danych ze źródła danych

    • podział zadań na wątki

    • zebranie danych z wątków

    • scalenie wyników

PLINQ


Przyk ady

Przykłady

  • Opłacalne:

    var queryA = from num in numberList.AsParallel()

    select ExpensiveFunction(num);

  • Nieopłacalne:

    var queryB = from num in numberList.AsParallel()

    where num % 2 > 0

    select num;

PLINQ


Sekwencyjne wykonanie plinq

Sekwencyjne wykonanie PLINQ

  • PLINQ próbuje wykonać kwerendę przynajmniej tak samo szybko, jak LINQ.

  • Przełącza się na wykonanie sekwencyjne, gdy zawiera klauzule:

    • Select, indeksowaną Where, indeksowaną SelectMany lub ElementAt po zmianie kolejności lub filtrowaniu kolekcji wejściowej,

    • Take, TakeWhile, Skip lub SkipWhile po zmianie kolejności kolekcji wejściowej,

    • Concat, Reverse, Zip lub SequenceEquals, chyba że kolekcja wejściowa jest oryginalnie indeksowana

PLINQ


Wymuszone wykonanie r wnoleg e

Wymuszone wykonanie równoległe

static void ForceParallel()

{

var customers = GetCustomers();

var parallelQuery = (from cust in customers.AsParallel() .WithExecutionMode(ParallelExecutionMode.ForceParallelism)

where cust.City == "Berlin"

select cust.CustomerName)

.ToList();

}

PLINQ


Okre lenie liczby procesor w

Określenie liczby procesorów

var query = from item in source.AsParallel()

.WithDegreeOfParallelism(2)

where Compute(item) > 42

select item;

PLINQ


Kwerenda r wnoleg a z uporz dkowaniem

Kwerenda równoległa z uporządkowaniem

var orderedCities = (from city in cities.AsParallel().AsOrdered()

where city.Population > 10000

select city)

.Take(1000);

PLINQ


Samodzielne partycjonowanie danych

Samodzielne partycjonowanie danych

/ Static partitioning requires indexable source. Load balancing can use any IEnumerable.

var nums = Enumerable.Range(0, 100000000).ToArray();

// Create a load-balancing partitioner. Or specify false for static partitioning.

Partitioner<int> customPartitioner = Partitioner.Create(nums, true);

// The partitioner is the query's data source.

var q = from x in customPartitioner.AsParallel()

select x * Math.PI;

q.ForAll((x) =>

{

ProcessData(x);

});

PLINQ


Wizualizacja r wnoleg o ci

Wizualizacja równoległości

PLINQ


Literatura

Literatura

  • http://msdn.microsoft.com/en-us/library/dd460688.aspx

PLINQ


  • Login