Je suis curieux de savoir comment F# performance se compare aux performances de C++?
Varie énormément en fonction de l'application. Si vous faites une vaste utilisation des complexes de structures de données dans un programme multi-threadé, puis F# est susceptible d'être une grande victoire. Si la plupart de votre temps est consacré au serrés numérique des boucles de la mutation des tableaux puis C++ peut être 2-3 fois plus rapide.
Étude de cas: Ray-traceur Mon test ici utilise une arborescence hiérarchique, l'abattage et numérique rayon de la sphère d'intersection de code pour générer une image de sortie. Cette référence est vieux de plusieurs années et le code C++ a été améliorée et des dizaines de fois au fil des ans et il est lu par des centaines de milliers de personnes. Don Syme chez Microsoft a réussi à écrire un F# de mise en œuvre qui est légèrement plus rapide que le plus rapide en C++ code lors de la compilation avec MSVC et parallélisée en utilisant OpenMP.
J'ai lu que le F# est censé être plus évolutif et plus performant, mais comment est ce monde réel, de performance se compare à C++?
Le développement de code est beaucoup plus facile et plus rapide avec F# qu'en C++, et cela s'applique à l'optimisation ainsi que la maintenance. Par conséquent, lorsque vous démarrez l'optimisation d'un programme de la même quantité d'effort permet d'obtenir beaucoup plus de gains de performances si vous utilisez F# au lieu de C++. Cependant, F# est un langage de niveau plus élevé et, par conséquent, des lieux un plafond moins élevé sur les performances. Donc, si vous avez le temps infini pour passer l'optimisation de vous devrait, en théorie, toujours être en mesure de produire plus vite, le code en C++.
C'est exactement le même avantage que le C++ n'a plus de Fortran et Fortran avait plus de main-écrit en assembleur, bien sûr.
Étude de cas: décomposition QR C'est une de base de la méthode numérique de l'algèbre linéaire fourni par les bibliothèques comme LAPACK. La référence LAPACK mise en œuvre est de 2077 lignes de Fortran. J'ai écrit un F# mise en œuvre en vertu de 80 lignes de code qui permet d'atteindre le même niveau de performance. Mais l'implémentation de référence n'est pas rapide: vendeur à l'écoute des implémentations comme Intel Math Kernel Library (MKL) sont souvent 10x plus rapide. Remarquablement, j'ai réussi à optimiser mon code F# bien au-delà de la performance de l'Intel de mise en œuvre en cours d'exécution sur Intel, tout en gardant mon code sous 150 lignes de code et entièrement générique (il peut traiter de simple et double précision, et complexe, et même symbolique matrices!): pour le grand mince matrices mon code F# est jusqu'à 3 fois plus rapide que le processeur Intel MKL.
Notez que la morale de cette étude de cas n'est pas que vous devriez vous attendre de votre F# pour être plus rapide que le vendeur à l'écoute des bibliothèques, mais, plutôt, que même les experts comme Intel va manquer productif de haut niveau optimisations si ils n'utilisent que le faible niveau de langues. Je soupçonne d'Intel optimisation numérique experts ne sont pas d'exploiter le parallélisme entièrement parce que leurs outils, il est extrêmement lourd alors que F# en fait sans effort.
Comment bien se faire à virgule flottante?
La Performance est similaire à la norme ANSI C, mais certaines fonctionnalités (par exemple, les modes d'arrondi) n'est pas disponible .NET.
Elle permet de vecteur instructions
Pas de.
la gentillesse est-elle vers l'optimisation des compilateurs?
Cette question n'a pas de sens: F# est un propriétaire .NET de langue de Microsoft avec un simple compilateur.
Quelle est l'ampleur de la mémoire pied d'impression a-t-elle?
Une application vide utilise 1.3 Mo ici.
Elle permet un contrôle plus fin sur la mémoire de la localité?
Mieux que la plupart de la mémoire-safe langues, mais pas aussi bon que C. Par exemple, vous pouvez unbox structures de données arbitraires dans F# en les représentant comme des "structures".
a-t-elle la capacité pour les processeurs à mémoire distribuée, par exemple Cray?
Dépend de ce que tu veux dire par "capacité". Si vous pouvez l'exécuter .NET sur Cray vous pouvez vous servir de la transmission de message en F# (tout comme le prochain de la langue), mais F# est destiné principalement pour les ordinateurs de bureau multicœur machines x86.
de quoi dispose-t-il qui peuvent être d'intérêt pour les sciences informatiques, où de fortes certain nombre de traitement est impliqué?
La mémoire de la sécurité signifie que vous n'obtenez pas de segmentation des défauts et des violations d'accès. Le soutien pour le parallélisme .NET 4 est bon. La possibilité d'exécuter du code à la volée via le F# session interactive dans Visual Studio 2010 est extrêmement utile pour les techniques interactives de l'informatique.
Y sont réels calcul scientifique implémentations qui l'utilisent?
Nos produits commerciaux pour le calcul scientifique en F#, qui ont déjà plusieurs centaines d'utilisateurs.
Cependant, votre ligne de remise en question indique que vous pensez de calcul scientifique à haute performance de calcul (par exemple, Cray) et non interactifs techniques de l'informatique (par exemple, MATLAB, Mathematica). F# est prévu pour le second.