Nano Hash - криптовалюты, майнинг, программирование

Проверка Popcount ЦП с C #

Кто-нибудь знает, как проверить ЦП на С #, если он поддерживает popcount (подсчет населения)? C ++ - это просто, но я пытаюсь преобразовать C ++ в C # с помощью шахматного кода.

Большое спасибо.

23.05.2011

  • Вам нужно узнать использование ЦП в определенный момент времени? 23.05.2011
  • В C ++ для этого требуется встроенный компилятор для конкретной реализации, например __builtin_popcount (для gcc). 23.05.2011

Ответы:


1

Мне еще предстоит найти простой способ обнаружения и использования специальных инструкций процессора в C #. Есть несколько вариантов, ни один из них приятный;

  • asmjit функция, которая делает popcount
  • CPUID x86 / x64 в C #
  • mono имеет библиотеку simd с поддержкой типов данных (не popcount, я думаю)
  • Используйте C ++ DLL (возможно, медленнее из-за накладных расходов)
  • ..

Я никогда не пошел по этому пути и реализовал C # popcount;

    /// <summary>
    /// Count the number of bits set to 1 in a ulong
    /// </summary>
    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);
    }
17.07.2012


3

Добро пожаловать в Stackoverflow :) Я нашел этот вопрос, который кажется похожим на этот, возможно, вы также найдете его полезным.

Элегантно определять, истинно ли более одного логического значения

Вы также можете ознакомиться с битовыми операторами, которые находятся в C #, а также в этом статья

-редактировать-

Также ответьте на ваш вопрос более прямо, поскольку С # скомпилирован в IL, а не в машинный код, вы действительно не можете оптимизировать уровень процессора. Компилятор JIT в среде CLR может выполнять некоторую оптимизацию, когда код действительно выполняется, но нет прямого доступа к этому процессу из самого языка.

Однако вы можете смешивать C ++ и управляемый код и выполнять там свои низкоуровневые оптимизации, но это как бы побеждает цель перехода на C #.

23.05.2011
  • Большое спасибо за информацию. Я проверю это. 23.05.2011
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..