Autor Wątek: Procesory dwurdzeniowe  (Przeczytany 2867 razy)

Offline ShadowDancer

  • Redaktor

# Listopad 16, 2009, 16:03:21
Możecie rozwinąć skrót? Bo jedyne co wypluwa google to "problem with omp.h"

Offline Mr. Spam

  • Miłośnik przetworów mięsnych

Offline Kuba D.

  • Użytkownik

# Listopad 16, 2009, 16:06:42

therealremi

  • Gość
# Listopad 16, 2009, 16:10:43
Express nie ma vcomp.lib. I nie wiem czy dociąganie go do niego jest legalne. Pewnie masz obok pełną wersję visuala albo sobie dociągnąłeś libka.

Faktycznie, mam jeszcze na dysku Visuala (z którego nie korzystam BTW), więc nie musiałem dociągać liba i nawet tego nie zauważyłem (Express ma w menu switch OpenMP). Chociaż i tak był (nie wiem czy dalej jest) legalny sposób na jego pozyskanie.

Kuba D.: Jak zrobisz jednego exeka to omp_get_max_threads() zwróci 1 na systemie jednoprocesorowym. Ciągle ciężko mi wymyśleć skąd ten narzut miałby się wziąć.

Offline ShadowDancer

  • Redaktor

# Listopad 16, 2009, 16:11:16
Cóż, skoro nie ma tego w visualu to nie użyję(w końcu piszę prostą grę 2d). Może kiedyś kupie standard/pro.

Offline Liosan

  • Redaktor

# Listopad 16, 2009, 16:12:37
Może kiedyś kupie standard/pro.
Studenci zwykle mają za free z MSDNAA. Taniej wyjdzie :)

Liosan

Offline ShadowDancer

  • Redaktor

# Listopad 16, 2009, 16:13:05
Studentem będę(jak się uda) za 3 lata :P

therealremi

  • Gość
# Listopad 16, 2009, 16:14:10
Chociaż i tak był (nie wiem czy dalej jest) legalny sposób na jego pozyskanie.
Kiedyś można było pociągnąć libka z (o ile mnie pamięć nie myli) SDK do Win2008. Chyba działało to z 2k5. Później się chyba MS zorientował - bo ludzie na necie piszą, że już nie ma w nim vcomp-a (nie sprawdzałem - więc nie gwarantuje poprawności :) ). Zawsze można w sumie popróbować - może się coś znajdzie i będzie działać (chyba nie ruszali OMP od 2k5).
« Ostatnia zmiana: Listopad 16, 2009, 16:15:51 wysłana przez st3tc »

Offline yarpen

  • Użytkownik

# Listopad 16, 2009, 16:17:18
Kuba D.: Jak zrobisz jednego exeka to omp_get_max_threads() zwróci 1 na systemie jednoprocesorowym. Ciągle ciężko mi wymyśleć skąd ten narzut miałby się wziąć.
Z niepotrzebnej obslugi watkow. Nie wiem jak robi to OMP, zgaduje, ze powinien byc na tyle sprytny zeby w takiej sytuacji nic nie odpalac na boku tylko liczyc wszystko na glownym, wtedy problemu nie bedzie.

Offline vashpan

  • Użytkownik
    • Strona

# Listopad 16, 2009, 16:38:51
To ja moze odpowiem na glowne pytanie:

Cytuj
Jak pisać programy na takie cuda? Jeśli się nie mylę, to chodzi o 2 wątki, nie? A co gdy procesor ma mniej jąder niż programista wątków(lub odwrotnie)?
(jednak lepiej mowic "rdzen", i tez rownie dobrze jest mowienie "procesor" - bo w sumie mamy wtedy kilka prawdziwych, prawie niezaleznych procesorow...

Programy pisze sie, sprawiajac zeby niektore zadania wykonywaly sie wspolbieznie. Mozna stosowac do tego golych watkow, albo pomocnicznych bibliotek jak OpenMP. Zadanie jednak nie jest trywialne. Jest z tym wiele problemow. Znajdz jakas ksiazke o programowaniu rownoleglym/wspolbieznym. Problem nie jest nowy jak by sie moglo zdawac :) Owszem, ludzie maja w swoich domowych komputerach kilka procesorow/rdzeni od calkiem niedawna, ale w srodowisku serwerow i wielkich komputerow takie rzeczy byly na porzadku dziennym od dawna. Windows NT (czyli bezposredni przodek XP,Visty i 7 ( Win7 to Windows NT 6.1 ) ) obslugiwal wiele procesorow od pierwszej wersji z 1993 roku. 

Jezeli komputer posiada jeden procesor/rdzen, a program wykorzystuje wiele watkow - watki te sa wykonywane po kolei na tym jednym procesorze. Podobnie jezeli program dziala tylko w jednym watku glownym, to majac nawet 4 rdzenie, bedzie dzialal realnie tylko na jednym procesorze - przyrost wydajnosci wowczas bedzie zerowy. Zeby to lepiej zrozumiec warto sie zainteresowac sie dzialaniem i budowa systemow operacyjnych. W skrocie: procesor to maszyna liniowa, wykonuje instrukcje po kolei. Wielozadaniowy system jest "wielozadaniowy", gdyz daje procesorowi do wykonania kolejne procesy w bardzo krotkich odstepach czasu. Jezeli na komputerze z jednym procesorem dzialaja dwa programy w watku-nieskonczonej petli - czyli zabieraja caly czas procesora, system uruchamia jeden, po kilkunastu milisekundach, daje procesorowi drugi, i tak w kolko. Majac dwa procesory, system bedzie mogl dawac procesorom po jednym procesie na glowe, przez co teoretyczna wydajnosc powinna wzrosnac dwukrotnie :)

therealremi

  • Gość
# Listopad 16, 2009, 16:52:53
Kuba D.: Jak zrobisz jednego exeka to omp_get_max_threads() zwróci 1 na systemie jednoprocesorowym. Ciągle ciężko mi wymyśleć skąd ten narzut miałby się wziąć.
Nie wiem jak robi to OMP, zgaduje, ze powinien byc na tyle sprytny zeby w takiej sytuacji nic nie odpalac na boku tylko liczyc wszystko na glownym, wtedy problemu nie bedzie.
Dokładnie tak to robi. Masz 4 rdzenie to w pętli z liczbą iteracji >=4 OpenMP wykorzystuje wątek główny i tworzy 3 wątki dodatkowe. Masz 1 rdzeń to OpenMP nie tworzy żadnych nowych wątków.

Offline ShadowDancer

  • Redaktor

# Listopad 16, 2009, 16:54:57
Cytuj
Jak pisać programy na takie cuda? Jeśli się nie mylę, to chodzi o 2 wątki, nie? A co gdy procesor ma mniej jąder niż programista wątków(lub odwrotnie)?
(jednak lepiej mowic "rdzen", i tez rownie dobrze jest mowienie "procesor" - bo w sumie mamy wtedy kilka prawdziwych, prawie niezaleznych procesorow...
Tak mi się przełożyło z core ;D

Poczekam z tym do czasu zakupienia jakiejś książki/dostania lepszego visuala.
PS. zamiast robić 10 procesorów, których użyje co 100 program mogli by zmniejszyć wymiary procka,zużycie energii itd...

Offline vashpan

  • Użytkownik
    • Strona

# Listopad 16, 2009, 17:07:33
Problem w tym ze tak robia, dlatego udaje sie miescic kilka procesorow w jednej kosci, tylko nie bardzo da sie juz zwiekszac zegary :) Po prostu temperatura za bardzo wzrasta, nie oplaca sie to. ( Procesory podkrecane do 6ghz musza byc juz chlodzone cieklym azotem :D To chyba nie jest za bardzo domowe rozwiazanie ;)  )

Offline Reg

  • Administrator
    • Adam Sawicki - Home Page

# Listopad 16, 2009, 19:19:43
OpenMP uczyłem się na studiach. Jest fajny, ale jednak na co dzień stosuję (jak chyba większość programistów z naszej branży) normalne wątki systemowe (funkcja CreateThread itp.) i własne implementacje, które z nich korzystają. Swoich implementacji wątków, muteksów i tego typu rzeczy albo bardziej wysokopoziomowych konceptów dostarcza też wiele bibliotek - czy to przy okazji (Qt, wxWidgets), czy specjalnie do tego stworzonych (Intel Threading Building Blocks).

Offline ShadowDancer

  • Redaktor

# Listopad 16, 2009, 19:38:03
Muteks, Semafor - takie słowa powodują u mnie dreszcze(nie, nie dlatego, że mam grypę) :D

@down gdy zakładałem temat strzelałem, że to wątki i ciężko mi się było przekopać do postu z 2006
« Ostatnia zmiana: Listopad 16, 2009, 21:42:28 wysłana przez ShadowDancer »

Offline bies

  • Użytkownik

# Listopad 16, 2009, 20:46:18