Как проверить доступность расширений Intel® Advanced Vector?
Как я могу проверить с помощью Delphi 2007, что поле поддерживает AVX.
мой вопрос ограничивается только запросом поддержки в CPU (предполагается, что ОС в порядке / Windows 7 С SP1).
PDF документ под названием введение в Intel® Advanced Vector Extensions Крис Ломонт объясняет, как это сделать, и приводит пример реализации кода, но на c++.
Он также доступен в этом страница.
1 ответов
вот перевод кода ассемблера, заданного на блог 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.