2012-05-27 3 views

Répondre

10

Non, il n'y a pas de scénario dans .NET où vous pouvez écrire vous-même le code de la machine. La génération de code dépend entièrement du compilateur juste-à-temps. Il est certainement capable de personnaliser sa génération de code en fonction des capacités du processeur de la machine. Une des principales raisons pour lesquelles ngen.exe doit toujours être exécuté sur la machine cible. Si les frissonnements dans .NET 4.5 ont été modifiés pour profiter de sse4 ou avx est une question ouverte, je n'ai rien entendu à ce sujet. J'en doute un peu, Microsoft ne bricole pas beaucoup avec les perturbations, sauf pour corriger les bugs. Très déstabilisant et 4.5 n'est pas une version côte à côte.

VS-11 dispose cependant d'un générateur de code mis à jour pour C++. Il est capable de vectoriser automatiquement les boucles et utilise les instructions SIMD/AVX pour ce faire. Ce blog post le mentionne, une brève vidéo est available here.


Mise à jour: le new x64 jitter, actuellement en CTP et le nom de code RyuJIT, comprend un certain soutien rudimentaire pour les instructions SIMD. Le type SSE2, fournissant une auto-vectorisation. Il est cependant verrouillé assez étroitement dans le package Microsoft.Bcl.Simd et les classes Vector <>, il n'y a pas de solution universelle pour l'exigence d'alignement de mémoire de 16 octets que SIMD doit exécuter rapidement.

Le plus susceptible d'être fructueux est .NET Native, annoncé lors de la dernière conférence Build. Il utilise le back-end du compilateur C++ pour générer du code à l'avance, bénéficiant automatiquement de sa prise en charge intégrée de la vectorisation automatique et de l'auto-parallélisation. Sinon, sans une explication claire encore comment le problème d'alignement de la mémoire a été résolu. Il a ses propres problèmes, Reflection est difficile et n'est actuellement pris en charge que pour les applications packagées, dont les dépendances d'exécution peuvent être déterminées à l'avance. Windows Store et les applications du téléphone.


Mise à jour: cette expédition en 4.6 .NET, l'assemblage System.Numerics.Vectors.dll. Méfiez-vous que celui inclus avec le framework est le "sûr" et ne correspond pas à la documentation MSDN, Vector<T> est manquant. Le paquet Nuget (version 4.1.0) correspond.

+0

Merci pour la réponse –

+2

Vous pouvez certainement écrire le code machine vous-même; écrivez des octets en mémoire, puis appelez 'Marshal.GetDelegateForFunctionPointer' pour obtenir un délégué que vous pouvez appeler. Le coût de l'appel signifie qu'il ne sera probablement pas comparable avec Mono.Simd, mais c'est certainement possible. –

+0

https://en.wikipedia.org/wiki/NX_bit –

Questions connexes