Page 1 sur 3

PB pour CPU 2 coeurs

Publié : ven. 21/déc./2007 22:48
par SPH
Hi !

Les proc 2 coeurs etant devenu la "norme" si je puis dire, pourrait on voir PB s'adapter ??

thx

Publié : ven. 21/déc./2007 22:59
par Chris
Euhhhh! Installe 2 x Pb :roll:


Ok, je sors! :oops:

Publié : ven. 21/déc./2007 23:51
par Backup
le pure basic est deja adapté, si je puis dire

il utilise deja le multithreading des P4 grace aux Thread....
Simultaneous Multi Threading est une technique datant des années 1950. Elle consiste, comme le Symmetric multiprocessing (SMP), à augmenter le TLP (Thread Level Parallelism), c’est-à-dire le parallélisme des threads.
Le but est d'améliorer le remplissage du flot d'instructions du processeur et donc d'augmenter sa vitesse de traitement, à condition que le programme soit conçu de façon adéquate.



les multicoeurs (Core Duo etc.. a ne pas confondre avec les multicoeur ancienne generation ) etant un system qui permet d'utiliser le multithreading pour des applications qui ne sont pas prevu pour !!
un multithreading transparent en fait !

en clair avec un Core Duo etc .. c'est pas le langage qui gere le multitache mais le Harware !!

Les coeurs se partagent la mémoire cache

Intégrée au processeur, la mémoire cache de niveau 2 est une mémoire vive ultrarapide qui sert d'intermédiaire entre les coeurs et le bus système. Pour éviter les allers-retours avec la mémoire vive, elle stocke temporairement les données et les instructions dont les coeurs peuvent avoir besoin, en anticipant certaines demandes. Dans les puces double coeur de première génération d'Intel, chaque coeur possédait son propre cache.

Avec l'architecture Core, cette mémoire est unifiée et partagée « dynamiquement » entre les deux coeurs : chaque coeur peut s'en octroyer à volonté une portion de taille variable pour y stocker les informations qu'il veut garder sous la main. S'il en a besoin, l'autre coeur peut accéder directement à ces données, sans passer par le bus système externe.

2. Certaines micro-instructions sont fusionnées

Les instructions provenant du système d'exploitation sont transformées en une suite de micro-instructions (des commandes élémentaires adaptées aux unités de traitement du processeur). Quand c'est possible, l'architecture Core regroupe deux micro-instructions en une seule, afin de réduire le nombre total d'opérations à exécuter par les unités de traitement. Un mécanisme de fusion qui revêt un intérêt évident quand on sait qu'un programme peut générer plusieurs milliards de micro-instructions...

3. Les accès à la mémoire sont optimisés

Sur les précédents processeurs Intel, les instructions de lecture et d'écriture en mémoire vive (Ram) étaient exécutées scrupuleusement dans l'ordre où elles apparaissaient. Du coup, un processus A ayant besoin de lire en mémoire pouvait être interrompu temporairement, en attendant qu'un processus B ait fini d'y écrire ses données.

Et ce, même si les données de ces deux processus étaient totalement indépendantes ! L'architecture Core est capable de découpler ces opérations dès lors qu'elles ne concernent pas les mêmes données, ce qui favorise les traitements en parallèle.

Donc par definition, le Purebasic n'as pas a gerer le partage du temps machine, c'est le Hardware et le system d'exploitation qui gere ça !! :)


bref le Purebasic est deja optimisé pour ..

Publié : sam. 22/déc./2007 0:18
par SPH
Ok, c'est une bonne chose :P

Publié : sam. 22/déc./2007 10:49
par Eric
C'est une bonne chose. je me suis poser la question aussi.

Je suis avec un Quad core.

Cdt,

Eric

Publié : sam. 22/déc./2007 18:57
par Patrick88
beuh... 8O

vi mé euh

quand je fais un rendu (en douce) sur le core 2 duo au boulot sous anim8or
et que j'active le gestionnaire de tâches, y'a qu'un "core" qui bosse, l'autre se les roulent.... cependant la bécane se traine lamentablement.... ???

je verrai ça prochainement, papanoël doit m'amenr un core2 avec une 8800gtx et 4gigot de ram.... gaaaaaaaaaazzzzzzz ça va changer du semplom2800 :?

Publié : sam. 22/déc./2007 19:22
par Backup
Patrick88 a écrit :beuh... 8O

vi mé euh

quand je fais un rendu (en douce) sur le core 2 duo au boulot sous anim8or
et que j'active le gestionnaire de tâches, y'a qu'un "core" qui bosse, l'autre se les roulent.... cependant la bécane se traine lamentablement.... ???
normal !!

les concepteurs de ces applis bien particulière qui traitent de la 3D
ne savaient pas qu'il y aurai des Core2 et compagnie ..

alors ils ont créé des routines speciale pour les systems de carte mere a plusieurs Processeur, avec plusieurs Memoire Cache ..
qui bien sur ne sont plus adapté pour ces processeur particulier...


je dirait que le probleme dans ces cas precis, viendrai du fait que l'application est trop specifique pour la generation des Core Duo !! :)
vu qu'elle gerent elles meme la distribution du travail aux Threads...


ce qui est tres efficace sur un P4 Multithread, ne l'est pas forcement pour les Multicores :)


pour les multicores, il aurai mieux valu ne pas chercher a optimiser le code, puisqu'en principe c'est le Processeur qui détermine le travail a faire ....

je suppose que la gestion des Thread pour un multicore, doit etre ardu a faire par contre ...
cela risque effectivement de ralentir plus le systeme , que de l'accelerer !!

ce serai peut etre pas mal finalement qu'en purebasic on puisse choisir de faire travailler un Coeur ou un autre :D
une sorte de Super-Threading en quelque sorte :D

a suggérer a Fred ... :D

en fait SPH avait raison de poser cette question interressante :)

Publié : sam. 22/déc./2007 19:29
par wolfjeremy
J'ai pas tout lu mais comme le dit Dobro c'est géré par le hardware et l'os, donc rien à faire de spécial de notre coté !
A part bien gérer nos thread c'est important !

5 commandes

Publié : sam. 22/déc./2007 21:49
par beauregard
SPH a écrit :Les proc 2 coeurs etant devenu la "norme" si je puis dire, pourrait on voir PB s'adapter ??
mais avant d'attaquer ce gros morceau( une histoire sans fin), il faudrait que Fred donne un peu de son temps à un parent pauvre, oublié depuis des années:
http://fr.wikipedia.org/wiki/DualShock
ExamineJoystick
InitJoystick
JoystickAxisX
JoystickAxisY
JoystickButton
...et vivement la suite!
Et voici un moment de solitude:
http://www.purebasic.fr/french/viewtopic.php?t=7570

le joypad le plus aboutis:
http://playstation3.files.wordpress.com ... roller.jpg

Publié : dim. 23/déc./2007 6:46
par venom
le joypad le plus aboutis:
tout a fait d'accord avec toi :wink: :P



@++

Publié : dim. 23/déc./2007 11:39
par Anonyme
j'ai aperçu un code permettant de choisir le CPU , c'etait avec l'api Win32 si je me souvient bien , mais dire ou se trouve ce code , j'en sais rien, tout ce que je me rappelle , c'était pas ici en tout cas :?

Re: 5 commandes

Publié : dim. 23/déc./2007 12:52
par wolfjeremy
beauregard a écrit : le joypad le plus aboutis:
http://playstation3.files.wordpress.com ... roller.jpg
+100000000000

Publié : dim. 23/déc./2007 13:20
par Backup
Cpl.Bator a écrit :j'ai aperçu un code permettant de choisir le CPU , c'etait avec l'api Win32 si je me souvient bien , mais dire ou se trouve ce code , j'en sais rien, tout ce que je me rappelle , c'était pas ici en tout cas :?
il existe apparement une librairie microsoft pour gerer les MultiCores

voir ici :
http://msdn.microsoft.com/msdnmag/issue ... spx?loc=fr

Publié : dim. 23/déc./2007 14:19
par Anonyme
Le pointeur de ma mémoire n'est plus NULL :D

voici les infos que j'ai la dessus :


Code en Darkbrouzouck :

Code : Tout sélectionner

`USE: read the cpu count using the function cpu_count()
`USE: set the cpu using the function set_affinity(input) - input takes the cpu no.
`example: use the last cpu core only: set_affinity(cpu_count())

print "CPU count: ",cpu_count()
print "CPU use set: ",set_affinity(%000000000000000000000010)


suspend for key


function cpu_count()
   `FOR INFO GO TO: http://msdn2.microsoft.com/en-us/library/ms686223.aspx

   for next_dll=1 to 256
      if dll exist(next_dll)=0 then exit
   next next_dll

   load dll "C:\WINDOWS\system32\kernel32.dll",next_dll

   lpProcessAffinityMask=make memory(32)
   lpSystemAffinityMask=make memory(32)

   hProcess=call dll(next_dll,"GetCurrentProcess")
   get=call dll(next_dll,"GetProcessAffinityMask",hProcess,lpProcessAffinityMask,lpSystemAffinityMask)

   for cpu_count=1 to 32
      if mid$(bin$(*lpProcessAffinityMask),cpu_count)="0" then exit
   next cpu_count
   dec cpu_count

   delete dll next_dll
   delete memory lpProcessAffinityMask
   delete memory lpSystemAffinityMask
endfunction cpu_count






function set_affinity(in)
   `FOR INFO GO TO: http://msdn2.microsoft.com/en-us/library/ms686223.aspxv

   for next_dll=1 to 256
      if dll exist(next_dll)=0 then exit
   next next_dll

   load dll "C:\WINDOWS\system32\kernel32.dll",next_dll

   lpProcessAffinityMask=make memory(32)
   lpSystemAffinityMask=make memory(32)

   hProcess=call dll(next_dll,"GetCurrentProcess")
   get=call dll(next_dll,"GetProcessAffinityMask",hProcess,lpProcessAffinityMask,lpSystemAffinityMask)

   *lpProcessAffinityMask=in

   succes=call dll(next_dll,"SetProcessAffinityMask",hProcess,*lpProcessAffinityMask)

   delete dll next_dll
   delete memory lpProcessAffinityMask
   delete memory lpSystemAffinityMask
endfunction succes

Publié : dim. 23/déc./2007 16:33
par Backup
bien ... mais c'est pas du purebasic ça :lol:

alors c'est a nous de tout refaire quoi ... pffff ! :)