8

Delphi 2007 を使用して、ボックスが AVX 対応であることを確認するにはどうすればよいですか。

私の質問は、CPU でのサポートの問い合わせに限定されています(OS は OK / Windows 7 SP1 であると仮定しています)。

Chris Lomont によるIntel® Advanced Vector Extensions の紹介というタイトルの PDF ドキュメントでは、その方法を説明し、コードの実装例を C++ で提供しています。

このページからも入手できます。

4

1 に答える 1

13

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;

このコードは、Delphi の 32 ビット バージョンと 64 ビット バージョンの両方で機能します。

更新: @PhiS のおかげで登録保存コードが追加されました。

于 2012-03-30T11:50:28.520 に答える