Gå til innhold

Delphi som støtter dobbelkjerne?


Anbefalte innlegg

Videoannonse
Annonse

Denne støtten har nok vært i Delphi ganske lenge ;)

 

Å skrive programvare som utnytter en dobbelkjerneprosessor er som å skrive programvare som utnytter to (evt. flere) prosessorer; du må dele opp oppgavene i forskjellige tråder (threads).

 

Et søk på google vil nok kunne gi en god del tutorials.

Lenke til kommentar

Se under Demos i Delphi mappen.

 

Demos\Threads i eldre Delphi versjoner,

Demos\DelphiWin32\VCLWin32\Threads i Delphi 2005 og jeg tipper i 2006 også.

 

Ideen er veldig enkel - du lager en klasse som arver fra TThread og forteller hva denne skal gjøre (Execute metode). Så lager du et objekt av denne typen og setter OnTerminate til den prosedyren som du ønsker å kalle når tråden er ferdig. Jeg pleier å kalle Create med Suspended = True, slik at jeg kaller Execute eksplisit, når det passer meg (som regel er det etter jeg har assignet OnTerminate).

 

For å utnytte det at CPUen har flere kjerner, lager man flere trådobjekter, ikke bare ett.

Lenke til kommentar
Se under Demos i Delphi mappen.

 

Demos\Threads i eldre Delphi versjoner,

Demos\DelphiWin32\VCLWin32\Threads i Delphi 2005 og jeg tipper i 2006 også.

 

Ideen er veldig enkel - du lager en klasse som arver fra TThread og forteller hva denne skal gjøre (Execute metode). Så lager du et objekt av denne typen og setter OnTerminate til den prosedyren som du ønsker å kalle når tråden er ferdig. Jeg pleier å kalle Create med Suspended = True, slik at jeg kaller Execute eksplisit, når det passer meg (som regel er det etter jeg har assignet OnTerminate).

 

For å utnytte det at CPUen har flere kjerner, lager man flere trådobjekter, ikke bare ett.

5451525[/snapback]

Og fordelingen mellom kjernene vil skje automatisk?
Lenke til kommentar

Ja, det er det som er meningen med WindowsXP - at den fordeler arbeid mellom prosessorene. Jeg lekte litt med den der Threads demoen og jeg ser at begge CPUene får hopp i TaskManageren. Det skjer ganske fort fordi jeg har dobbel Xeon maskin :tease: , men det er synlig. Med mindre du setter "affinity" for programmet ditt til bare en av CPUene skal OSen forsøke å fordele arbeidsmengden mer eller mindre jevnt mellom alle fysiske og logiske (dobbelkjerne og hyperthreading) prosessorer.

Lenke til kommentar
Ja, det er det som er meningen med WindowsXP - at den fordeler arbeid mellom prosessorene. Jeg lekte litt med den der Threads demoen og jeg ser at begge CPUene får hopp i TaskManageren. Det skjer ganske fort fordi jeg har dobbel Xeon maskin  :tease: , men det er synlig. Med mindre du setter "affinity" for programmet ditt til bare en av CPUene skal OSen forsøke å fordele arbeidsmengden mer eller mindre jevnt mellom alle fysiske og logiske (dobbelkjerne og hyperthreading) prosessorer.

5458626[/snapback]

OK, takk. Jeg får prøve det så snart jeg får muligheten.
Lenke til kommentar

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...