PHP vs. C

ViPHP
ViPHP | 4039 Messages

26 oct. 2011, 16:06

Hop, un petit compte rendu suite à une expérience (tout à fait non scientifique) que j'ai eu l'occasion de faire, c-à-d porter une fonction PHP vers un module C.

On se dit: ouatcha, ça va dépoter grave !! Alors tout de suite la conclusion: Un peu ouais, mais pas tellement que ça.

Tout d'abord, la fonction concernée: elle extrait les mots d'un texte, en compte les occurrences, et les compare à un autre texte (les "mots vides", ou stopwords, ç-à-d des mots trop communs pour avoir une réelle signification).

Voici les résultats avec une fonction entièrement en Php (il s'agit a chaque fois des mêmes données de départ):

Code : Tout sélectionner

Took 0.013445138931274, found 568 unique words.
Avant de le transférer vers une extension Php, j'ai testé le code à travers un exécutable externe (donc en C compilé), appelé via exec():

Code : Tout sélectionner

Took 0.018234014511108, found 568 unique words.
Ensuite, la même chose sous forme d'une extension Php:

Code : Tout sélectionner

Took 0.0087411403656006, found 568 unique words.
Voilà pour ce qui est d'un gain de performance exceptionnel.. :mrgreen:


Ce qu'il faut savoir: le code C n'est pas optimal, il y a encore certaines lourdeurs, mais d'un autre côté, en Php aussi. Et chaque option arrive exactement au même résultat (ce qui implique pas mal de post-traitement dans le deuxième cas).

Et le texte était encore assez réduit, je devrais réessayer avec un texte plus vaste, pour pousser un peu les limites du système.
Mais qu'importe. (je suis ici - dernier petit projet)
Berze going social.

ViPHP
ViPHP | 4039 Messages

26 oct. 2011, 16:07

A noter aussi qu'il ma fallu une bonne journée pour réaliser la partie C, alors que le code PHP n'a pris que 5 minutes :twisted:
Mais qu'importe. (je suis ici - dernier petit projet)
Berze going social.

ViPHP
ViPHP | 3300 Messages

26 oct. 2011, 16:33

En C beaucoup plus qu'en php la qualité du codeur compte, php étant fait en C ce n'est que logique d'attendre un résultat meilleur en C (parce que pas de bytecode pas de lancement de vm et un accès privilégié à la mémoire qui permet de limiter les allocations et donc d'augmenter les performances.
Fait du php depuis que ca existe ou presque :)

ViPHP
ViPHP | 4039 Messages

26 oct. 2011, 17:17

En C beaucoup plus qu'en php la qualité du codeur compte, php étant fait en C ce n'est que logique d'attendre un résultat meilleur en C (parce que pas de bytecode pas de lancement de vm et un accès privilégié à la mémoire qui permet de limiter les allocations et donc d'augmenter les performances.
En d'autres termes: en C le dégré d'optimisation du code compte bien plus qu'en PHP. :twisted:

Certes. A noter encore qu'il s'agit ici d'un module externe, la manière la plus lente. Il pourrait être intégré à Php, voir même compilé directement dans le moteur Zend lui-même (la solution la plus efficace, mais la plus contraignante).

Les fonctions utilisés dans la fonction PHP de l'expérience ci-dessus proviennent quasi toutes du moteur Zend, et sont donc très rapides. Je crois me souvenir d'avoir lu que lors du portage de la fonction strlen() vers le moteur zend, ce dernier en est devenu 25% plus rapide.
Mais qu'importe. (je suis ici - dernier petit projet)
Berze going social.

ViPHP
ViPHP | 5462 Messages

26 oct. 2011, 17:45

tu peux monter les codes :?:

Administrateur PHPfrance
Administrateur PHPfrance | 11457 Messages

26 oct. 2011, 20:18

Le C, c'est le langage le plus facile à apprendre.
Il n'y a qu'une seule instruction : malloc() :langue:

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

26 oct. 2011, 20:24

Et qu'un seul message d'erreur : "Segmentation Fault" ;)
Quand tout le reste a échoué, lisez le mode d'emploi...

Eléphant du PHP | 314 Messages

27 oct. 2011, 09:56

Et qu'un seul message d'erreur : "Segmentation Fault" ;)
Merci d'être passé, ta remarque va me faire la journée XD j'adore :)
Cordialement,
Julien - http://laravel.fr/

ViPHP
ViPHP | 3300 Messages

27 oct. 2011, 14:31

compilez en montant les options de debug (-Wall) vous verrez si y'a que segfault comme message d'erreur :)
Fait du php depuis que ca existe ou presque :)