2015-09-04 26 views
7

Pracuję w laboratorium i napisałem wielowątkowy program obliczeniowy, w C++ 11 przy użyciu std::thread. Teraz mam możliwość uruchomienia mojego programu na serwerze z wieloma procesorami.Jak skorzystać z multi-cpu w C++?

Serwer:

  • Runs Ubuntu Server
  • posiada 40 procesorów Intel

ja nic o programowaniu wieloprocesorowych znać. Pierwszy pomysł, który przychodzi mi do głowy, aby uruchomić 40 aplikacji, a następnie skleić ich wyniki razem. Jest to możliwe, ale chcę wiedzieć więcej o moich możliwościach.

  1. Jeśli skompiluję mój kod na serwerze przez jego kompilator gcc, czy wynikowa aplikacja korzysta z wielu procesorów?
  2. Jeśli # 1 odpowiedź zależy, w jaki sposób mogę to sprawdzić?

Dziękujemy!

+1

Jeśli program ma wiele wątków już wtedy system operacyjny będzie automatycznie planować te wątki na różnych procesorach. Będziesz ograniczony ilością wątków. Jeśli utworzysz 10 wątków, twój program będzie ograniczony do maksymalnie 10 procesorów. –

+1

Jeśli każdy „Wynik” jest całkowicie niezależny od wszystkich innych, to ja faktycznie napisać jeden wniosek wątek, a następnie uruchomić go za pomocą 'parallel' (patrz' sudo apt-get install równoległego, człowiek parallel') – v010dya

+0

wyjściowa dla off-site zasoby są poza tematem na SO. Usunąłem twoje pytania dotyczące bibliotek i innych zasobów, ponieważ pozostała część pytania jest możliwa do odzyskania. – Puppy

Odpowiedz

0

Pytanie dotyczy nie tylko wielu wątków, ale także wielu procesorów.

  1. Zasadniczo system operacyjny automatycznie rozłożone wątki na rdzeniach. Nie musisz nic robić.

  2. Gdy używasz C++ 11, masz std::thread::get_id(), że możesz zadzwonić i zidentyfikować inny wątek, ale NIE MOŻNA zidentyfikować używanego rdzenia. Użyj do tego bezpośrednio + "powinowactwa cpu".

Możesz sprawdzić w Google "powinowactwo do procesora", by dowiedzieć się więcej o tym, jak uzyskać nad nim kontrolę. Jeśli chcesz tego rodzaju precyzji. Możesz zidentyfikować rdzeń, a także wybrać rdzeń ... Możesz zacząć od tego: http://man7.org/linux/man-pages/man3/pthread_setaffinity_np.3.html

+3

Ta odpowiedź wydaje się nie mieć nic wspólnego z pytaniem. Osoba pytająca nie ma widocznej potrzeby określenia powinowactwa do rdzenia lub nici, co w zasadzie dotyczy wszystkich dyskusji. – Puppy

+0

Ach, szczeniak mnie bił. OP pyta, jak wielowątkowe, a nie jak wiązać wątki do rdzeni. W większości aplikacji zorientowanych na wydajność nie obchodzi się, gdzie działają wątki. – Mysticial

+0

Pyta nie tylko o wielowątkowe, ale także wielordzeniowe. to lilttle inne ... i chce to sprawdzić. Oznacza to, że potrzebuje kodu na niższym poziomie, aby sprawdzić multi-cpu. –

5

Jeśli twój program działa wielowątkowo, twój system operacyjny powinien automatycznie zadbać o to, aby korzystał z dostępnych procesorów.

Upewnij się, aby rozprowadzić pracy trzeba zrobić, aby o taką samą liczbę wątków są procesory można użyć. Upewnij się, że nie jest to tylko jeden wątek, który wykonuje pracę, a inne wątki oczekują na zakończenie tego wątku.