Bonjour,
ben tout est dans le titre.
Même si je n'y crois pas trop, je me demandais s'il y avait un moyen d'utiliser les commandes SSE 2 ou 3 (mieux) en java ?
Merci par avance.
Bonjour,
ben tout est dans le titre.
Même si je n'y crois pas trop, je me demandais s'il y avait un moyen d'utiliser les commandes SSE 2 ou 3 (mieux) en java ?
Merci par avance.
Consignes aux jeunes padawans : une image vaut 1000 mots !
- Dans ton message respecter tu dois : les règles de rédaction et du forum, prévisualiser, relire et corriger TOUTES les FAUTES (frappes, sms, d'aurteaugrafe, mettre les ACCENTS et les BALISES) => ECRIRE clairement et en Français tu DOIS.
- Le côté obscur je sens dans le MP => Tous tes MPs je détruirai et la réponse tu n'auras si en privé tu veux que je t'enseigne.(Lis donc ceci)
-ton poste tu dois marquer quand la bonne réponse tu as obtenu.
java tourne sur une machne virtuelle avec son propre jeu d'instruction. C'est le role de l'implémentation de la machine virtuelle en question d'utiliser à bon essicent ce que le CPU hôte founis comme possibilités.
Mmm... ok, c'est logique.
Mais est ce que l'on ne peut pas forcer certaines accélérations/fonctions.
Nous faisons actuellement certains tests C++ vs Java pour différents algorithmes de traitement d'images.
Les performances indiquent clairement que la JVM je passe absolument pas par ces instructions, sauf si l'écart de performance avec C++ est désormais un coefficient fois 4 ou plus.
Consignes aux jeunes padawans : une image vaut 1000 mots !
- Dans ton message respecter tu dois : les règles de rédaction et du forum, prévisualiser, relire et corriger TOUTES les FAUTES (frappes, sms, d'aurteaugrafe, mettre les ACCENTS et les BALISES) => ECRIRE clairement et en Français tu DOIS.
- Le côté obscur je sens dans le MP => Tous tes MPs je détruirai et la réponse tu n'auras si en privé tu veux que je t'enseigne.(Lis donc ceci)
-ton poste tu dois marquer quand la bonne réponse tu as obtenu.
tu ne peux pas. Même si tu faisait un code optimisé en java pur pour du SSE, quelles seraient les performances de ton algorithme une fois qu'il sera lancé sur un ARM, ou une machine AMD64?
La première chose à faire estde vous assurer que vous n'êtes plus en interprété pour faire vos mesures. Pour ça, il existe (je les retrouve plus) des paramètres à filer à la JMV pour qu'elle affiche dans la console les méthode qu'elle compile à la volée en code natif. On peux avoir de très grosse différence de perf entre une code java interprété et un code java natif.
Seulement, le JIT il compile pas tout en natifs, c'est pour ça qu'on doit en général faire une procédure où le calcul est fait un certain nombre de fois jusque stabilisation du temps mesuré.
ok, pour voir ce qui est compilé nativement, rajouter ce paramètre à l'exécution
exemple
Code : Sélectionner tout - Visualiser dans une fenêtre à part -XX:+PrintCompilation
Code : Sélectionner tout - Visualiser dans une fenêtre à part java -XX:+PrintCompilation -jar mon.jar
Voilà ce que j'obtiens, mais j'avoue ne pas savoir l'interpréter :-(
1 java.lang.String::hashCode (64 bytes)
2 java.lang.String::charAt (33 bytes)
3 sun.nio.cs.UTF_8$Decoder::decodeArrayLoop (553 bytes)
4 java.math.BigInteger::mulAdd (81 bytes)
5 java.math.BigInteger::multiplyToLen (219 bytes)
6 java.math.BigInteger::addOne (77 bytes)
7 java.math.BigInteger::squareToLen (172 bytes)
8 java.math.BigInteger::primitiveLeftShift (79 bytes)
9 java.math.BigInteger::montReduce (99 bytes)
10 sun.security.provider.SHA::implCompress (491 bytes)
11 sun.nio.cs.UTF_8$Encoder::encodeArrayLoop (490 bytes)
12 java.lang.String::indexOf (151 bytes)
Reading image 'ImagesNdg/Einstein.pgm' 13 java.lang.String::indexOf (166 bytes)
(256x256 <=> 65536 pixels, 8 bits BYTE_GRAY)... 14 java.util.Properties$LineReader::readLine (452 bytes)
15 java.awt.image.BufferedImage::getWidth (8 bytes)
17 sun.awt.image.SunWritableRaster::notifyWrite (17 bytes)
16 sun.awt.image.ByteInterleavedRaster::setSample (163 bytes)
1% imageTiTi.PgmTools::Read @ 163 (224 bytes)
successfully.
18 java.lang.Object::<init> (1 bytes)
19 java.io.UnixFileSystem::normalize (75 bytes)
20 java.lang.String::equals (88 bytes)
21 java.lang.String::lastIndexOf (156 bytes)
22 java.lang.CharacterDataLatin1::getProperties (11 bytes)
23 java.lang.String::lastIndexOf (151 bytes)
24 java.util.Properties::loadConvert (505 bytes)
25 java.lang.String::startsWith (78 bytes)
3 made not entrant sun.nio.cs.UTF_8$Decoder::decodeArrayLoop (553 bytes)
11 made not entrant sun.nio.cs.UTF_8$Encoder::encodeArrayLoop (490 bytes)
--- n java.lang.System::arraycopy (static)
26 java.lang.Character::toLowerCase (162 bytes)
27 java.lang.CharacterDataLatin1::toLowerCase (36 bytes)
28 java.lang.String::toLowerCase (436 bytes)
29 ij.macro.Program::lookupWord (57 bytes)
2% sun.nio.cs.UTF_8$Encoder::encodeArrayLoop @ 73 (490 bytes)
30 sun.nio.cs.UTF_8$Encoder::encodeArrayLoop (490 bytes)
31 java.util.Arrays::binarySearch0 (95 bytes)
32 sun.net.www.ParseUtil::encodePath (336 bytes)
33 java.lang.Math::max (11 bytes)
3% ! morphee.fastMorpheeNew.DilateSegmentHorizontalFM$DilateSegmentHorizontal2Thread::run @ 796 (2425 bytes)
34 utils.arrays.ArraysOperations::SetConstant (19 bytes)
4% ! morphee.fastMorpheeNew.DilateSegmentHorizontalHisto$DilateSegmentHorizontalHistoThread::run @ 628 (2062 bytes)
5% ! morphee.fastMorpheeNew.DilateSegmentHorizontalHisto$DilateSegmentHorizontalHistoThread::run @ 712 (2062 bytes)
time 1 = 1.164
time 2 = 1.399
35 sun.awt.image.ByteInterleavedRaster::getSample (133 bytes)
36 sun.awt.image.SunWritableRaster::notifyRead (17 bytes)
6% imageTiTi.ImageTools::areEqual @ 133 (202 bytes)
Consignes aux jeunes padawans : une image vaut 1000 mots !
- Dans ton message respecter tu dois : les règles de rédaction et du forum, prévisualiser, relire et corriger TOUTES les FAUTES (frappes, sms, d'aurteaugrafe, mettre les ACCENTS et les BALISES) => ECRIRE clairement et en Français tu DOIS.
- Le côté obscur je sens dans le MP => Tous tes MPs je détruirai et la réponse tu n'auras si en privé tu veux que je t'enseigne.(Lis donc ceci)
-ton poste tu dois marquer quand la bonne réponse tu as obtenu.
Toutes les lignes précédées d'un chiffre sont des méthode compilées nativement. Les méthodes avec un % indiquent le tau d'utilisation de ces méthode. C'est là dessus que le JIT détermine les classes qu'il compile.
Mouai... on dirait donc qu'il n'y a pas grand chose à faire pour moi :-(
Consignes aux jeunes padawans : une image vaut 1000 mots !
- Dans ton message respecter tu dois : les règles de rédaction et du forum, prévisualiser, relire et corriger TOUTES les FAUTES (frappes, sms, d'aurteaugrafe, mettre les ACCENTS et les BALISES) => ECRIRE clairement et en Français tu DOIS.
- Le côté obscur je sens dans le MP => Tous tes MPs je détruirai et la réponse tu n'auras si en privé tu veux que je t'enseigne.(Lis donc ceci)
-ton poste tu dois marquer quand la bonne réponse tu as obtenu.
comme toujours en java, lancer un profiler, déterminer les points chauds pour les améliorer.
En parlant de profiler, quels sont ceux performants en Java ?
Est ce qu'il y en a qui peuvent être directement dans Eclipse ?
Consignes aux jeunes padawans : une image vaut 1000 mots !
- Dans ton message respecter tu dois : les règles de rédaction et du forum, prévisualiser, relire et corriger TOUTES les FAUTES (frappes, sms, d'aurteaugrafe, mettre les ACCENTS et les BALISES) => ECRIRE clairement et en Français tu DOIS.
- Le côté obscur je sens dans le MP => Tous tes MPs je détruirai et la réponse tu n'auras si en privé tu veux que je t'enseigne.(Lis donc ceci)
-ton poste tu dois marquer quand la bonne réponse tu as obtenu.
il y a des profiler intégrés à eclipse et netbeans (me souviens plus de leur nom), c'est suffisant pour déterminer les points chauds de votre programme.
Partager