[C++] SMP & Multithreading

Pagina: 1
Acties:

  • Menblack
  • Registratie: November 2001
  • Laatst online: 28-06 20:10
als je met Multithreading bezig bent ben ook gelijk bezig met het gebruiken van meerdere processoren of moet dat apart worden aan geschakelt ?

  • D2k
  • Registratie: Januari 2001
  • Laatst online: 31-08 10:19

D2k

als je er meerdere hebt ben je met meerdere bezig imho :)

Doet iets met Cloud (MS/IBM)


  • Menblack
  • Registratie: November 2001
  • Laatst online: 28-06 20:10
maar gaat er om dat ze ook bv op 100% komen als die multitreading in visual c++ gebruik

  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
Als je gebruik maakt van threads kunnen binnen 1 proces meerdere sequentiele executies parallel worden uitgevoerd. Threads zijn veel handiger voor concurrent-programming dan processen omdat ze toegang hebben tot hetzelfde geheugen-gebied.

Threads worden gescheduled op CPUs door het operating system. Een thread heeft daarbij een eigen stack, maar delen wel dezelfde geheugen-ruimte en kunnen dus bij elkaars data. Hiervoor zijn dan weer constructies nodig om toegang tot variabelen te beschermen.

Als het operating system ook threads ondersteunt kan deze er inderdaad voor zorgen dat 2 threads uit hetzelfde proces op verschillende CPUs worden gescheduled.

Maar ja, hiervoor moet het OS wel threads kennen. Als een OS geen threads kent (maar uiteraard wel processen) wordt er gebruik gemaakt van nep-threads. Hierbij kan er dan maar 1 thread per proces gescheduled worden, waardoor er dus niet meerdere threads uit 1 proces tegelijk gescheduled kunnen worden over meerdere processoren :) .

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


  • Menblack
  • Registratie: November 2001
  • Laatst online: 28-06 20:10
ja dat wou ik weten maar dat ondersteun win98 wel en hoger ook maar niet alle smp

  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
Menblack: ja dat wou ik weten maar dat ondersteun win98 wel en hoger ook maar niet alle smp
en dus :?

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 13-09 23:11
Waar je threads gescheduled worden is aan het OS. Win9x schedulet alle threads op een proc ( want geen SMP ), WinNT zal de threads op meerdere procs uitvoeren.

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 11-09 08:26

.oisyn

Moderator Devschuur®

Demotivational Speaker

Op zaterdag 16 februari 2002 17:32 schreef mbravenboer een verhaal over threads en processen
uhm, Menblack had het over processoren, niet over processen :)

De WinNT API bevat een functie waarmee je een thread op een bepaalde processor kunt forceren. Volgens mij kun je, zonder gebruik van die functie, er niet vanuit gaan dat de 2 threads in je programma altijd op verschillende cpu's zullen draaien (als die aanwezig zijn natuurlijk :))

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • SG
  • Registratie: Januari 2001
  • Laatst online: 13-09 07:59

SG

SG surft naar info hardewaren

Op zaterdag 16 februari 2002 17:00 schreef Menblack het volgende:
als je met Multithreading bezig bent ben ook gelijk bezig met het gebruiken van meerdere processoren of moet dat apart worden aan geschakelt ?
Ik denk het wel en wordt bepaald door de SMP ondersteuning van je OS kernel of die SMP ondersteund.

En dat is dus win NT of hoger
met uitzondering van win XP home (is NT based met SMP disabled)

Daarbij beheerd de kernel alle tread je kan erbij wel preoriteiten instellen dus de timeslice die ze krijgen vergroten of verkleinen die verdeeld worden over de CPU's weet niet of hier ook wat kan worden ingesteld.

X399 Taichi; ThreadRipper 1950X; 32GB; VEGA 56; BenQ 32" 1440P | Gigbyte; Phenom X4 965; 8GB; Samsung 120hz 3D 27" | W2012SER2; i5 quadcore | Mac mini 2014 | ATV 4g | ATV 4K


  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
OiSyN: uhm, Menblack had het over processoren, niet over processen :)
En ik had het over allebei ;) . Ik dacht dat ik het onderscheid wel duidelijk had aangegeven... Processen zijn juist heel relevant in dit verhaal :) .

Ik zei ongeveer dit:

Als een OS kennis heeft van threads en meerdere processoren ondersteunt zal hij threads uit hetzelfde processen op verschillende processoren kunnen schedulen. Uiteraard kan een OS hier zo dom mee omgaan als hij zelf wil, maar het is dus wel mogelijk. In hoeverre dit op MS Windows NT/2000/XP ook goed geregeld wordt weet ik niet.

Als een OS geen kennis heeft van threads heeft hij alleen kennis van processen. Het OS kan dan alleen processen schedulen en is dus niet instaat om threads uit hetzelfde proces tegelijk te laten draaien over verschillende processoren. Er worden dan voor multi-threading nep-threads gebruikt die qua performance helemaal niets toevoegen...

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


  • Menblack
  • Registratie: November 2001
  • Laatst online: 28-06 20:10
maar je kan het forceren bij nt of 2k op op de ander andere proccesor te laten werken en welke lib is dat ???

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 13:13
Op zondag 17 februari 2002 17:36 schreef mbravenboer het volgende:
Als een OS geen kennis heeft van threads heeft hij alleen kennis van processen. Het OS kan dan alleen processen schedulen en is dus niet instaat om threads uit hetzelfde proces tegelijk te laten draaien over verschillende processoren. Er worden dan voor multi-threading nep-threads gebruikt die qua performance helemaal niets toevoegen...
Een voorbeeld hiervan is de FreeBSD (4.x) kernel, die niet in staat is om threads uit hetzelfde proces over meerdere processoren te verdelen. Dit wordt overigens in de 5.0 release verholpen.

Dit soort overwegingen zijn vooral van belang bij 'dedicated' servers, die voornamelijk één enkele applicatie zullen draaien (bijvoorbeeld een databaseserver).

Om op de vraag terug te komen: het verschilt per operating system of de threads al dan niet automatisch over verschillende processoren worden verdeeld. Voor zover ik weet is er geen standaardmethode voor, dus zal je de API van je operating system door moeten nemen.
Pagina: 1