Как проверить наличие расширений Intel® Advanced Vector Extensions? - PullRequest
7 голосов
/ 30 марта 2012

Как я могу проверить с помощью Delphi 2007, что ящик поддерживает AVX.

Мой вопрос ограничен только запросом поддержки в CPU (Предполагается, что ОС в порядке/ Windows 7 с пакетом обновления 1 (SP1).

В документе PDF под названием Введение в Intel® Advanced Vector Extensions Крис Ломонт объясняет, как это сделать, и предоставляет пример реализации кода, но на языке c ++.

Он также доступен на этой странице .

1 Ответ

12 голосов
/ 30 марта 2012

Вот перевод ассемблерного кода, приведенного в блоге Intel :

function isAvxSupported: Boolean;
asm
{$IFDEF CPUX86}
    push ebx
{$ENDIF}
{$IFDEF CPUX64}
    mov r10, rbx
{$ENDIF}
    xor eax, eax
    cpuid
    cmp eax, 1
    jb @not_supported
    mov eax, 1
    cpuid
    and ecx, 018000000h
    cmp ecx, 018000000h
    jne @not_supported
    xor ecx, ecx
    db 0Fh, 01h, 0D0h //XGETBV
    and eax, 110b
    cmp eax, 110b
    jne @not_supported
    mov eax, 1
    jmp @done
@not_supported:
    xor eax, eax
@done:
{$IFDEF CPUX86}
    pop ebx
{$ENDIF}
{$IFDEF CPUX64}
    mov rbx, r10
{$ENDIF}
end;

Этот код будет работать как в 32-, так и в 64-битных версиях Delphi.

Обновление : добавлен код сохранения регистра благодаря @ PhiS.

...