|
Bas de page | |
---|---|
Auteur | Sujet : Différence entre les calculs |
Ganon551 | Bonjour à tous,
--------------- Mon btag : ganon551#2549 |
Publicité | Posté le 19-12-2012 à 08:29:42 |
Ganon551 | Rien de spécial, je cherchais juste à voir si il y avait certains calculs qui font plus chauffer le processeur, curiosité simple ^^ Après j'ai juste fait un petit programme multithreads pour voir la différence de température atteinte. J'ai lu un truc sur les caches, si les données à utiliser ne sont pas stockées dans le cache, il va chercher dans la RAM et pendant ce temps le processeur ne fait rien. Du coup si on veut chauffer il faudrait utiliser seulement le cache non ? Message édité par Ganon551 le 19-12-2012 à 19:00:21 --------------- Mon btag : ganon551#2549 |
theshockwave I work at a firm named Koslow | Bah, il faudrait déjà savoir ce qui fait chauffer le plus ton CPU, si faire des transferts entre cache et registres a un impact et ce genre de subtilités.
--------------- last.fm |
Ganon551 | Comment fais-tu des transferts entre registre et cache en pratique ? En fait mon calcul comporte au début un rand(), et après je traite le rand avec une condition, si le rand est inférieur à 5000 (par exemple), il fait un calcul, si il est supérieur à 5000 il en fait un autre. Mon calcul utilise ensuite un nombre qu'on appellera 'e', qui est un rand. Suite à ça j'ouvre une boucle infinie et je traite le 'e' en condition, selon les valeurs qu'il prend je lui applique une série de sin(cos(log())) et j'intervertis les cos sin et log selon la condition. Maintenant je ne sais pas si les opérations sont simplifiables, qu'entends tu par là ? Dans le cas actuel des choses il me semble difficile pour le processeur de prévoir la suite du calcul et donc d'optimiser.
Du coup ça chauffe un peu plus, en 30s je passe de 47° à 74°, contre 70° avant. Message édité par Ganon551 le 20-12-2012 à 02:50:17 --------------- Mon btag : ganon551#2549 |
theshockwave I work at a firm named Koslow | Evite les conditions : si ton processeur se vautre dans la prédiction, ca va faire un stall et c'est pas garanti que pendant le flush du piepline, y'aie pas quelques unités qui se tournent les pouces. --------------- last.fm |
Ganon551 |
theshockwave I work at a firm named Koslow | Cela dit, en y pensant, peut-être que l'unité de branchement va plus faire chauffer ...
--------------- last.fm |
Ganon551 | J'ai essayé sans les conditions mais ca ne faisait pas plus chauffer. En revanche j'ai imbriqué trois boucles par thread et il chauffe bien avec ça. Les instructions SSE font bien chauffer. --------------- Mon btag : ganon551#2549 |
theshockwave I work at a firm named Koslow | Et donc, tu as essayé avec un thread sur deux qui fait du calcul sur entier et l'autre qui fait du calcul en sse ? Ce sont des unités indépendantes. Si tu as un Core i3 ou Core i7, tu peux essayer avec 4 ou 8 threads avec cette répartition de tâches. --------------- last.fm |
Publicité | Posté le 21-12-2012 à 01:42:56 |
Ganon551 | Ah non tous mes threads font du float, je vais essayer en entier. Au passage j'ai une autre question qui peut paraître stupide. Dans un logiciel de bench comme sandra ou autre, je vois des calculs "FPU" et "APU". A quoi correspondent-ils en pratique ? Merci pour ton aide et ta patience EDIT : Bon j'ai essayé avec des entiers mais ça chauffe moins. Toutefois je ne sais pas trop quoi faire comme calcul lourd en utilisant seulement des entiers, additions, soustractions, etc, c'est pas bien lourd Message cité 1 fois Message édité par Ganon551 le 21-12-2012 à 07:07:54 --------------- Mon btag : ganon551#2549 |
theshockwave I work at a firm named Koslow |
--------------- last.fm |
Ganon551 | Oui je parlais d'ALU désolé je savais bien qu'APU n'était pas correct ici.
--------------- Mon btag : ganon551#2549 |
Terminapor I'll see you rise. | ALU il me semble que c'est arithmetic & logic unit, donc les entier oui. --------------- Perhaps you don't deserve to breathe |
Ganon551 | Bon je reprend mon topic pour une autre question, j'ai trouvé un semblant de réponse sur le fofo mais je n'arrive pas à l'appliquer.
--------------- Mon btag : ganon551#2549 |
Terminapor I'll see you rise. | pour utiliser des tableaux de bits tu as les containers bitset.
--------------- Perhaps you don't deserve to breathe |
Ganon551 | Merci pour ta réponse.
--------------- Mon btag : ganon551#2549 |
theshockwave I work at a firm named Koslow |
--------------- last.fm |
Ganon551 | Merci de ta réponse. Ici j'ai bien un objectif, même si ça ne sers pas à grand chose. Il y a trois ans à peu près j'avais programmé pour m'entraîner un petit calculateur de nombres premiers en C++ et Qt. J'avais donc simplement implémenté le crible d'Eratosthène. Ensuite à mes heures perdues je me suis amusé à l'optimiser pour calculer les nombres premiers jusqu'à 1 milliard le plus rapidement possible. Mais je n'ai jamais réussi à paralléliser le calcul. Et hier je suis tombé sur un article de quelqu'un qui avait utilisé openMP pour paralléliser les boucles for et qui avait de bons résultats. Du coup je m'y suis remis et j'espérais pouvoir utiliser pthread.
J'ai pris bitset, sur ma version la plus avancée j'utilise les QVector ça marche bien. Bon c'est vraiment un code très simple, les performances sont vraiment mauvaises, mais c'est pour vous donner une idée de ce que je cherche à paralléliser. Et je tiens à préciser que les lignes openMP ici me font vraiment gagner en performances, du coup je me disais que peut être pthread pouvait le faire aussi. Du coup il n'y a aucun moyen de modifier le même array en mêem temps pour deux threads différents ? Message édité par Ganon551 le 24-12-2012 à 19:41:05 --------------- Mon btag : ganon551#2549 |