Yougo dit : Concernant la compilation sous Delphi, pac, tu saurais pas faire un truc en ligne de commande comme les autres ?
Yougo dit : Tu saurais pas faire un programme en ligne de commandes comme tout le monde ?
Non, je ne sais pas encore faire mais je m'y mets de suite, ça ne doit pas être trop difficile, enfin j'espère.
Yougo dit :
vortex666 dit : Pac, stp, arrete! nous n'avont tester que des calculs, cela n'est pas tres significatif!
Mais c'est sur ce terrain que C++ pourra l'emporter sur les autres langages évoqués.
Exactement, si sur ces calculs, il n'est pas plus performant, pourquoi le serrait-il sur d'autres types de calculs ? Il n'y a pas de raison.
De plus, tout le monde est content de faire ces tests là, personne n'a été forcé, on aime bien vérifier ce qu'on entend et ne pas tout croire bêtement.
Czayfaboo dit : Bon ben on refera des test (pour moi, çà sera pas avant les prochaines vacances scolaires) avec des rendus 3D dans ces différents langages... La lib utilisée doit exister dans tous les langages pour que çà soit valide bien sûr...
Delphi n'est pas fait pour faire de la 3D, mais l'idée est très intéressante. il existe openGL, la SDL, DirectX qui sont portés au moins pour C++ et C#, c'est un bon début. Pour moi, une bibliothèque, une fois compilée doit être aussi rapide quelque soit le langage utilisé, quand on a du code machine, c'est souvent le même.
vortex666 dit : Et plus le code résultant
de la compilation est sale, plus
l'exécution sera lente. Cela explique
la lenteur d'exécutables compilés
avec des langages dits de
haut niveau, ceux-ci essayant de
suivre à la lettre le code source de
haut niveau, qui correspond à une
énorme série d'instructions
assembleur que le compilateur
utilise à la pelle. Le code assembleur
résultant est souvent lourd
et sale, au contraire d'une application
directement développée en
assembleur (mais en plusieurs
mois, alors que la première a
demandé quelques heures).
Je ne vois pas pourquoi Delphi serrait plus haut langage que le C++, ni le C# d'ailleurs.
Pour vraiment pouvoir répondre à ce genre de question, il nous faudrait un connaisseur en assembleur qui puisse comparer les codes machines générés. Par exemple Moby, si tu nous lis, serrais-tu intéressé pour comparer nos codes ?
Perso, il m'est facile de donner le code assembleur généré par le compilateur.
Mais je le répète mais je pense qu'on obtiendra les mêmes choses à peu de chose près (pour moi la seule différence réside dans le += qui n'existe pas dans tous les langages).
__________________________
Lisez la charte, pensez à regarder la FAQ, les tutoriaux, l'annuaire et faites une recherche dans les forums.
N'oubliez pas le Tag [Résolu].
@pac: Concernant le programme en ligne de commandes, c'est censé être le truc le plus simple qu'on puisse imaginer. Bien loin de la gestion des fenêtres, ...
Le problème de l'algorithme utilisé est qu'il s'agit en gros d'une énorme boucle qui fait des modulos. Les opérations effectuées ne sont pas très complexes et seuls les langages optimisés pour les boucles sauront y obtenir des résultats intéressants.
Concernant la 3D, je ne crois pas que ce soit une si bonne idée que ça. Surtout que les librairies Python (et, je crois, Java) sont directement interfacées sur la librairie du C. Les différences seront alors minimes et pas vraiment intéressantes. Il vaudrait mieux trouver autre-chose.
__________________________
Aidez les autres membres en publiant sur le forum le code que nous vous avons aidé à créer ! Où sont les membres de MP ?
J'ai réussi à faire une application console
Bon j'avoue c'était pô dur c'est normal c'est du Delphi.
Voici pour télécharger l'exe et les sources : ICI.
C'est bizarre, j'ai fait un test avec, il a mis 28sec pour 100 000 alors que c'était plus rapide en monde windows.
PS : tu peux mettre N en paramètre, s'il n'y a rien, c'est 100 000 par défaut.
__________________________
Lisez la charte, pensez à regarder la FAQ, les tutoriaux, l'annuaire et faites une recherche dans les forums.
N'oubliez pas le Tag [Résolu].
Yougo dit : @pac: Concernant le programme en ligne de commandes, c'est censé être le truc le plus simple qu'on puisse imaginer. Bien loin de la gestion des fenêtres, ...
Ouais je sais mais j'ai directement commencé avec des fenêtres, je connaissais déjà les langages OO et tout et tout. Bon Ok je me la pête.
Je trouve ça si simple de rajouter un simple bouton, double-clic dessus et en avant la musique pour le ptit code dedans.
Yougo dit : Le problème de l'algorithme utilisé est qu'il s'agit en gros d'une énorme boucle qui fait des modulos. Les opérations effectuées ne sont pas très complexes et seuls les langages optimisés pour les boucles sauront y obtenir des résultats intéressants.
Si python n'est pas optimisé pour ce n'est pas grave, il n'en avait pas de toute façon la prétention.
Ca avance aussi le point de savoir comment un langage calcule le modulo, peut-être certains le font mieux que d'autres, quoique j'en doute. Quand il existe une meilleure façon parmi toutes les façons, pourquoi en utiliser une mauvaise ?
En revenant sur la comparaison du code assembleur généré, l'avantage est de pouvoir comparer les compilos, je sais que celui de Delphi est bon, celui de Lazarus Free Pascal, je ne sais pas ce qu'il vaut.
__________________________
Lisez la charte, pensez à regarder la FAQ, les tutoriaux, l'annuaire et faites une recherche dans les forums.
N'oubliez pas le Tag [Résolu].
vortex666 dit : Pac, tu devrais te programmer un petit jeu en C++ avec OpenGL ou DX, et je te garantis que tu changera d'avis!
Je compte bien le faire un jour dès que je suis en vacances, j'ai le temps devant moi et la motivation.
Déjà pour les vacances, c'est rare, quand ça arrive, j'ai pas trop le temps de faire de la prog et en vacances j'aime bien aussi voir autre chose que de la prog, donc j'ai bien peur que ce ne soit pas demain la veille. Mais ça reste prévu dans les objectifs à long terme. (enfin peut-être ne serra qu'en C# et non en C++ ).
__________________________
Lisez la charte, pensez à regarder la FAQ, les tutoriaux, l'annuaire et faites une recherche dans les forums.
N'oubliez pas le Tag [Résolu].
Yougou dit : @Concernant la 3D, je ne crois pas que ce soit une si bonne idée que ça. Surtout que les librairies Python (et, je crois, Java) sont directement interfacées sur la librairie du C. Les différences seront alors minimes et pas vraiment intéressantes. Il vaudrait mieux trouver autre-chose.
Qu'importe, çà fera toujours un élément comparé en plus...
Que proposerait tu d'autres, du point de vu d'un Pythonien comme toi ?
__________________________
Sujet résolu ? Pensez à mettre le tag
Un problème en C# ? Vérifiez celui-ci n'est pas déjà résolu dans la FAQ et que le sujet n'est pas traité parmis les tutoriaux ou les articles avant de poster dans le forum C#.
Voici un petit code C++, non optimizer, etoptimizer en asm comme le demontre la revue d'on j'ai donner le lien avant, le gain est d'environ 15%
(ce code a ete ecrit en 15 min. alors...)
#pragma comment(lib, "winmm.lib") //Windowz lib
#include <windows.h>
#include <stdio.h>
#include "Timer.h"
CTimer Timer;
float Result[2] = {0,0};
void main(void)
{
Timer.Reset();
printf("\n\n");
printf("Testing Normal Code...\n\n");
{
int a, b, tmp, Cpt;
a = 1;
b = 2;
tmp = 0;
Cpt = 0;
Timer.Tick();
for(Cpt = 0; Cpt < 10000000; Cpt++){
tmp = b;
b = a;
a = tmp;
}
Timer.Tick();
}
Result[0] = Timer.g_ElapsedTime;
printf("Normal Time Taken: %f Seconds.\n\n", Result[0]);
printf("Testing Optimized Code...\n\n");
{
int a, b, tmp, Cpt;
a = 1;
b = 2;
tmp = 0;
Cpt = 0;
Timer.Tick();
for(Cpt = 0; Cpt < 10000000; Cpt++){
_asm{
mov eax, a;
mov ebx, b;
push eax;
push ebx;
pop eax;
pop ebx;
}
}
Timer.Tick();
}
Result[1] = Timer.g_ElapsedTime;
printf("Optimized Time Taken: %f Seconds.\n\n", Result[1]);
printf("Time Gained: %4.2f%%.\n\n", (Result[0] / Result[1]) * 100.0f);
}
Et voici le code de la classe CTimer, un timer utilisant le "High Performance Counter" timer. C'est ce que j'utilise pour mes jeux. Il renvoie dans un float, le temp, en seconde ecouler depuis le dernier Tick();
Timer.cpp
#include "Timer.h"
CTimer::CTimer()
{
//Check if a High resolution timer is available
if (QueryPerformanceFrequency((LARGE_INTEGER *)&m_PerfCounterFrequency))
{
m_PerfCounterAvailable = true;
QueryPerformanceCounter((LARGE_INTEGER *) &m_CurrentTime);
m_TimeScale = 1.0f / m_PerfCounterFrequency;
}
else
{
// no performance counter, read in using timeGetTime
m_PerfCounterAvailable = false;
m_CurrentTime = timeGetTime();
m_TimeScale = 0.001f;
}
Reset();
}
void CTimer::Reset()
{
// Is performance hardware available?
if(m_PerfCounterAvailable){
// Query high-resolution performance hardware
QueryPerformanceCounter((LARGE_INTEGER *)&m_CurrentTime);
} else {
// Fall back to less accurate timer
m_CurrentTime = timeGetTime();
} // End If no hardware available
// Init m_LastTime and g_ElapsedTime
m_LastTime = m_CurrentTime;
g_ElapsedTime = 0.0f;
}
void CTimer::Tick()
{
// This will be used to compare how many time has pass since the last Tick()
m_LastTime = m_CurrentTime;
// Is performance hardware available?
if(m_PerfCounterAvailable){
// Query high-resolution performance hardware
QueryPerformanceCounter((LARGE_INTEGER *)&m_CurrentTime);
} else {
// Fall back to less accurate timer
m_CurrentTime = timeGetTime();
} // End If no hardware available
// Calculate the elapsed time
g_ElapsedTime = (m_CurrentTime - m_LastTime) * m_TimeScale;
}
Timer.h
#ifndef CTIMER_H
#define CTIMER_H
#include <Windows.h>
//#include <MMSystem.h>
class CTimer
{
private:
bool m_PerfCounterAvailable;
float m_TimeScale;
__int64 m_LastTime; //--Holds the value when the timer is started
__int64 m_CurrentTime; //--Holds the current time
__int64 m_PerfCounterFrequency; // Performance Frequency
public:
CTimer();
//virtual ~CTimer();
void Reset(); // Reset the timer
void Tick(); //--Count how many time has pass since the last call of Tick();
float g_ElapsedTime; //--Holds the elapsed time (StartTime - CurrentTime)
};
#endif //--CTIMER_H
Pour 10000000 loop,
le code non-optimiser prend 0.0335 sec.
le code optimizer(un peu) prend 0.02962 sec.
Temp gangner: 13% plus vite
J'ai ete surpris par les resultats alors j'ai decider de poster le code. En fait, le code se sert de la pile au lieu d'une variable temporaire, alors c un peu plus vite. Cette optimization peut aussi etre faite en Delphi(Pascal), mais dans les autres languages, j'en doute...
Czayfaboo dit : Qu'importe, çà fera toujours un élément comparé en plus...
Que proposerait tu d'autres, du point de vu d'un Pythonien comme toi ?
Je propose de faire un simple calcul:
Obtenir le résultat du calcul suivent, où toutes les opérations sont entières:
La somme de la division entière d'un nombre a exposé 11 fois par 1987 et du modulo de a par 2007.
Et dans les autres langages ? Je suppose en tous cas que ça prendra plus de temps à programmer
__________________________
Aidez les autres membres en publiant sur le forum le code que nous vous avons aidé à créer ! Où sont les membres de MP ?
Lol, tu as vraiment le droit à des nombres à n chiffres en Python... c'est sympathique... ... En C++, je sais pas combien çà prend de temps.. mais il faudrait utilser la lib GMP (sur le site swox.com) et en C#, ben j'ai posté un message sur le forum de dev voir s'il y a moyen de recompiler cet lib via C++.NET pour m'en servir... mais je pense que çà sera quand même plus long... même si la lib est redoutablement bien optimisée (trouver un nombre premier à 1024 bits instantanément, j'ai toujours pas compris comment elle fait.. je sais juste que l'algo est basé sur des stats et qu'il y a un très grd nombre de chance pour que le nb retourné soit premier (+ de 99%) -> notre spécialiste en math (alias pac) aurait-il un élément de réponse ? )...
Enfin bref... c'est à tester... mais je peux pas tout de suite (j'essaie déjà avec beaucoup de mal de faire les test de vortex666...
__________________________
Sujet résolu ? Pensez à mettre le tag
Un problème en C# ? Vérifiez celui-ci n'est pas déjà résolu dans la FAQ et que le sujet n'est pas traité parmis les tutoriaux ou les articles avant de poster dans le forum C#.