Wykorzystanie wszystkich rdzeni

0

Cześć.

Przymierzam się do napisania aplikacji, która będzie nastawiona na wydajność. Szybkość jaką uzyskuję z jednego rdzenia jest zadowalająca, ale... gdybym tak wykorzystał wszystkie rdzenie :)

Pytanie moje jest więc takie:
Jak wykorzystać wszystkie rdzenie na procesorze przez naszą aplikację?
Czy w tym celu muszę skorzystać z wątków? Nie ma innego wyjścia?
A jeśli tak to - W jaki sposób mam utworzyć w aplikacji wystarczającą ilość wątków, skoro nie wiem ile rdzeni ma komputer na którym aplikacja będzie działać?

Jak w ogóle wygląda sytuacja wykorzystywania wszystkich rdzeni na procesorze?

0

Nie wiem czy można z poziomu aplikacji w jaki kolwiek sobsób wpływać na to jak processor dziali zadanai między rdzeniami. Ale co do samej aplikacji i sposobu jak w najlepszy sposób wykorzytsać wątki i programowanie równoległe to możesz zacząć od:
download.microsoft.com/download/3/4/D/34D13993-2132-4E04-AE48-53D3150057BD/Patterns_of_Parallel_Programming_CSharp.pdf

2

Czy w tym celu muszę skorzystać z wątków? Nie ma innego wyjścia?

Nie ma, bo jeden wątek nie może być wykonywany przez wiele procesorów jednocześnie.

A jeśli tak to - W jaki sposób mam utworzyć w aplikacji wystarczającą ilość wątków, skoro nie wiem ile rdzeni ma komputer na którym aplikacja będzie działać?

W zasadzie wiesz - Environment.ProcessorCount. Ale możesz utworzyć więcej i nic się nie stanie.

A najlepiej skorzystać z gotowego rozwiązania, jak

  • TaskQueue (idealne kiedyś do lekkch rozwiązań, teraz chyba przestarzałe przez TPL).
  • Parallel Extensions, tzw. Task Parallel Library - chyba najbardziej na topie obecnie rozwiązanie
  • Task - też dość nowoczesne i może pasować do twojego programu bardziej niż TPL (zależy w jaki sposób chcesz zrównoleglać tą swoją aplikację). Implementacja wzorca ActiveObject wbudowana w C#.
    używanie czystych wątków proponuję rozważyć na końcu, bo to zazwyczaj zły pomysł.
0

Ok, dzięki za odpowiedzi. :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1