Кто-нибудь знает, как проверить ЦП на С #, если он поддерживает popcount (подсчет населения)? C ++ - это просто, но я пытаюсь преобразовать C ++ в C # с помощью шахматного кода.
Большое спасибо.
Кто-нибудь знает, как проверить ЦП на С #, если он поддерживает popcount (подсчет населения)? C ++ - это просто, но я пытаюсь преобразовать C ++ в C # с помощью шахматного кода.
Большое спасибо.
__builtin_popcount
(для gcc). 23.05.2011 Мне еще предстоит найти простой способ обнаружения и использования специальных инструкций процессора в C #. Есть несколько вариантов, ни один из них приятный;
Я никогда не пошел по этому пути и реализовал 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);
}
Начиная с .NET Core 3.0, вы можете использовать Popcnt.IsSupported
, чтобы проверить наличие поддержки основного оборудования.
Или, если вам просто нужен результат, используйте BitOperations.PopCount
< / а>. Методы в классе BitOperations
«используют встроенные аппаратные средства, если они доступны на базовой платформе; в противном случае они используют оптимизированные программные резервные варианты».
Добро пожаловать в Stackoverflow :) Я нашел этот вопрос, который кажется похожим на этот, возможно, вы также найдете его полезным.
Элегантно определять, истинно ли более одного логического значения
Вы также можете ознакомиться с битовыми операторами, которые находятся в C #, а также в этом статья
-редактировать-
Также ответьте на ваш вопрос более прямо, поскольку С # скомпилирован в IL, а не в машинный код, вы действительно не можете оптимизировать уровень процессора. Компилятор JIT в среде CLR может выполнять некоторую оптимизацию, когда код действительно выполняется, но нет прямого доступа к этому процессу из самого языка.
Однако вы можете смешивать C ++ и управляемый код и выполнять там свои низкоуровневые оптимизации, но это как бы побеждает цель перехода на C #.