Citation:
Envoyé par
thomMonteillet
salut tous et merci pour vos conseils !
oui, c'est que que je fais actuellement (je le fais pour toutes les variables, du double/int aux vector et objets).
Je ne vois pas l'intérêt pour les types primitifs, ni même pour un objet très petit d'ailleurs, ça risque plutôt d'être contre-productif.
Citation:
Moi, je vais reparcourir tous mon programme et vérifier ceci.
en fait ce qui est le plus long dans un programme c'est les boucles ?
par exemple si j'ai plusieurs "if" imbriqués ça prend pas trop de temps ?
(j'ai fais attention pour les boucles mais les "if" j'en ai mis plein car sans forcement optimiser...)
Les if sont potentiellement coûteux, mais seulement s'ils sont sur un chemin critique.
Citation:
au fait la perrsonne qui m'avait dit d'utiliser des "itérateur" à la place de mes boucles "for" classique m'avait dit n'importe quoi ? on gagne pas forcement en temps de calcul ? (ou ce n'est pas significatif en tout cas?)
Ce n'est pas automatique, ça dépend sur quoi tu itères, et quel types d'opération tu fais dans la boucle sur ton conteneur.
A la base il n'y a jamais de recettes magique, il faut que tu cherches plutôt à comprendre ce qui se passe et quelle est la différence en terme d'exécution.
Ça rejoint le fait de passer des int par const ref pour gagner du temps parce que quelqu'un aura dit que les references constantes c'est plus rapide :aie:
Citation:
Envoyé par
thomMonteillet
que veux tu dire par minimiser le nombre d'allocations mémoire ? minimiser le nombre de variables ? ou minimiser le nombre d'allocations dynamiques ?
new/delete (malloc/free). Genre ne pas faire ça dans une boucle.
Citation:
mémoire cache c'est bien mémoire RAM ? le disque OK. Mais qu'appel tu mémoire ? pour moi il y a juste mémoire RAM et disque non ?
Non pas du tout, il y a plusieurs niveaux de mémoire. Google "mémoire cache" et wikipedia doit sortir en premier : http://fr.wikipedia.org/wiki/M%C3%A9moire_cache
Citation:
j'ai une dernière question sur le parallélisme afin de comprendre ce que c'est:
il y a en gros trois façon de procéder :
1) si un a un PC avec plusieurs processeurs on va faire du multithread et le programme va envoyer vers chaque processeurs une partie du calcul.
2) si on a d'autres PC sous la main, ou un cluster. On peut faire une parallélisation qui va envoyer des calculs sur chacunes des mémoires disponibles sur les autres PC, c'est ce que l'on appel la mémoire distribuée? (et ceci on ne le fait pas avec du multithread mais plutot avec des messages comme MPI ?)
3) la dernière méthode est la même que la 2) mais les différentes mémoires disponibles sont regroupées donc on parle de mémoire partagée.
La 3 n'existe pas (en pratique). Le 1 est un modèle à mémoire partagée.
Citation:
Si je fais un programme en multithread pourra t il être utilisé ensuite pour faire du 2) et 3) ? à mon avis non ?
et vis et versa, si je fais un programme pour 2) sera t il utilisable par 3) et 1) ?
Oui, c'est orthogonal, sachant que 2) est un peu plus difficile que 1).
Citation:
je voudrais juste comprendre les différentes parallélisation qui existe (et pourquoi utiliser l'une plutôt que l'autre). merci
Ne pas oublier la vectorisation (SSE/AVX), ça peut offrir un gain intéressant selon le type de calcul.