Spec-Zone.ru › D

core.cpuid

Определяет характеристики процессора хоста, предоставляя информацию о размерах кэша и подсказках по оптимизации ассемблерного кода. Этот модуль предназначен в первую очередь для программистов, использующих ассемблерный язык.

Ссылки
Некоторые из этих данных были чрезвычайно трудно найти. Некоторые из документов ниже были найдены только в кэшированных версиях, хранящихся поисковыми системами! Этот код опирается на информацию, найденную в:
  • "Справочник разработчика программного обеспечения для архитектур Intel(R) 64 и IA-32, том 2A: Справочник по набору команд, A-M" (2007).
  • "Спецификация AMD CPUID", Advanced Micro Devices, Rev 2.28 (2008).
  • "Применимое к процессорам AMD до процессоров AMD Family 0Fh. Приложение к процессорам AMD Processor Recognition", Advanced Micro Devices, Rev 3.13 (2005).
  • "Книга данных процессоров AMD Geode(TM) GX", Advanced Micro Devices, Publication ID 31505E, (2005).
  • "Оптимизация кода процессора AMD K6", Advanced Micro Devices, Rev D (2000).
  • "Прикладная заметка 106: Настройка программного обеспечения для семейства 6x86", Cyrix Corporation, Rev 1.5 (1998)
  • http://www.datasheetcatalog.org/datasheet/nationalsemiconductor/GX1.pdf
  • "Серия процессоров Geode(TM) GX1 Low Power Integrated X86 Solution", National Semiconductor, (2002)
  • "Архитектура VIA Isaiah", G. Glenn Henry, Centaur Technology, Inc (2008).
  • http://www.sandpile.org/ia32/cpuid.htm
  • http://www.akkadia.org/drepper/cpumemory.pdf
  • "Что каждый программист должен знать о памяти", Ulrich Depper, Red Hat, Inc., (2007).
  • "Идентификация процессора ядром Windows", G. Chappell (2009). http://www.geoffchappell.com/viewer.htm?doc=studies/windows/km/cpu/cx8.htm
  • "Идентификация процессоров Intel(R) и инструкция CPUID, Примечание по применению 485" (2009).
Ошибки:
В настоящее время работает только на процессорах x86 и Itanium. Многие процессоры имеют ошибки в микрокоде для инструкции CPUID, поэтому информация о кэше может быть некорректной.
Лицензия:
Boost License 1.0
Авторы:
Don Clugston, Tomas Lindquist Olsen <tomas@famolsen.dk>
Исходный код
core/cpuid.d
struct CacheInfo;

Размер и поведение кэша

size_t size;

Размер кэша в килобайтах на процессор. Для объединённых кэшей L1 (данные + код) этот размер равен половине физического размера. (мы не делим пополам для больших размеров, так как обычно размер данных намного больше размера кода для критических циклов).

ubyte associativity;

Количество способов ассоциативности, например:

  • 1 = прямое отображение
  • 2 = 2-way set ассоциативный
  • 3 = 3-way set ассоциативный
  • ubyte.max = полностью ассоциативный

uint lineSize;

Количество байтов, считываемых в кэш при промахе.

CacheInfo[5] datacache;

Планируется к устареванию. Используйте dataCaches вместо этого.

pure nothrow @nogc @property @trusted const(CacheInfo)[5] dataCaches();

Данные кэши. Если физических уровней кэша меньше 5, оставшиеся уровни устанавливаются в size_t.max (== весь адресное пространство памяти)

pure nothrow @nogc @property @trusted string vendor();

Возвращает строку производителя, только для отображения. НЕ используйте это для определения функций! Обратите внимание, что некоторые процессоры имеют программируемые идентификаторы производителя.

pure nothrow @nogc @property @trusted string processor();

Возвращает строку процессора, только для отображения.

pure nothrow @nogc @property @trusted bool x87onChip();

Есть ли на чипе FPU x87?

pure nothrow @nogc @property @trusted bool mmx();

Поддерживается ли MMX?

pure nothrow @nogc @property @trusted bool sse();

Поддерживается ли SSE?

pure nothrow @nogc @property @trusted bool sse2();

Поддерживается ли SSE2?

pure nothrow @nogc @property @trusted bool sse3();

Поддерживается ли SSE3?

pure nothrow @nogc @property @trusted bool ssse3();

Поддерживается ли SSSE3?

pure nothrow @nogc @property @trusted bool sse41();

Поддерживается ли SSE4.1?

pure nothrow @nogc @property @trusted bool sse42();

Поддерживается ли SSE4.2?

pure nothrow @nogc @property @trusted bool sse4a();

Поддерживается ли SSE4a?

pure nothrow @nogc @property @trusted bool aes();

Поддерживается ли AES?

pure nothrow @nogc @property @trusted bool hasPclmulqdq();

Поддерживается ли pclmulqdq?

pure nothrow @nogc @property @trusted bool hasRdrand();

Поддерживается ли rdrand?

pure nothrow @nogc @property @trusted bool avx();

Поддерживается ли AVX?

pure nothrow @nogc @property @trusted bool vaes();

Поддерживается ли VEX-Encoded AES?

pure nothrow @nogc @property @trusted bool hasVpclmulqdq();

Поддерживается ли vpclmulqdq?

pure nothrow @nogc @property @trusted bool fma();

Поддерживается ли FMA?

pure nothrow @nogc @property @trusted bool fp16c();

Поддерживается ли FP16C?

pure nothrow @nogc @property @trusted bool avx2();

Поддерживается ли AVX2?

pure nothrow @nogc @property @trusted bool hle();

Поддерживается ли HLE (Hardware Lock Elision)?

pure nothrow @nogc @property @trusted bool rtm();

Поддерживается ли RTM (Restricted Transactional Memory)?

pure nothrow @nogc @property @trusted bool hasRdseed();

Поддерживается ли rdseed?

pure nothrow @nogc @property @trusted bool hasSha();

Поддерживается ли SHA?

pure nothrow @nogc @property @trusted bool amd3dnow();

Поддерживается ли AMD 3DNOW?

pure nothrow @nogc @property @trusted bool amd3dnowExt();

Поддерживается ли AMD 3DNOW Ext?

pure nothrow @nogc @property @trusted bool amdMmx();

Поддерживаются ли расширения AMD для MMX?

pure nothrow @nogc @property @trusted bool hasFxsr();

Поддерживается ли fxsave/fxrstor?

pure nothrow @nogc @property @trusted bool hasCmov();

Поддерживается ли cmov?

pure nothrow @nogc @property @trusted bool hasRdtsc();

Поддерживается ли rdtsc?

pure nothrow @nogc @property @trusted bool hasCmpxchg8b();

Поддерживается ли cmpxchg8b?

pure nothrow @nogc @property @trusted bool hasCmpxchg16b();

Поддерживается ли cmpxchg16b?

pure nothrow @nogc @property @trusted bool hasSysEnterSysExit();

Поддерживаются ли SYSENTER/SYSEXIT?

pure nothrow @nogc @property @trusted bool has3dnowPrefetch();

Поддерживается ли 3DNow prefetch?

pure nothrow @nogc @property @trusted bool hasLahfSahf();

Поддерживаются ли LAHF и SAHF в 64-битном режиме?

pure nothrow @nogc @property @trusted bool hasPopcnt();

Поддерживается ли POPCNT?

pure nothrow @nogc @property @trusted bool hasLzcnt();

Поддерживается ли LZCNT?

pure nothrow @nogc @property @trusted bool isX86_64();

Это Intel64 или AMD 64?

pure nothrow @nogc @property @trusted bool isItanium();

Это процессор IA64 (Itanium)?

pure nothrow @nogc @property @trusted bool hyperThreading();

Поддерживается ли hyperthreading?

pure nothrow @nogc @property @trusted uint threadsPerCPU();

Возвращает количество потоков на процессор.

pure nothrow @nogc @property @trusted uint coresPerCPU();

Возвращает количество ядер в процессоре.

pure nothrow @nogc @property @trusted bool preferAthlon();

Рекомендации по оптимизации для ассемблерного кода.

Для обеспечения совместимости в будущем процессор сравнивается с различными микроархитектурами. Для 32-битного x86 сравнения выполняются с семейством Intel PPro/PII/PIII/PM.

Основные 32-битные x86 микроархитектуры «династий» были:

  • Intel P6 (PentiumPro, PII, PIII, PM, Core, Core2).
  • AMD Athlon (K7, K8, K10).
  • Intel NetBurst (Pentium 4, Pentium D).
  • Последовательный Pentium (Pentium1, PMMX, Atom)


Другие ранние процессоры (Nx586, AMD K5, K6, Centaur C3, Transmeta, Cyrix, Rise) были в основном последовательными.

Некоторые новые процессоры не подходят к существующим категориям:

  • Intel Atom 230/330 (семейство 6, модель 0x1C) — это последовательное ядро.
  • Centaur Isiah = VIA Nano (семейство 6, модель F) — это ядро с очередью выполнения инструкций.


В рамках каждой династии методы оптимизации в основном одинаковы (например, использование пар инструкций для группы 4). Основные улучшения набора инструкций происходят в пределах каждой династии.

Этот процессор работает лучше с кодом AMD K7, чем с кодом PentiumPro..Core2?

pure nothrow @nogc @property @trusted bool preferPentium4();

Работает ли этот процессор лучше с кодом Pentium4, чем с кодом PentiumPro..Core2?

pure nothrow @nogc @property @trusted bool preferPentium1();

Работает ли этот процессор лучше с кодом Pentium I, чем с кодом Pentium Pro?

uint stepping;

Предупреждение: Это поле будет преобразовано в свойство в будущей версии.

Тип процессора (зависит от производителя). Это должно быть видно ТОЛЬКО для целей отображения.

uint model;

Предупреждение: Это поле будет преобразовано в свойство в будущей версии.

Тип процессора (зависит от производителя). Это должно быть видно ТОЛЬКО для целей отображения.

uint family;

Предупреждение: Это поле будет преобразовано в свойство в будущей версии.

Тип процессора (зависит от производителя). Это должно быть видно ТОЛЬКО для целей отображения.

uint numCacheLevels;

Это поле устарело. Используйте cacheLevels вместо этого.

nothrow @nogc @property @trusted uint cacheLevels();

Количество уровней кэша в процессоре.

© 1999–2021 The D Language Foundation
Licensed under the Boost License 1.0.
https://dlang.org/phobos/core_cpuid.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API