Koligacja c# pytanie do pro...

0

Witam,

Pisząc swoją inżynierkę na temat obliczeń metodami numerycznymi z wykorzystaniem TPL, a w szczególności z wykorzystaniem "tasków" (Task), doszedłem do punktu w którym na mojej platformie testowej działa 12-scie zadań obciążając cała pulę 12-stu rdzeni procesora i7 970, i tu mi promotor zadał dziwne zadanie , bo mimo tego że orientuje sie w tym ze zadanie przekazuja sobie (a bardzie udostępniają miedzy sobą czas procesora a jeszcze ściślej czas odpowiedniego rdzenia tak aby wszytskie pracowały) i w przypadku gdy jeden rdzeń zaczyna się nudzić to pobiera jakies zadanie z działających jeszcze "taskow", i tu przechodzę do sedna:

Czy jest możliwość użycia koligacji procesora pod platforma c# tak aby przypisać że zadanie (Task) np. t1 działa tylko na procesorze 1 a t2 na 2 itp? Czy ktos kiedys próbował przypisywać czas procesora odpowiedniemu "taskowi" ręcznie? :D

Promotor nie daje mi żyć i jak sie uparł to teraz musze mu udowodnić ze albo sie da albo nie da :/ moim zdaniem sie w jakis tam sposób da ale w takim wypadku muszę udowodnić że jest to nieoptymalna metoda i obliczenia wykonywać beda sie wolniej.

Pozdrawiam
Oskar

0

Czy można ustawić koligację zadaniu (klasie Task) w C#? I tak i nie.

Koligację można ustawić wątkowi systemowemu. Wątek zarządzany (czyli ten w .NET) według specyfikacji wcale nie musi odpowiadać wątkowi systemowemu. Fakt, że najczęściej właśnie tak będzie, zwłaszcza w Windowsowej implementacji, ale nie jest ona jedyna, a ponad to, nawet host CLR może na żądanie przejąć ich obsługę na siebie (jak jest w SQL Server). .NET Micro Framework umożliwia implementację poprzez powiązanie wątków 1 do 1, ale może również działać tylko na jednym wątku. Z perspektywy użytkownika, obsługa wątków w .NET będzie identyczna.
No, ale ty nie chcesz ustawić koligacji wątkowi, tylko zadaniu (Task). I tutaj znów mamy klops, bo specyfikacja również nie mówi, że zadanie to wątek (bo po co byłby nam wtedy te zadania potrzebne?). Już sama nazwa wskazuje na to, że coś jest nie tak ;). Zadanie może być wykonywane przez kilka wątków, a i równie dobrze może nie zostać utworzony żaden nowy wątek (sic!).

Tak więc w teorii możesz użyć P/Invoke do ustawienia koligacji (i uzyskanie identyfikatora wątku poprzez GetCurrentThreadId) i prawdopodobnie w wielu sytuacjach zrobiłbyś to, co chcesz, ale w wielu innych mógłbyś ustawić koligację zupełnie innemu wątkowi albo tylko jednemu z wielu obsługujących zadanie w tym konkretnym momencie.

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