DiDaDi Skrevet 6. mars 2007 Del Skrevet 6. mars 2007 Har i dag et program i Matlab(program for numeriske beregninger) som tar ganske lang tid å kjøre. Det som irriterer meg er at jeg har dual core prosessor, men Matlab benytter bare den ene prosessoren. Så jeg lurer på måter for å benytte begge. Programmet jeg kjører i dag ser veldig forenklet slik ut: Behandle data(A) Behandle data(B) Behandle data(A,B) To sett med data blir behandlet før resultatet fra begge blir slått sammen og behandlet. Det jeg mener burde gå var at Behandle data(A) og Behandle data(B) burde kunne kjøres på hver sin prosessor. Vet at dette ikke er mulig med Matlab så vil gå over til et annet programmeringsspråk. Vil helst holde meg i Windows, men er åpen for andre operativsystem hvis det er eneste løsning. Lar dette seg gjør? I isåfall kan noen komme med tips til hva jeg bør se på? Lenke til kommentar
teflonpanne Skrevet 6. mars 2007 Del Skrevet 6. mars 2007 (endret) du burde ta en titt på haskell. grunnen er at haskell er et rent funksjonelt språk (som betyr omtrent at funksjoner oppfører seg som funksjoner i matematikken, dvs at de ikke har noen sideeffekter (som å forandre en global variabel f.eks), som igjen betyr at hvis du gir en funksjon et argument returnerer den alltid samme verdi for det argumentet). dette gjør at funksjonell kode er ekstrem lett å parallellisere i forhold til annen kode hvor man må ta hensyn til at en funksjon kan ha sideeffekter. vet ikke om jeg klarte å formulere det så bra, men jeg anbefaler at du leser om haskell, ren funksjonell kode og STM (bibliotek for haskell for å lage kode som bruker flere prosessorer) funksjonell kode kan være veldig annerledes fra imperativ kode når du lærer deg det. man har f.eks ingen variabler (vel, du kan gi navn til utrykk) og ingen looper i haskell, men du vil (forhåpentligvis) fort se at funksjonell kode er mindre, renere, enklere, mer elegant og "bugfri" (hvis ikke algoritmen er feil såklart, ellers kommer de fleste bugs fra sideeffekter, som haskell ikke har) enn tilsvarende imperativ/OO-kode http://www.cs.utah.edu/~hal/docs/daume02yaht.pdf er den beste "tutorialen" du kan lære deg haskell fra på nettet lykke til! Endret 6. mars 2007 av teflonpanne Lenke til kommentar
Jaffe Skrevet 6. mars 2007 Del Skrevet 6. mars 2007 Det teflonpanne sier bør vel gjelde for andre funksjonelle språk også, f.eks. Lisp. Lenke til kommentar
teflonpanne Skrevet 6. mars 2007 Del Skrevet 6. mars 2007 (endret) nja, forskjellen er at haskell er et rent funksjonelt språk, mens lisp har sideeffekter og det er fraværet av sideeffekter som gjør det egnet til parallellisering. ellers er jo erlang kanskje "standardspråket" for sånne type programmer Endret 6. mars 2007 av teflonpanne Lenke til kommentar
DiDaDi Skrevet 7. mars 2007 Forfatter Del Skrevet 7. mars 2007 Takker for innspill. Skal sjekke ut den pdfen. Er litt skeptisk siden jeg aldri har hørt om programmeringsspråket før, men skal gi det en sjanse:) Lenke til kommentar
Dead_Rabbit Skrevet 11. mars 2007 Del Skrevet 11. mars 2007 Hvis ikke jeg har misforstått ting helt så er det operativsystemet som vanligvis tar seg av denne "arbeidsfordelingen". Det du kan gjøre er å lage to tråder for behandling av data A og B, så tror jeg operativsystemet fordeler disse etter hva som er hensiktsmessig. Menneh, jeg kan ikke vedlig mye om dette her. Mulig jeg er helt på jorde, så ta det med en klype salt. Lenke til kommentar
DiDaDi Skrevet 11. mars 2007 Forfatter Del Skrevet 11. mars 2007 Hvis ikke jeg har misforstått ting helt så er det operativsystemet som vanligvis tar seg av denne "arbeidsfordelingen". Det du kan gjøre er å lage to tråder for behandling av data A og B, så tror jeg operativsystemet fordeler disse etter hva som er hensiktsmessig. Menneh, jeg kan ikke vedlig mye om dette her. Mulig jeg er helt på jorde, så ta det med en klype salt. 8128541[/snapback] Du er ikke helt på jordet:) Var hvordan jeg skulle dele opp i flere tråder jeg var ute etter. Var tilfeldigvis innom siden til Matlab i går og det viste seg at Matlab er kommet i ny versjon som har støtte for flere tråder. Så før jeg bruker så alt for masse tid på å lære meg et nytt programmeringsspråk tenker jeg at tester den nye versjonen. Lenke til kommentar
Dead_Rabbit Skrevet 11. mars 2007 Del Skrevet 11. mars 2007 Hvis jeg hadde vært deg hadde jeg allikevel tatt en titt på Python. Det har en enkel syntaks men er likevel veldig kraftig. Det har også støtte for multi-threading. Dessuten er Python et ganske "general purpose" språk, så du kan gjøre mye mer enn bare numeriske beregninger. Lenke til kommentar
blabla7221 Skrevet 24. mars 2007 Del Skrevet 24. mars 2007 (endret) En 5 minutters hack: kode. Jeg har tatt med utskriften av noen test-runder i bunnen av filen. Denne baserer seg på SBCL - en Common Lisp implementasjon med native tråd-støtte kjørende under Linux. Dette bør være mulig å porte til Windows, og/eller til andre språk/implementasjoner o.s.v. om du ønsker det. Jeg følger ikke dette forumet, så kontakt meg direkte om du lurer på noe. edit: google bruker en lignende teknikk for håndtering av store datamengder: http://labs.google.com/papers/mapreduce.html Endret 27. mars 2007 av blabla7221 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å