Dates pour PHP 7 !

...bon ok en alpha1

a marqué ce sujet comme résolu.

Je souhaite juste revenir sur le JIT ; en fait, phpng a été conçu certes pour améliorer les perfs, mais surtout rendre plus facile l'intégration d'un compilo JIT justement (source : https://wiki.php.net/rfc/phpng#impact_on_a_future_jit_implementation)

Oh et BTW, Nikita Popov (Nikic, le type qui proposé et fait l'AST) est un allemand, pas un français.

+0 -0

Oh et BTW, Nikita Popov (Nikic, le type qui proposé et fait l'AST) est un allemand, pas un français.

il a fait la RFC. Mais il n'a pas lancé l'idée. Bon après rédiger une RFC c'est un sacré boulot vu le conservatisme de la communauté PHP donc on va dire que c'est lui.

Au fait, est-ce qu'il y a une liste quelque part, des fonctions obsolètes qui vont disparaître de php 7 ?

QuentinC

Tiens.

__forever

Ça m'a pas l'air complet à 100%, puisqu'il manque le retrait des constructeurs PHP4, qui étaient dépréciés depuis quelque temps.

Edit : mea culpa, fait ils deviennent juste dépréciés, pas supprimés… Ils n'étaient pas encore dépréciés.

+0 -0

WampServer 3 (actuellement disponible uniquement sur Sourceforge, le site officiel propose toujours la version 2.5) propose la version x64 directement embarquée, pour x86, il y a un add-on.

Si vous voulez faire fonctionner avec WampServer 2.5 (en attendant la mise à jour du tutoriel), il faut installer les modifications des fichiers de Wamp (il y a une archive vers la fin du premier message), puis suivre le tutoriel pour WampServer 2.5 expliquant comment installer de nouvelles versions de PHP, tout en modifiant un peu le fichier wampserver.conf repris depuis PHP 5 :

1
2
3
<?php
$phpConf['apache']['2.4']['LoadModuleName'] = 'php7_module'; // au lieu de php5_module
$phpConf['apache']['2.4']['LoadModuleFile'] = 'php7apache2_4.dll'; // au lieu de php5apache2_4.dll
+0 -0

Pour calmer les trolls pythonistes à deux balles.

Nek

  1. Quel est le rapport entre PHP7, Python et les -1 que prennent les messages depuis le déterrage de ce sujet ?

  2. L'usage de ce style de benchmarks est en lui-même un troll. Le jour où PHP supportera naturellement le multithreading, l'asynchrone, le calcul scientifique et la programmation système, il y aura matière à comparaison. Par contre se servir de la performance de l'opérateur + sur des entiers pour se comparer la zigounette ne donne aucune information sérieuse, ni fiable, ni même exploitable.

  3. J'étais très calme jusqu'à tomber sur cette remarque à la fois idiote, gratuite et inutilement clivante. Maintenant je suis légèrement irrité.

+5 -0

Donc moi je suis un troll mais pas toi. Pitié arrête. T'es en train de faire "quel langage à la plus grosse" quand je ne fais que corriger un fact. Le web pullule de fausses informations et tel quel on aurait pu croire que l'ami Dryusdan disait n'importe quoi.

Nek

Où me vois-tu troller ?

+2 -0

Heu… nek c'est toi qui troll la en nous sortant un benchmark dont on ne sait rien, qui n'est pas honnête et parlant de Python alors que ça parlait de PHP jusque là.

Pourquoi tu as répondu a un -1 dont on ne sait rien avec un benchmark sur Python ?

De plus pour moi ce n'est pas un fact : sur mobile on peut pas voir les codes Python utilisés. Je n'ai aucun moyen de savoir ce qui a été utilisé pour se comparer à PHP.

C'est toi qui joue à qui a la plus grosse en attaquant Python alors que personne n'en parlais depuis que ce sujet est réapparu

+2 -0

Le web pullule de fausses informations et tel quel on aurait pu croire que l'ami Dryusdan disait n'importe quoi.

Nek

Sauf qu'il s'agit ici d'un benchmark de mon propre site sur php 5.6 et php 7 sous OVH, le seul truc que je n'ai pas précisé c'est le cache, mais dans tout les cas je gagne presque 0,1952s, mais c'est un test et à prendre avec des pincettes comme tout info sur le lolternet, je vois pas pourquoi on me balance sur le tapis la :/

Surtout que personne n'a dit que tu disais n'importe quoi, ni n'a dit quoi que ce soit sur ton bench. On pourrait te reprocher que tu donne un chiffre sans la comparaison avec la version d'avant mais je ne crois pas que quelqu'un a dit quelque chose sur ton message.

Nek a vu que tu avais un -1, et il en a déduit (tout seul) :

  1. que les gens croyait que tu disais n'importe quoi
  2. que c'était forcément l'oeuvre de "trolls pythonistes à deux balles"

Donc pour rétablir ton honneur de cet affront d'avoir eu un -1 non justifié il a balancé un Benchmark douteux entre PHP7 et Python3.


Pour en finir sur ce HS, perso même si je préfère Python j'ai jamais douté que PHP7 pouvait avoir de très bonne perfs. Tant mieux pour les dev PHP mais ça changera pas ma vie. De toute façon PHP et Python ont des scopes d'utilisation largement différent. Choisir un langage c'est bien plus compliqué que de se fier à des benchmark douteux. Car le bench fournit est de mauvais fois. Rien que sur le premier exemple on compare un calcul de norme spectral. Déjà je doute que beaucoup de gens font ça en PHP dans la vrai vie mais coté Python je peux vous assurer que n'importe quel dev utilisera numpy/scipy pour calculer ça.


edit:

Pour prouver que le bench n'était pas honnête, j'ai tenté d'amélioré légèrement le script Python proposé. Je n'ai pas changé la logique du programme, j'ai gardé exactement le même découpage de fonction. J'ai simplement :

  • Tout passé à numpy plutot que d'utiliser des tableaux python
  • Changé les deux fonctions part_A_times_u et part_At_times_u pour qu'elles utilisent numpy
  • Modifié le script principal pour l'utiliser aussi (et faire les conversions)

Il est important de noter que en voulant ne pas toucher à la logique du programme (et le découpage en fonction) je fais actuellement des allocations inutiles (entre autre les arange), des conversion aussi assez inutile (je suis pas sûrs que ça vaille le coup de distribuer ça sur des coeurs) et qu'il reste un paquet de boucle inutile (il est probable que les fonctions eval_A_times_u et eval_At_times_u pourraient être vectorisé facilement).

Voici le code avec les lignes modifié mise en évidence, la version original peut être trouvé ici:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
from multiprocessing import Pool
from math            import sqrt
import numpy as np
from sys             import argv

def eval_A (i, j):
    return 1.0 / ((i + j) * (i + j + 1) / 2 + i + 1)

def eval_A_times_u (u):
    args = ((i,u) for i in range(len(u)))
    return pool.map(part_A_times_u, args)

def eval_At_times_u (u):
    args = ((i,u) for i in range(len(u)))
    return pool.map(part_At_times_u, args)

def eval_AtA_times_u (u):
    return eval_At_times_u (eval_A_times_u (u))

def part_A_times_u(xxx_todo_changeme):
    (i,u) = xxx_todo_changeme
    return np.sum(eval_A (i, np.arange(u.size))*u)

def part_At_times_u(xxx_todo_changeme1):
    (i,u) = xxx_todo_changeme1
    return np.sum(eval_A (eval_A (js, i), i)*u)
    

def main():
    n = int(argv[1])
    u = np.ones((n,))

    for dummy in range (10):
        v = np.array(eval_AtA_times_u (u))
        u = np.array(eval_AtA_times_u (v))
    
    vBv = np.sum(u*v)
    vv = np.sum(v**2)

    print("%0.9f" % (sqrt(vBv/vv)))

if __name__ == '__main__':
    pool = Pool(processes=4)
    main()
    

En lançant ce programme avec le même paramètre que indiqué (n=5550) je passe de :

1
2
3
real  5m19.446s
user  20m37.528s
sys   0m0.216s

à

1
2
3
real  0m9.864s
user  0m36.912s
sys   0m0.064s

Je vais donc a peut prêt 32.4 ((5*60+19.446)/9.864) fois plus vite. Vu le temps pris sur la machine du bench, mon code sur sa machine prendrait environ 7.7 sec (250.2/32.38503649635037) et donc on explose les 44 sec de PHP 7.

Est ce normal ? Oui ! PHP est fait pour faire du web, Python est plus généraliste et un de ces avantages est qu'il dispose d'un gros ecosystème en particulier dans le calcul scientifique. Ce n'est pas pour rien que les scientifiques se mettent a Python et non PHP. Tout dev Python sérieux aurait utilisé numpy pour ça même si il n'est pas dans la lib standard tellement il est commun. Cela ne veux pas dire que PHP7 est lent, simplement que Python avec numpy est plus rapide pour ça quand on fait les choses bien…

+3 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte