miig Skrevet 20. oktober 2009 Del Skrevet 20. oktober 2009 Korleis får ein utnytta begge kjernane i prosessoren når ein skal kjøre eit program laga i c++? Må me inkludere eit bibliotek, eller må ein også programmere på ei anna måte? Eventuelt: Korleis? Linkar tas imot med takk! Lenke til kommentar
GeirGrusom Skrevet 20. oktober 2009 Del Skrevet 20. oktober 2009 (endret) Du bruker OpenMP. Dette er innebygget i alle nyere compilere. Dette gir deg en rekke #pragma preprocessor direktiver, som for eksempel #pragma omp parallell for Som gjør at en løkke kjøres over flere kjerner. #pragma omp parallell for for(int i = 0; i < 2; i++) { DoSomethingAsync(); } Endret 20. oktober 2009 av GeirGrusom Lenke til kommentar
jonnor Skrevet 20. oktober 2009 Del Skrevet 20. oktober 2009 OpenMP er et fint interface til flertråding (multithreading). Skal du gjøre noe annet enn trivielle lekeprogrammer så er det helt essensielt å sette seg inn hva det er og hvilke utfordinger det har. Lenke til kommentar
miig Skrevet 20. oktober 2009 Forfatter Del Skrevet 20. oktober 2009 Takk for svar Er dette noko eg må laste ned frå verdsveven (internett), eller skal det vere inkludert i dei fleste compilatorane? Kor gode resultat kan eg forvente å få? Blir hastigheten fordobla når eg køyrer alle lykkjer (hvis eg har dual core)? Lenke til kommentar
jonnor Skrevet 20. oktober 2009 Del Skrevet 20. oktober 2009 (endret) Du må skaffe biblioteket. Hvor gode resultater du får er helt avhengig av oppgavens natur og din implementasjon, men forenklet kan den sies å være gitt av Amdalhs lov. I et praktisk ikke-trivielt program vil du nok aldri komme i nærheten av en fordobling. Endret 20. oktober 2009 av jonnor Lenke til kommentar
Orjanp Skrevet 18. november 2009 Del Skrevet 18. november 2009 Du må nok se langt etter en dobling av ytelse. Forbedringspotensialet er helt avhengig av hva som skal parallelliseres. Dersom du kan dele opp oppgavene i helt uavhengige deler, vil du ha størst utbytte. Dersom oppgavene som skal gjøres er lineære, vil du ha lite utbytte. Et eksempel ved bruk av bil er alltid populært. Dersom du skal fylle bensin, er det lite å tjene på å være to stykker. Det er lite dere kan gjøre på samme tid. Men dersom du skal bytte dekk, vil det kunne lønne seg å være to. Da kan de ta hvert sitt hjul samtidig. Så det du må se på er om du kan dele opp oppgavene som skal gjøres. Lenke til kommentar
TheMaister Skrevet 22. november 2009 Del Skrevet 22. november 2009 Et populært bibliotek for trådprogrammering er vel pthreads. Det er et C-bibliotek, men funker fint med C++ også. Vet ikke hvordan Win32 gjør det med threads, men du har win32-pthreads, så om du lærer pthreads vil koden din være veldig portabel. Lenke til kommentar
jurg Skrevet 22. november 2009 Del Skrevet 22. november 2009 (endret) Et populært bibliotek for trådprogrammering er vel pthreads. Det er et C-bibliotek, men funker fint med C++ også. Vet ikke hvordan Win32 gjør det med threads, men du har win32-pthreads, så om du lærer pthreads vil koden din være veldig portabel. Pthreads fungerer IKKE fint med C++. Alle C++-funksjoner som skal startes som en tråd må deklareres 'extern "C"' og kan ikke være klassemetoder. Edit: Ser ut som om dette ikke stemmer helt fortsatt, men det er fortsatt ikke rett frem å bruke pthreads med C++. Skal en bruke threads i C++ er Boost::Thread å anbefale (eller vente på C++0x). Endret 22. november 2009 av jurg Lenke til kommentar
Veix Skrevet 23. november 2009 Del Skrevet 23. november 2009 (eller vente på C++0x) Lykke til! Tror jeg heller hadde sett på Boost Kjekt sted å få litt oversikt: http://en.wikipedia.org/wiki/Concurrent_programming Lenke til kommentar
TheMaister Skrevet 24. november 2009 Del Skrevet 24. november 2009 Et populært bibliotek for trådprogrammering er vel pthreads. Det er et C-bibliotek, men funker fint med C++ også. Vet ikke hvordan Win32 gjør det med threads, men du har win32-pthreads, så om du lærer pthreads vil koden din være veldig portabel. Pthreads fungerer IKKE fint med C++. Alle C++-funksjoner som skal startes som en tråd må deklareres 'extern "C"' og kan ikke være klassemetoder. Edit: Ser ut som om dette ikke stemmer helt fortsatt, men det er fortsatt ikke rett frem å bruke pthreads med C++. Skal en bruke threads i C++ er Boost::Thread å anbefale (eller vente på C++0x). K, my bad. Har ikke brukt pthreads i C++ enda. Lenke til kommentar
Sigdal Skrevet 13. desember 2009 Del Skrevet 13. desember 2009 (endret) Støttes dette i eldre kompilatorer også? (F.eks vc++6) Eller er det evt andre måter å få det til på her? Endret 13. desember 2009 av Sigdal Lenke til kommentar
ze5400 Skrevet 19. januar 2010 Del Skrevet 19. januar 2010 Pfft. Laste ned libs for multithreading Alle vet jo at at den mest dynamiske og protable trådhånteringen får man tilgang til ved å inkludere windows.h. Lenke til kommentar
asicman Skrevet 20. januar 2010 Del Skrevet 20. januar 2010 Mange gode tips her som du bør se nærmere på. Er spørsmålet ditt så snevert som du stiller det eller er du ute etter å lære parallell programmering? Hvorfor stoppe på kjerner? Du kan også se på OpenCL/CUDA for å utnytte alle "kjernene" som du har i grafikkortet ditt. Eller hvorfor ikke lære seg å skrive programmer som kan kjøres på flere maskiner? Da kan det være nyttiog å lære seg litt om MPI. Husk en ting er å skrive parallelle programmer, en annen ting er å debugge dem.... Lenke til kommentar
GeirGrusom Skrevet 20. januar 2010 Del Skrevet 20. januar 2010 en tredje ting er også å finne ut en måte å løse et problem på som faktisk lar seg parallellisere. Lenke til kommentar
asicman Skrevet 21. januar 2010 Del Skrevet 21. januar 2010 en tredje ting er også å finne ut en måte å løse et problem på som faktisk lar seg parallellisere. Helt klart, jeg håper ikke 'miig' har planer om å sette noe kompilatorflag for å få 4X ytelsesøking i "Word" (eller hva han måtte ha av kildekode). Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå