Browse Source

Merge pull request #373 from martindevans/enhanced_avx512

Improved support for AVX512
tags/0.9.1
Martin Evans GitHub 2 years ago
parent
commit
7139281e4d
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 25 additions and 4 deletions
  1. +1
    -1
      .github/workflows/compile.yml
  2. +24
    -3
      LLama/Native/NativeLibraryConfig.cs

+ 1
- 1
.github/workflows/compile.yml View File

@@ -57,7 +57,7 @@ jobs:
- build: 'avx'
defines: '-DLLAMA_AVX2=OFF'
- build: 'avx512'
defines: '-DLLAMA_AVX512=ON'
defines: '-DLLAMA_AVX512=ON -LLAMA_AVX512_VBMI=ON -DLLAMA_AVX512_VNNI=ON'
runs-on: windows-latest
steps:
- uses: actions/checkout@v3


+ 24
- 3
LLama/Native/NativeLibraryConfig.cs View File

@@ -194,10 +194,31 @@ namespace LLama.Native
_avxLevel = AvxLevel.Avx;
if (System.Runtime.Intrinsics.X86.Avx2.IsSupported)
_avxLevel = AvxLevel.Avx2;
#if NET8_0_OR_GREATER
if (System.Runtime.Intrinsics.X86.Avx512F.IsSupported)
if (CheckAVX512())
_avxLevel = AvxLevel.Avx512;
}

private static bool CheckAVX512()
{
if (!System.Runtime.Intrinsics.X86.X86Base.IsSupported)
return false;

var (_, ebx, ecx, _) = System.Runtime.Intrinsics.X86.X86Base.CpuId(7, 0);

var vnni = (ecx & 0b_1000_0000_0000) != 0;

#if NET8_0_OR_GREATER
var f = System.Runtime.Intrinsics.X86.Avx512F.IsSupported;
var bw = System.Runtime.Intrinsics.X86.Avx512BW.IsSupported;
var vbmi = System.Runtime.Intrinsics.X86.Avx512Vbmi.IsSupported;
#else
var f = (ebx & (1 << 16)) != 0;
var bw = (ebx & (1 << 30)) != 0;
var vbmi = (ecx & 0b_0000_0000_0010) != 0;
#endif

return vnni && vbmi && bw && f;
}

/// <summary>
@@ -253,4 +274,4 @@ namespace LLama.Native
}
}
#endif
}
}

Loading…
Cancel
Save