Vérification de CPU Popcount à partir de C #

Est-ce que quelqu’un sait comment vérifier le cpu en C # s’il prend en charge popcount (nombre d’habitants)? C ++ est facile mais essayez de convertir C ++ en C # avec du code d’échecs.

Merci beaucoup.

Je n’ai pas encore trouvé de moyen simple de détecter et d’utiliser des instructions spéciales du processeur en C #. Il y a plusieurs options, aucune n’est agréable;

  • asmjit une fonction qui fait popcount
  • CPUID x86 / x64 en C #
  • mono a une bibliothèque simd avec support de type de données (pas popcount je suppose)
  • Utilisez une DLL C ++ (probablement beaucoup plus lente en raison de la surcharge)
  • ..

Je ne suis jamais allé de cette façon et j’ai implémenté un compte pop #

  ///  /// Count the number of bits set to 1 in a ulong ///  public static byte BitCount(this ulong value) { ulong result = value - ((value >> 1) & 0x5555555555555555UL); result = (result & 0x3333333333333333UL) + ((result >> 2) & 0x3333333333333333UL); return (byte)(unchecked(((result + (result >> 4)) & 0xF0F0F0F0F0F0F0FUL) * 0x101010101010101UL) >> 56); } 

Bienvenue dans Stackoverflow 🙂 J’ai trouvé cette question qui semble être semblable à celle-ci. Peut-être la trouverez-vous utile également.

Déterminer avec élégance si plus d’un booléen est “vrai”

Vous pouvez également consulter les opérateurs de bits en c # ainsi que cet article.

-modifier-

Aussi, pour répondre plus directement à votre question, puisque c # est compilé en IL et non en code machine, vous ne pouvez pas vraiment faire d’optimisations au niveau du processeur. Le compilateur JIT du Common Language Runtime peut effectuer certaines optimisations lorsque le code est réellement exécuté, mais il n’ya pas d’access direct à ce processus à partir du langage lui-même.

Vous pouvez cependant mélanger c ++ et le code managé et y faire des optimisations de bas niveau, mais cela va à l’encontre du but de passer à c #.