|
Publicité ' | ||||||||||||||||||||||||
|
|
#121 | ||
![]() ![]() yan verdavaineIngénieur expert Inscription : mars 2004 Messages : 9 885 ![]() |
ha oui tien,
en ajoutant l'optimization des 1+1+....+1, et en evitant plusieur appèle récurssive, j'améliore nettement les perf ![]() je passe pour 100 de 30s à 5-6s ![]() Code C++ :
|
||
|
|
00
|
|
|
#122 |
![]() ![]() yan verdavaineIngénieur expert Inscription : mars 2004 Messages : 9 885 ![]() |
j'ai comparé avec le code de Steki-kun:
pour 100 moi : 0m1.656s Steki-kun: 0m2.304s pour 130 : moi : 0m56.012s Steki-kun: 1m3.160s
|
|
|
00
|
|
|
#123 |
|
Membre confirmé
![]() |
Tu as pris ma version impérative compilée avec ocamlopt ?
En tout cas c'est intéressant, la différence augmente en proportion bien plus faible que le nombre de partitions donc les complexités sont sensiblement les mêmes. J'aimerais bien voir d'où vient la différence si la technique est la même : tu as le code de ta version là ?
__________________
I'm the kind of guy that until it happens, I won't worry about it. - R.H. RoY05, MVP06 |
|
|
00
|
|
|
#124 | |
![]() ![]() yan verdavaineIngénieur expert Inscription : mars 2004 Messages : 9 885 ![]() |
Citation:
![]() Pour le code je l'ai mis juste avant. [edit] les résultats ne sont pas les même car ce n'est pas le même PC. |
|
|
|
00
|
|
|
#125 | ||
|
Membre confirmé
![]() |
OK ! Pour les options, rien à rajouter à ocamlopt
-unsafe à la limite ca accélerera un chouia les acces tableaux...Edit : Je viens de changer un chouia en remplaçant comme JMB le paquet de 1 dans l'implémentation impérative par leur nombre, je descends à 53s pour n=130, 2.1s pour n=100. A ce niveau là, time ne permet plus de faire la comparaison raisonnablement, je crois qu'on peut dire ex aequo Les boucles à changer : Code :
__________________
I'm the kind of guy that until it happens, I won't worry about it. - R.H. RoY05, MVP06 |
||
|
|
00
|
|
|
#126 | ||
![]() ![]() yan verdavaineIngénieur expert Inscription : mars 2004 Messages : 9 885 ![]() |
j'ai réussi a diviser par 2.5/3 le temps
![]() Code C++ :
Mais cette méthode peut accélérer un morceau du calcul. Par exemple des qu'il reste 50, j'appel ce nouveau code Je ne sait pas si d'autre langages permettent de faire ca.. surtout en fonctionnel |
||
|
|
00
|
|
|
#127 |
|
Membre confirmé
![]() |
euh STOP je t'arrête là, avec les mêmes techniques je calcule la factorielle en O(1)... Là tu fais faire les calculs à ton compilo à la place de ton programme, alors évidemment il reste plus grand chose à faire en runtime. C'est pas le but de l'exercice
__________________
I'm the kind of guy that until it happens, I won't worry about it. - R.H. RoY05, MVP06 |
|
|
00
|
|
|
#128 | ||
![]() ![]() yan verdavaineIngénieur expert Inscription : mars 2004 Messages : 9 885 ![]() |
Citation:
Citation:
simplicité = bof optimisé = beaucoup Ici la boucle for et les appelles récursive sont déroulé. Il reste donc le plus couteux : l'accès en mémoire!!! Le but est juste de montrer ce que l'on peut faire en C++ En faite, je me demande surtout si c'est possible de faire ça en langage fonctionnelle. Mais je suis d'accord que ce code n'apporte rien a part l'optimisation
|
||
|
|
00
|
|
|
#129 | |
|
Membre Expert
![]() Inscription : mars 2002 Messages : 962 ![]() |
Citation:
Common Lisp possède un système de macros puissants, il est peut-être possible de faire ça aussi, à la compilation. |
|
|
|
00
|
|
|
#130 |
|
Membre confirmé
![]() |
Reste que l'utilisation de trucs de ce genre ne relève pas vraiment d'une opposition de style impératif / fonctionnel. C'est assez rarement un bon design de programmation puisque ça ne marche pas pour tout n et que l'air de rien ca fait méchamment grossir l'exécutable.
Et au risque d'être cynique, je dirais que si vraiment on veut dérouler des piles de 500 appels sans le faire "à la main", quel que soit le langage, on peut toujours étant donné un programme P qui fait un nombre constant de boucles et d'appels récursifs, faire un programme qui va écrire sur la sortie standard une version entièrement déroulée du programme P... Que le compilateur t'offre la possibilité de le faire pour toi -- moyennant incantations templatisantes de ton code original, c'est un autre problème
__________________
I'm the kind of guy that until it happens, I won't worry about it. - R.H. RoY05, MVP06 |
|
|
00
|
|
|
#131 | ||||||||
![]() ![]() yan verdavaineIngénieur expert Inscription : mars 2004 Messages : 9 885 ![]() |
Citation:
Citation:
Dans un code, il y as trés souvent des morceaux où les variables sont connu. Mais le compilot ne va pas spécialement dérouler les boucle.... mais avec ce style de programmation tu peut l'obliger. Dans le même style dans ce code : Code C++ :
Code C++ :
Code C++ :
|
||||||||
|
|
00
|
|
|
#132 | |
|
Inactif
Inscription : juillet 2005 Messages : 1 958 ![]() |
Citation:
Mais c'est très peu recommandé d'en abuser. Sérieusement mongaulois, il va falloir faire un effort sur l'orthographe Vis-à-vis des tes optimisations, sais-tu que les performances sont rarement un problème sur des projets ? Et qu'il vaut mieux investir dans une bonne conception et une bonne documentation que dans une bonne performance ? Il me semble que tu n'as fait ça que pour le challenge cependant. Ce qui est fort bien dans ce cas. Mais la lisibilité est très basse aussi. |
|
|
|
00
|
|
|
#133 | |
|
Expert Confirmé Sénior
![]() ![]() ![]() Inscription : novembre 2005 Messages : 4 970 ![]() |
Citation:
Et si on veut citer d'autres langages complets a la compilation, il y a aussi au moins Forth, PL/I, la plupart des macro-assembleurs. Meme les macros du C peuvent etre poussee a bout pour faire bien plus que ce que croient la plupart des gens (voir par exemple la section de boost sur le preprocesseur).
__________________
Les MP ne sont pas là pour les questions techniques, les forums sont là pour ça. |
|
|
|
00
|
|
|
#134 |
![]() ![]() yan verdavaineIngénieur expert Inscription : mars 2004 Messages : 9 885 ![]() |
Pour ce que ca interesse:
un petit bench sur un problème entre différents language http://www.ffconsultancy.com/ocaml/r...languages.html |
|
|
00
|
|
|
#135 | |
![]() ![]() ![]() Inscription : juin 2006 Messages : 6 934 ![]() |
Citation:
__________________
Je ne répondrai à aucune question technique en privé |
|
|
|
00
|
|
|
#136 | |
|
Expert Confirmé Sénior
![]() ![]() |
Citation:
Comparaison avec Haskell : http://augustss.blogspot.com/2007/11...askell-vs.html -- Jedaï |
|
|
|
00
|
|
|
#137 |
|
Inactif
Inscription : juillet 2005 Messages : 1 958 ![]() |
C'est un très bon exemple.
Ce code montre qu'on peut avoir élégance et efficacité avec un programme qui a besoin d'efficacité (c'est un ray tracer). Et l'exemple qui suit en Haskell (cf. le message de Jedai) montre que ocaml n'est pas le seul dans ce cas. Je l'ai déjà posté. Flying Frog Consultancy utilise ocaml pour du calcul scientifique. |
|
|
00
|
|
|
#138 |
![]() ![]() ![]() Inscription : juin 2006 Messages : 6 934 ![]() |
C'est un exemple sur un petit code... Je ne sais pas si ça vaut grand chose.
Par exemple, Java va forcement avoir de mauvais statistiques car Hot Spot ne va pas être vraiment utilisé puisque l'exécution est courte donc le résultat est forcement biaisé Si ce code était intégré à une vrai application et qu'il y aurait des milliers d'appels alors Hot Spot optimiserait/compilerait en natif le code donc les statistiques ne seraient plus les mêmes.
__________________
Je ne répondrai à aucune question technique en privé |
|
|
00
|
|
|
#139 |
|
Expert Confirmé Sénior
![]() ![]() ![]() Inscription : novembre 2005 Messages : 4 970 ![]() |
200 lignes pour l'entrée la plus longue, moyen? C'est pas un mini-bench, c'est micro-bench.
__________________
Les MP ne sont pas là pour les questions techniques, les forums sont là pour ça. |
|
|
00
|
|
|
#140 | |
![]() ![]() yan verdavaineIngénieur expert Inscription : mars 2004 Messages : 9 885 ![]() |
Citation:
Pour moi un bench entre languagene peut montrer que la relation verbosité-rapidité d'un language par rapport à un problème. Et c'est en ca que le lien que je donne me semble un bon bench. Tous comme les codes créé dans ce thread Je pense que pour l'instant, il y as toujours une solution plus rapide en C et C++,mais souvent avec un code plus verbeux, car ces compilateur est plus evolué,optimisé. Mais d'autre language seront toujours plus adapté à un problème donné, avec un code plus lissible et de trés bonne performance. |
|
|
|
00
|
Copyright © 2000-2013 - www.developpez.com