Vous voyez une erreur d'algo dans ce programme de calcul en // ? [C] - C++ - Programmation
Marsh Posté le 02-03-2003 à 23:31:00
J'ai pas regardé si il y a des bugs dans ton code, mais le fait que tu observes un gros ralentissement avec la version parallèle ne m'étonne pas du tout. A vrai dire je suis même surpris que la version séquentielle ne te renvoie pas un temps égal à zéro (étant donné que l'horloge a une précision de 1/100ème de sec).
Tout ça pour dire que le produit d'une matrice 128x128 avec un vecteur ça doit prendre un millième de seconde sur une grosse bouse. Le temps que tu mesures, c'est le temps du reste du code.
Si tu veux avoir des infos pertinentes, commence par mesurer le temps pour faire 1000 produits matrice-vecteur. Et essaye avec des tailles de matrices plus importantes. Et tache de faire tes tests sur une grosse bouse (une bonne vieille sparc quadri-proc à 60MHz par ex), pas un bi-athlon à 2Ghz
Marsh Posté le 03-03-2003 à 00:09:17
J'ai acces a un cluster de 200 P4 xeon 2Ghz... mais la n'estpas la question.
La ou je me pose des questions, c'est pourquoi ca prends plus de temps a faire une matrice 16x16 qu'une matrice 128x128 ?
:|
C'est le sujet qui est comme ca, une seule multiplication de matrice carree...
et je peux pas aller au dela de 1024x10249 limitation compilateur).
Marsh Posté le 03-03-2003 à 00:19:29
tetedeiench a écrit : J'ai acces a un cluster de 200 P4 xeon 2Ghz... mais la n'estpas la question. |
- si tu reserve ta matrice avec un malloc, t'auras pas cette limite
- comme je disais plus haut, tu ne mesures le temps d'un calcul qui dure moins d'un millième de secondes avec une horloge qui n'est précise qu'au centième de secondes. Donc mesure le temps de 1000 multiplications et divise ce temps par mille. c'est tout.
Marsh Posté le 03-03-2003 à 00:24:40
je peux pas faire le calcul 1000 fois malheureusement...
spa dans le sujet et il va m'aligner je pense.
Pour la resolution j'y avait pense, mais je devrais obtenir un truc plus coherent nan ?
Marsh Posté le 02-03-2003 à 21:08:25
Bonjour,
Je dois faire un programme basique, prenant une matrice carree, un vecteur, et calculant le vecteur resultant du produit des deux, le tout sur 4 procos.
Pour le vecteur, on nous a oblige a utiliser broadcast, pour la matrice, send/receive. Je sais que ce dernier est VRAIMENT pas optimal, mais c'est ce qu'on nous a demande
Mon souci est que mon programme est, tenez vous bien, plus rapide en termes de temps d'execution pour calculer une matrice 128x128 qu'une matrice 16x16...
Je parle pas de speedup, mais bien de temps d'execution...
Et ca me semble vraiment impossible... quelqu'un peux confirmer que j'ai pas fait de connerie ?
Je sais que mes tableaux sont pas beaux mais spa le probleme la
Ce que je fais, c'est qu'u lieu de dire que j'ai une matrice de 128x128 par exemple, j'ai une matrice de 4x32x128 , ce qui me permet de diviser le tout assez facilement pour l'envoi etc.
Voila la version "serie" de l'algo :
Je sais qu'il fait une matrice de 64x64, mais lui il tourne bieng et j'ai deja ses resultats... c'est pas pour lui qu'il y a le souci.
Merci