Il y a des années, j'ai été surpris d'apprendre que Intel vend des compilateurs compatibles Visual Studio. Je l'ai essayé en particulier pour le C / C ++ ainsi que pour les outils de diagnostic fantastiques. Mais le code n’était tout simplement pas aussi intensif en calculs pour remarquer la différence. La seule impression était: Intel a-t-il vraiment fait cela pour moi tout à l'heure, wow, des outils étonnants avec une résolution en nanosecondes, incroyable. Mais le procès s'est terminé et l'équipe n'a jamais sérieusement envisagé un achat.
D'après votre expérience, si le coût de la licence n'a pas d'importance, quel fournisseur est le gagnant?
Ce n’est pas une question large ou vague ni une tentative de déclencher une guerre sainte. Ce type de question concerne deux outils très visibles. Personne n'aime quand les outils ont des mystères ou des surprises. Et les choix entre le meilleur et le meilleur sont toujours la douleur. Je comprends aussi que l'herbe est toujours un argument plus vert . Je veux entendre toutes les histoires "Et si".
Et si Intel l’optimisait juste localement pour l’avancement de la puce du mois et que tous les matériels cibles ne fonctionneraient pas aussi bien que ceux compilés par Microsoft? Et si le matériel AMD était la cible et que tout ralentirait sans raison? Ou, d'autre part, si le matériel d'Intel présente tant d'opportunités insoupçonnées que les auteurs de compilateurs Microsoft sont trop lents à adopter et ne les mettent jamais en œuvre dans le compilateur? Que se passe-t-il si les deux sont exactement identiques, en réalité une seule base de code simplement emballée dans deux boîtes différentes et concédée sous licence aux deux fournisseurs par un magasin tiers?
Etc. Mais quelqu'un connaît certaines réponses.
Réponses:
AVERTISSEMENT: réponse basée sur votre propre expérience - YMMV
Si le code est vraiment coûteux en informatique, oui, certainement . J'ai constaté une amélioration de plus de 20 fois avec l'ancien compilateur Intel C ++ (désormais Intel Studio si je me souviens bien) par rapport au compilateur standard Microsoft Visual C ++. Il est vrai que le code était très loin d’être parfait et que cela a peut-être joué un rôle (c’est pourquoi nous avons pris la peine d’utiliser le compilateur Intel, c’était plus simple que de refactoriser la base de code géante), et le processeur utilisé pour exécuter le code était un processeur Intel Core 2. Quad, le processeur idéal pour une telle chose, mais les résultats ont été choquants. Le compilateur lui-même contient une myriade de façons d'optimiser le code, notamment en ciblant un processeur spécifique en termes de capacités SSE , par exemple. Il fait vraiment
-O2
/-O3
s'enfuir honte. Et c'étaitavant d' utiliser le profileur.Notez cependant que, si vous activez des optimisations très agressives, la compilation prendra un certain temps. Deux heures pour un projet volumineux n'est pas impossible du tout. De plus, avec des niveaux d'optimisation élevés, il y a plus de chance qu'une erreur dans le code se manifeste (ceci peut être observé avec gcc
-O3
également). Pour un projet que vous connaissez bien, cela pourrait être un avantage, car vous trouverez et corrigerez tout bogue éventuel que vous n'auriez pas détecté auparavant, mais lorsque vous compilez un désordre poilu, il vous suffit de vous croiser les doigts et de prier les dieux x86.Quelque chose à propos des performances sur les machines AMD: ce n'est pas aussi bon que les processeurs Intel, mais c'est quand même bien meilleur que le compilateur MS C ++ (encore une fois, d'après mon expérience). La raison en est que vous pouvez également cibler une CPU générique avec le support SSE2 (par exemple). Dans ce cas, les processeurs AMD avec SSE2 ne seront plus très discriminés. Le compilateur Intel sur le processeur Intel vole vraiment la vedette, cependant. Ce ne sont cependant pas tous des arcs-en-ciel doubles et des licornes brillantes. De lourdes accusations ont été portées contre des binaires ne fonctionnant pas du tout sur des processeurs non GenuineIntel et (celui-ci étant admis) induisant artificiellement des performances inférieures sur les processeurs d'autres fournisseurs.. Notez également que ces informations datent d’au moins 3 ans et que leur validité n’est pas connue pour le moment, MAIS les nouvelles descriptions de produits donnent aux cartes binaires une carte blanche pour fonctionner aussi lentement que le souhaite Intel sur des processeurs non-Intel.
Je ne sais pas de quoi il s'agit chez Intel et pourquoi ils font de si bons outils de calcul numérique, mais jetez un œil à cela aussi: http://julialang.org/ . Il y a une comparaison et si vous regardez la dernière ligne, MATLAB brille en battant à la fois le code C et Julia , ce qui me frappe, c'est que les auteurs pensent que la raison en est la bibliothèque Math Kernel d' Intel .
Je réalise que cela ressemble beaucoup à une publicité pour le kit d'outils Intel Compiler, mais d'après mon expérience, cela a vraiment bien fonctionné, et même la simple logique veut que les fabricants de processeurs sachent le mieux le programmer. IMO, le compilateur Intel C ++ compresse chaque gain de performance possible.
la source
Intel Compiler a la réputation de produire du code numérique très efficace:
https://stackoverflow.com/questions/1733627/anyone-here-has-benchmarked-intel-c-compiler-and-gcc
http://www.open-mag.com/754088105111.htm
http://www.freewebs.com/godaves/javabench_revisited/
S'il vous plaît noter que je ne prétends pas que c'est le compilateur le plus rapide là - bas, mais il jouit certainement d' une très bonne réputation pour l' efficacité. Notez que les auteurs des fichiers binaires "officiels" de LAPACK pour Windows utilisent le compilateur Intel Fortran pour les construire: http://icl.cs.utk.edu/lapack-for-windows/ et qu'ils devraient en savoir plus sur l'efficacité.
la source
Intel C ++ présente quelques avantages sur gcc en plus du générateur de code. Ces deux facteurs découlent (en grande partie) du fait qu’il s’appuie sur le serveur EDG . Pour le meilleur ou pour le pire, ces deux éléments s'érodent (lentement), de sorte que les avantages ne sont plus aussi importants qu'ils l'étaient auparavant.
La première est qu’il génère généralement de meilleurs messages d’erreur. Vous voudrez peut-être comparer les messages d'erreur entre Clang et gcc. Intel C ++ (avec la plupart des autres systèmes basés sur le système EDG front-end) publie des diagnostics similaires à ceux de Clang depuis des années.
Deuxièmement, le frontal EDG est à peu près aussi connu pour sa conformité linguistique exceptionnelle que le générateur de code Intel pour sa capacité à produire du code rapide. Selon presque toutes les mesures raisonnables, le serveur EDG offre une meilleure conformité avec C ++ 98, 03 ou (dans les versions actuelles) C ++ 0x que tout autre compilateur disponible.
Comme je l'ai dit, ces deux avantages se sont érodés à des degrés divers au fil du temps. Les versions récentes de gcc ont une conformité linguistique assez décente. Clang génère des messages d'erreur nettement meilleurs et progresse également dans la mise en œuvre de l'ensemble du langage C ++. En définitive, Intel C ++ est toujours meilleur que l’un ou l’autre, et c’est un paquet unique qui fait la plupart des choses bien au lieu de nécessiter un compilateur pour de bons diagnostics et un autre pour une meilleure conformité et génération de code.
la source
Nous avons essayé cela au travail il y a quelque temps. La plupart de notre base de code est en Delphi, mais nous disposons de fonctionnalités très gourmandes en ressources informatiques que quelqu'un aurait pensé être une bonne idée de faire dans une DLL C ++ à l'époque. Et l'un de mes collègues avait entendu parler du compilateur Intel, alors il décida de l'essayer. Nous avons reconstruit la DLL dans le compilateur Intel et effectué des tests de vitesse. Les résultats l'ont tellement surpris qu'il a pensé qu'il devait faire quelque chose de mal.
La DLL doit calculer des problèmes très difficiles avec des composants de combinatoire et de topologie, qui sont techniquement dans la classe de difficulté NP-difficile si nous les faisons "correctement", mais nous utilisons diverses méthodes heuristiques pour éviter les performances de NP. Malgré cela, il y a beaucoup de calculs en cours. Et pour les tests que nous avons effectués, la différence entre le compilateur VS et le compilateur Intel était soit dans epsilon, soit dans le compilateur Intel, elle était sensiblement plus lente, généralement autour de 20%. Et il en est resté ainsi quelles que soient les modifications apportées aux paramètres de compilation pour que le compilateur Intel produise un code plus rapide. Nous avons donc fini par ne pas y basculer.
Ce n’est bien sûr qu’un exemple concret. Votre kilométrage peut varier.
la source
Dans une application embarquée sur laquelle j'ai déjà travaillé, un essai d'un compilateur Intel a montré que cela nous éviterait de faire tourner de nouveaux matériels avec des performances supérieures. Le coût du nouveau matériel était d'environ 10 dollars par unité, les ventes prévues d'un million d'unités, le coût de développement ajouté et les retards du projet. L'option 2 était un profil / micro d'optimiser une base de code déjà raisonnablement bien profilée / optimisée - résultats inconnus, durée inconnue.
Que pensez-vous que le patron a dit quand nous avons demandé des fonds pour acheter le compilateur .......
Cependant, il s’agissait d’un cas très chanceux et plus rare, la sortie de code 10% plus rapide du compilateur Intel nous a poussés à revenir du côté des performances. Si nous étions déjà du bon côté ou si nous avions dépassé 10%, cela n'aurait pas fait de différence. Si nous avions eu les ingénieurs, nous aurions probablement pu optimiser le code et économiser du matériel sans avoir besoin du compilateur Intel, mais le risque était élevé et le compilateur Intel s’est avéré moins coûteux que le temps d’ingénierie.
Dans l’ensemble, je dirais que c’est une forme d’optimisation micro - ne le faites pas avant de savoir que vous en avez besoin, et seulement après que vous ayez établi le profil et trouvé la cause réelle des problèmes. C’est un choix particulièrement judicieux de votre profil qui montre que vous êtes lent "partout" et que vous n’avez pas de goulot de bouteille identifié.
la source
Je n'ai rencontré que trois avantages:
Il prend en charge les fonctionnalités des nouveaux processeurs Intel beaucoup plus tôt que les autres compilateurs.
C'est un excellent compilateur supplémentaire pour émettre des avertissements et résoudre les problèmes qui manquent aux autres compilateurs. GCC attrape certaines choses que ICC ne fait pas, et vice versa. Visual studio attrape certaines choses que ICC ne fait pas, et vice versa.
Il effectue beaucoup mieux le travail de boucles à parallélisation automatique (les distribuant automatiquement sur plusieurs threads) que n’importe quel autre compilateur. Cela n'apporte pas grand-chose au code, mais lorsque vous en avez, le code peut faire une énorme différence.
la source
Nous utilisons le compilateur intel pour chaque projet critique de performances de notre base de code. L'avantage, c'est que l'optimisation du code est vraiment maintenable. Au lieu d’ajouter manuellement des appels __mm partout et de demander au compilateur de pré-télécharger des données, qui seront toutes sous-optimales dans la prochaine version, il vous suffit de réorganiser votre code et d’obtenir une accélération insensée.
Souvent, le code optimisé est plus facile à suivre que l’optimisé à la main, il est plus rapide que l’optimisé à la main, et lorsqu’un nouveau jeu d’instructions est publié, le compilateur utilise ce jeu d’instructions. C'est fantastique.
Il en va de même pour le compilateur arm (arm, et non intel), si vous relâchez arm fait un excellent travail de vectorisation pour vous.
la source
Vérifiez cette page de référence. En bref, Intel gagne.
Mais la marge peut ne pas être aussi grande: si vous compilez en 32 bits et que votre système de construction ne peut pas supporter l'optimisation guidée par profil, le gain est de l'ordre de 10%. Une telle amélioration en vaut-elle la peine et les temps de compilation plus longs?
la source
Il a été dit qu'Intel avait publié le compilateur Intel C ++ v13.0 pour Android, sa première tentative de fournir un compilateur C / C ++ optimisé conçu spécifiquement pour la plate-forme mobile de Google.
Les développeurs peuvent utiliser le compilateur sur des systèmes Linux * pour créer des applications pour périphériques Android basées sur des processeurs Intel, y compris le processeur Intel® Atom ™. Le compilateur Intel est compatible avec GNU C ++ et les outils de développement du kit de développement natif Android (NDK). Vous ne pouvez pas non plus utiliser le compilateur sur n'importe quelle machine de développement. Ni Windows ni OS X n'est pris en charge. les outils sont uniquement certifiés pour une utilisation avec Ubuntu 10.04 ou 11.04
La version actuelle du NDK Android utilise par défaut la version 4.6 de la chaîne d'outils open source Gnu Compiler Collection (GCC). Mais les compilateurs d'Intel incluent de nombreuses optimisations propriétaires pour ses propres puces et peuvent souvent produire un code exécutable plus performant que celui produit par des compilateurs tiers tels que GCC.
la source