From 30275b766ad637696ba8cea79b9a34fd491ef710 Mon Sep 17 00:00:00 2001 From: Surya Jasper Date: Thu, 8 Aug 2024 20:27:16 -0500 Subject: [PATCH] Triton harness & FP8 Attention --- .github/workflows/run_bench.yml | 17 +- .gitignore | 4 +- .vscode/settings.json | 7 +- ...ntion_B1_H32_SQ1024_SKV1024_DH128_f16.mlir | 11 + ...ention_B1_H32_SQ1024_SKV1024_DH128_f8.mlir | 11 + ...tion_B1_H32_SQ1024_SKV1024_DH128_fp16.mlir | 11 + ...ntion_B1_H32_SQ1024_SKV1024_DH128_fp8.mlir | 11 + ...ntion_B1_H32_SQ1024_SKV2048_DH128_f16.mlir | 11 + ...ention_B1_H32_SQ1024_SKV2048_DH128_f8.mlir | 11 + ...tion_B1_H32_SQ1024_SKV2048_DH128_fp16.mlir | 11 + ...ntion_B1_H32_SQ1024_SKV2048_DH128_fp8.mlir | 11 + ...ntion_B1_H32_SQ1024_SKV4096_DH128_f16.mlir | 11 + ...ention_B1_H32_SQ1024_SKV4096_DH128_f8.mlir | 11 + ...tion_B1_H32_SQ1024_SKV4096_DH128_fp16.mlir | 11 + ...ntion_B1_H32_SQ1024_SKV4096_DH128_fp8.mlir | 11 + ...ntion_B1_H32_SQ2048_SKV1024_DH128_f16.mlir | 11 + ...ention_B1_H32_SQ2048_SKV1024_DH128_f8.mlir | 11 + ...tion_B1_H32_SQ2048_SKV1024_DH128_fp16.mlir | 11 + ...ntion_B1_H32_SQ2048_SKV1024_DH128_fp8.mlir | 11 + ...ntion_B1_H32_SQ2048_SKV2048_DH128_f16.mlir | 11 + ...ention_B1_H32_SQ2048_SKV2048_DH128_f8.mlir | 11 + ...tion_B1_H32_SQ2048_SKV2048_DH128_fp16.mlir | 11 + ...ntion_B1_H32_SQ2048_SKV2048_DH128_fp8.mlir | 11 + ...ntion_B1_H32_SQ2048_SKV4096_DH128_f16.mlir | 11 + ...ention_B1_H32_SQ2048_SKV4096_DH128_f8.mlir | 11 + ...tion_B1_H32_SQ2048_SKV4096_DH128_fp16.mlir | 11 + ...ntion_B1_H32_SQ2048_SKV4096_DH128_fp8.mlir | 11 + ...ntion_B1_H32_SQ4096_SKV1024_DH128_f16.mlir | 11 + ...ention_B1_H32_SQ4096_SKV1024_DH128_f8.mlir | 11 + ...tion_B1_H32_SQ4096_SKV1024_DH128_fp16.mlir | 11 + ...ntion_B1_H32_SQ4096_SKV1024_DH128_fp8.mlir | 11 + ...ntion_B1_H32_SQ4096_SKV2048_DH128_f16.mlir | 11 + ...ention_B1_H32_SQ4096_SKV2048_DH128_f8.mlir | 11 + ...tion_B1_H32_SQ4096_SKV2048_DH128_fp16.mlir | 11 + ...ntion_B1_H32_SQ4096_SKV2048_DH128_fp8.mlir | 11 + ...ntion_B1_H32_SQ4096_SKV4096_DH128_f16.mlir | 11 + ...ention_B1_H32_SQ4096_SKV4096_DH128_f8.mlir | 11 + ...tion_B1_H32_SQ4096_SKV4096_DH128_fp16.mlir | 11 + ...ntion_B1_H32_SQ4096_SKV4096_DH128_fp8.mlir | 11 + ...ntion_B1_H40_SQ1024_SKV1024_DH128_f16.mlir | 11 + ...ention_B1_H40_SQ1024_SKV1024_DH128_f8.mlir | 11 + ...tion_B1_H40_SQ1024_SKV1024_DH128_fp16.mlir | 11 + ...ntion_B1_H40_SQ1024_SKV1024_DH128_fp8.mlir | 11 + ...ntion_B1_H40_SQ1024_SKV2048_DH128_f16.mlir | 11 + ...ention_B1_H40_SQ1024_SKV2048_DH128_f8.mlir | 11 + ...tion_B1_H40_SQ1024_SKV2048_DH128_fp16.mlir | 11 + ...ntion_B1_H40_SQ1024_SKV2048_DH128_fp8.mlir | 11 + ...ntion_B1_H40_SQ1024_SKV4096_DH128_f16.mlir | 11 + ...ention_B1_H40_SQ1024_SKV4096_DH128_f8.mlir | 11 + ...tion_B1_H40_SQ1024_SKV4096_DH128_fp16.mlir | 11 + ...ntion_B1_H40_SQ1024_SKV4096_DH128_fp8.mlir | 11 + ...ntion_B1_H40_SQ2048_SKV1024_DH128_f16.mlir | 11 + ...ention_B1_H40_SQ2048_SKV1024_DH128_f8.mlir | 11 + ...tion_B1_H40_SQ2048_SKV1024_DH128_fp16.mlir | 11 + ...ntion_B1_H40_SQ2048_SKV1024_DH128_fp8.mlir | 11 + ...ntion_B1_H40_SQ2048_SKV2048_DH128_f16.mlir | 11 + ...ention_B1_H40_SQ2048_SKV2048_DH128_f8.mlir | 11 + ...tion_B1_H40_SQ2048_SKV2048_DH128_fp16.mlir | 11 + ...ntion_B1_H40_SQ2048_SKV2048_DH128_fp8.mlir | 11 + ...ntion_B1_H40_SQ2048_SKV4096_DH128_f16.mlir | 11 + ...ention_B1_H40_SQ2048_SKV4096_DH128_f8.mlir | 11 + ...tion_B1_H40_SQ2048_SKV4096_DH128_fp16.mlir | 11 + ...ntion_B1_H40_SQ2048_SKV4096_DH128_fp8.mlir | 11 + ...ntion_B1_H40_SQ4096_SKV1024_DH128_f16.mlir | 11 + ...ention_B1_H40_SQ4096_SKV1024_DH128_f8.mlir | 11 + ...tion_B1_H40_SQ4096_SKV1024_DH128_fp16.mlir | 11 + ...ntion_B1_H40_SQ4096_SKV1024_DH128_fp8.mlir | 11 + ...ntion_B1_H40_SQ4096_SKV2048_DH128_f16.mlir | 11 + ...ention_B1_H40_SQ4096_SKV2048_DH128_f8.mlir | 11 + ...tion_B1_H40_SQ4096_SKV2048_DH128_fp16.mlir | 11 + ...ntion_B1_H40_SQ4096_SKV2048_DH128_fp8.mlir | 11 + ...ntion_B1_H40_SQ4096_SKV4096_DH128_f16.mlir | 11 + ...ention_B1_H40_SQ4096_SKV4096_DH128_f8.mlir | 11 + ...tion_B1_H40_SQ4096_SKV4096_DH128_fp16.mlir | 11 + ...ntion_B1_H40_SQ4096_SKV4096_DH128_fp8.mlir | 11 + ...ntion_B1_H64_SQ1024_SKV1024_DH128_f16.mlir | 11 + ...ention_B1_H64_SQ1024_SKV1024_DH128_f8.mlir | 11 + ...tion_B1_H64_SQ1024_SKV1024_DH128_fp16.mlir | 11 + ...ntion_B1_H64_SQ1024_SKV1024_DH128_fp8.mlir | 11 + ...ntion_B1_H64_SQ1024_SKV2048_DH128_f16.mlir | 11 + ...ention_B1_H64_SQ1024_SKV2048_DH128_f8.mlir | 11 + ...tion_B1_H64_SQ1024_SKV2048_DH128_fp16.mlir | 11 + ...ntion_B1_H64_SQ1024_SKV2048_DH128_fp8.mlir | 11 + ...ntion_B1_H64_SQ1024_SKV4096_DH128_f16.mlir | 11 + ...ention_B1_H64_SQ1024_SKV4096_DH128_f8.mlir | 11 + ...tion_B1_H64_SQ1024_SKV4096_DH128_fp16.mlir | 11 + ...ntion_B1_H64_SQ1024_SKV4096_DH128_fp8.mlir | 11 + ...ntion_B1_H64_SQ2048_SKV1024_DH128_f16.mlir | 11 + ...ention_B1_H64_SQ2048_SKV1024_DH128_f8.mlir | 11 + ...tion_B1_H64_SQ2048_SKV1024_DH128_fp16.mlir | 11 + ...ntion_B1_H64_SQ2048_SKV1024_DH128_fp8.mlir | 11 + ...ntion_B1_H64_SQ2048_SKV2048_DH128_f16.mlir | 11 + ...ention_B1_H64_SQ2048_SKV2048_DH128_f8.mlir | 11 + ...tion_B1_H64_SQ2048_SKV2048_DH128_fp16.mlir | 11 + ...ntion_B1_H64_SQ2048_SKV2048_DH128_fp8.mlir | 11 + ...ntion_B1_H64_SQ2048_SKV4096_DH128_f16.mlir | 11 + ...ention_B1_H64_SQ2048_SKV4096_DH128_f8.mlir | 11 + ...tion_B1_H64_SQ2048_SKV4096_DH128_fp16.mlir | 11 + ...ntion_B1_H64_SQ2048_SKV4096_DH128_fp8.mlir | 11 + ...ntion_B1_H64_SQ4096_SKV1024_DH128_f16.mlir | 11 + ...ention_B1_H64_SQ4096_SKV1024_DH128_f8.mlir | 11 + ...tion_B1_H64_SQ4096_SKV1024_DH128_fp16.mlir | 11 + ...ntion_B1_H64_SQ4096_SKV1024_DH128_fp8.mlir | 11 + ...ntion_B1_H64_SQ4096_SKV2048_DH128_f16.mlir | 11 + ...ention_B1_H64_SQ4096_SKV2048_DH128_f8.mlir | 11 + ...tion_B1_H64_SQ4096_SKV2048_DH128_fp16.mlir | 11 + ...ntion_B1_H64_SQ4096_SKV2048_DH128_fp8.mlir | 11 + ...ntion_B1_H64_SQ4096_SKV4096_DH128_f16.mlir | 11 + ...ention_B1_H64_SQ4096_SKV4096_DH128_f8.mlir | 11 + ...tion_B1_H64_SQ4096_SKV4096_DH128_fp16.mlir | 11 + ...ntion_B1_H64_SQ4096_SKV4096_DH128_fp8.mlir | 11 + ...ention_B2_H10_SQ1024_SKV1024_DH64_f16.mlir | 11 + ...tention_B2_H10_SQ1024_SKV1024_DH64_f8.mlir | 11 + ...ntion_B2_H10_SQ1024_SKV1024_DH64_fp16.mlir | 11 + ...ention_B2_H10_SQ1024_SKV1024_DH64_fp8.mlir | 11 + ...ention_B2_H10_SQ4096_SKV4096_DH64_f16.mlir | 11 + ...tention_B2_H10_SQ4096_SKV4096_DH64_f8.mlir | 11 + ...ntion_B2_H10_SQ4096_SKV4096_DH64_fp16.mlir | 11 + ...ention_B2_H10_SQ4096_SKV4096_DH64_fp8.mlir | 11 + ...ttention_B2_H10_SQ4096_SKV64_DH64_f16.mlir | 11 + ...attention_B2_H10_SQ4096_SKV64_DH64_f8.mlir | 11 + ...tention_B2_H10_SQ4096_SKV64_DH64_fp16.mlir | 11 + ...ttention_B2_H10_SQ4096_SKV64_DH64_fp8.mlir | 11 + ...ttention_B2_H20_SQ1024_SKV64_DH64_f16.mlir | 11 + ...attention_B2_H20_SQ1024_SKV64_DH64_f8.mlir | 11 + ...tention_B2_H20_SQ1024_SKV64_DH64_fp16.mlir | 11 + ...ttention_B2_H20_SQ1024_SKV64_DH64_fp8.mlir | 11 + ...ntion_B2_H32_SQ1024_SKV1024_DH128_f16.mlir | 11 + ...ention_B2_H32_SQ1024_SKV1024_DH128_f8.mlir | 11 + ...tion_B2_H32_SQ1024_SKV1024_DH128_fp16.mlir | 11 + ...ntion_B2_H32_SQ1024_SKV1024_DH128_fp8.mlir | 11 + ...ntion_B2_H32_SQ1024_SKV2048_DH128_f16.mlir | 11 + ...ention_B2_H32_SQ1024_SKV2048_DH128_f8.mlir | 11 + ...tion_B2_H32_SQ1024_SKV2048_DH128_fp16.mlir | 11 + ...ntion_B2_H32_SQ1024_SKV2048_DH128_fp8.mlir | 11 + ...ntion_B2_H32_SQ1024_SKV4096_DH128_f16.mlir | 11 + ...ention_B2_H32_SQ1024_SKV4096_DH128_f8.mlir | 11 + ...tion_B2_H32_SQ1024_SKV4096_DH128_fp16.mlir | 11 + ...ntion_B2_H32_SQ1024_SKV4096_DH128_fp8.mlir | 11 + ...ntion_B2_H32_SQ2048_SKV1024_DH128_f16.mlir | 11 + ...ention_B2_H32_SQ2048_SKV1024_DH128_f8.mlir | 11 + ...tion_B2_H32_SQ2048_SKV1024_DH128_fp16.mlir | 11 + ...ntion_B2_H32_SQ2048_SKV1024_DH128_fp8.mlir | 11 + ...ntion_B2_H32_SQ2048_SKV2048_DH128_f16.mlir | 11 + ...ention_B2_H32_SQ2048_SKV2048_DH128_f8.mlir | 11 + ...tion_B2_H32_SQ2048_SKV2048_DH128_fp16.mlir | 11 + ...ntion_B2_H32_SQ2048_SKV2048_DH128_fp8.mlir | 11 + ...ntion_B2_H32_SQ2048_SKV4096_DH128_f16.mlir | 11 + ...ention_B2_H32_SQ2048_SKV4096_DH128_f8.mlir | 11 + ...tion_B2_H32_SQ2048_SKV4096_DH128_fp16.mlir | 11 + ...ntion_B2_H32_SQ2048_SKV4096_DH128_fp8.mlir | 11 + ...ntion_B2_H32_SQ4096_SKV1024_DH128_f16.mlir | 11 + ...ention_B2_H32_SQ4096_SKV1024_DH128_f8.mlir | 11 + ...tion_B2_H32_SQ4096_SKV1024_DH128_fp16.mlir | 11 + ...ntion_B2_H32_SQ4096_SKV1024_DH128_fp8.mlir | 11 + ...ntion_B2_H32_SQ4096_SKV2048_DH128_f16.mlir | 11 + ...ention_B2_H32_SQ4096_SKV2048_DH128_f8.mlir | 11 + ...tion_B2_H32_SQ4096_SKV2048_DH128_fp16.mlir | 11 + ...ntion_B2_H32_SQ4096_SKV2048_DH128_fp8.mlir | 11 + ...ntion_B2_H32_SQ4096_SKV4096_DH128_f16.mlir | 11 + ...ention_B2_H32_SQ4096_SKV4096_DH128_f8.mlir | 11 + ...tion_B2_H32_SQ4096_SKV4096_DH128_fp16.mlir | 11 + ...ntion_B2_H32_SQ4096_SKV4096_DH128_fp8.mlir | 11 + ...ntion_B2_H40_SQ1024_SKV1024_DH128_f16.mlir | 11 + ...ention_B2_H40_SQ1024_SKV1024_DH128_f8.mlir | 11 + ...tion_B2_H40_SQ1024_SKV1024_DH128_fp16.mlir | 11 + ...ntion_B2_H40_SQ1024_SKV1024_DH128_fp8.mlir | 11 + ...ntion_B2_H40_SQ1024_SKV2048_DH128_f16.mlir | 11 + ...ention_B2_H40_SQ1024_SKV2048_DH128_f8.mlir | 11 + ...tion_B2_H40_SQ1024_SKV2048_DH128_fp16.mlir | 11 + ...ntion_B2_H40_SQ1024_SKV2048_DH128_fp8.mlir | 11 + ...ntion_B2_H40_SQ1024_SKV4096_DH128_f16.mlir | 11 + ...ention_B2_H40_SQ1024_SKV4096_DH128_f8.mlir | 11 + ...tion_B2_H40_SQ1024_SKV4096_DH128_fp16.mlir | 11 + ...ntion_B2_H40_SQ1024_SKV4096_DH128_fp8.mlir | 11 + ...ntion_B2_H40_SQ2048_SKV1024_DH128_f16.mlir | 11 + ...ention_B2_H40_SQ2048_SKV1024_DH128_f8.mlir | 11 + ...tion_B2_H40_SQ2048_SKV1024_DH128_fp16.mlir | 11 + ...ntion_B2_H40_SQ2048_SKV1024_DH128_fp8.mlir | 11 + ...ntion_B2_H40_SQ2048_SKV2048_DH128_f16.mlir | 11 + ...ention_B2_H40_SQ2048_SKV2048_DH128_f8.mlir | 11 + ...tion_B2_H40_SQ2048_SKV2048_DH128_fp16.mlir | 11 + ...ntion_B2_H40_SQ2048_SKV2048_DH128_fp8.mlir | 11 + ...ntion_B2_H40_SQ2048_SKV4096_DH128_f16.mlir | 11 + ...ention_B2_H40_SQ2048_SKV4096_DH128_f8.mlir | 11 + ...tion_B2_H40_SQ2048_SKV4096_DH128_fp16.mlir | 11 + ...ntion_B2_H40_SQ2048_SKV4096_DH128_fp8.mlir | 11 + ...ntion_B2_H40_SQ4096_SKV1024_DH128_f16.mlir | 11 + ...ention_B2_H40_SQ4096_SKV1024_DH128_f8.mlir | 11 + ...tion_B2_H40_SQ4096_SKV1024_DH128_fp16.mlir | 11 + ...ntion_B2_H40_SQ4096_SKV1024_DH128_fp8.mlir | 11 + ...ntion_B2_H40_SQ4096_SKV2048_DH128_f16.mlir | 11 + ...ention_B2_H40_SQ4096_SKV2048_DH128_f8.mlir | 11 + ...tion_B2_H40_SQ4096_SKV2048_DH128_fp16.mlir | 11 + ...ntion_B2_H40_SQ4096_SKV2048_DH128_fp8.mlir | 11 + ...ntion_B2_H40_SQ4096_SKV4096_DH128_f16.mlir | 11 + ...ention_B2_H40_SQ4096_SKV4096_DH128_f8.mlir | 11 + ...tion_B2_H40_SQ4096_SKV4096_DH128_fp16.mlir | 11 + ...ntion_B2_H40_SQ4096_SKV4096_DH128_fp8.mlir | 11 + ...ntion_B2_H64_SQ1024_SKV1024_DH128_f16.mlir | 11 + ...ention_B2_H64_SQ1024_SKV1024_DH128_f8.mlir | 11 + ...tion_B2_H64_SQ1024_SKV1024_DH128_fp16.mlir | 11 + ...ntion_B2_H64_SQ1024_SKV1024_DH128_fp8.mlir | 11 + ...ntion_B2_H64_SQ1024_SKV2048_DH128_f16.mlir | 11 + ...ention_B2_H64_SQ1024_SKV2048_DH128_f8.mlir | 11 + ...tion_B2_H64_SQ1024_SKV2048_DH128_fp16.mlir | 11 + ...ntion_B2_H64_SQ1024_SKV2048_DH128_fp8.mlir | 11 + ...ntion_B2_H64_SQ1024_SKV4096_DH128_f16.mlir | 11 + ...ention_B2_H64_SQ1024_SKV4096_DH128_f8.mlir | 11 + ...tion_B2_H64_SQ1024_SKV4096_DH128_fp16.mlir | 11 + ...ntion_B2_H64_SQ1024_SKV4096_DH128_fp8.mlir | 11 + ...ntion_B2_H64_SQ2048_SKV1024_DH128_f16.mlir | 11 + ...ention_B2_H64_SQ2048_SKV1024_DH128_f8.mlir | 11 + ...tion_B2_H64_SQ2048_SKV1024_DH128_fp16.mlir | 11 + ...ntion_B2_H64_SQ2048_SKV1024_DH128_fp8.mlir | 11 + ...ntion_B2_H64_SQ2048_SKV2048_DH128_f16.mlir | 11 + ...ention_B2_H64_SQ2048_SKV2048_DH128_f8.mlir | 11 + ...tion_B2_H64_SQ2048_SKV2048_DH128_fp16.mlir | 11 + ...ntion_B2_H64_SQ2048_SKV2048_DH128_fp8.mlir | 11 + ...ntion_B2_H64_SQ2048_SKV4096_DH128_f16.mlir | 11 + ...ention_B2_H64_SQ2048_SKV4096_DH128_f8.mlir | 11 + ...tion_B2_H64_SQ2048_SKV4096_DH128_fp16.mlir | 11 + ...ntion_B2_H64_SQ2048_SKV4096_DH128_fp8.mlir | 11 + ...ntion_B2_H64_SQ4096_SKV1024_DH128_f16.mlir | 11 + ...ention_B2_H64_SQ4096_SKV1024_DH128_f8.mlir | 11 + ...tion_B2_H64_SQ4096_SKV1024_DH128_fp16.mlir | 11 + ...ntion_B2_H64_SQ4096_SKV1024_DH128_fp8.mlir | 11 + ...ntion_B2_H64_SQ4096_SKV2048_DH128_f16.mlir | 11 + ...ention_B2_H64_SQ4096_SKV2048_DH128_f8.mlir | 11 + ...tion_B2_H64_SQ4096_SKV2048_DH128_fp16.mlir | 11 + ...ntion_B2_H64_SQ4096_SKV2048_DH128_fp8.mlir | 11 + ...ntion_B2_H64_SQ4096_SKV4096_DH128_f16.mlir | 11 + ...ention_B2_H64_SQ4096_SKV4096_DH128_f8.mlir | 11 + ...tion_B2_H64_SQ4096_SKV4096_DH128_fp16.mlir | 11 + ...ntion_B2_H64_SQ4096_SKV4096_DH128_fp8.mlir | 11 + ...ntion_B4_H32_SQ1024_SKV1024_DH128_f16.mlir | 11 + ...ention_B4_H32_SQ1024_SKV1024_DH128_f8.mlir | 11 + ...tion_B4_H32_SQ1024_SKV1024_DH128_fp16.mlir | 11 + ...ntion_B4_H32_SQ1024_SKV1024_DH128_fp8.mlir | 11 + ...ntion_B4_H32_SQ1024_SKV2048_DH128_f16.mlir | 11 + ...ention_B4_H32_SQ1024_SKV2048_DH128_f8.mlir | 11 + ...tion_B4_H32_SQ1024_SKV2048_DH128_fp16.mlir | 11 + ...ntion_B4_H32_SQ1024_SKV2048_DH128_fp8.mlir | 11 + ...ntion_B4_H32_SQ1024_SKV4096_DH128_f16.mlir | 11 + ...ention_B4_H32_SQ1024_SKV4096_DH128_f8.mlir | 11 + ...tion_B4_H32_SQ1024_SKV4096_DH128_fp16.mlir | 11 + ...ntion_B4_H32_SQ1024_SKV4096_DH128_fp8.mlir | 11 + ...ntion_B4_H32_SQ2048_SKV1024_DH128_f16.mlir | 11 + ...ention_B4_H32_SQ2048_SKV1024_DH128_f8.mlir | 11 + ...tion_B4_H32_SQ2048_SKV1024_DH128_fp16.mlir | 11 + ...ntion_B4_H32_SQ2048_SKV1024_DH128_fp8.mlir | 11 + ...ntion_B4_H32_SQ2048_SKV2048_DH128_f16.mlir | 11 + ...ention_B4_H32_SQ2048_SKV2048_DH128_f8.mlir | 11 + ...tion_B4_H32_SQ2048_SKV2048_DH128_fp16.mlir | 11 + ...ntion_B4_H32_SQ2048_SKV2048_DH128_fp8.mlir | 11 + ...ntion_B4_H32_SQ2048_SKV4096_DH128_f16.mlir | 11 + ...ention_B4_H32_SQ2048_SKV4096_DH128_f8.mlir | 11 + ...tion_B4_H32_SQ2048_SKV4096_DH128_fp16.mlir | 11 + ...ntion_B4_H32_SQ2048_SKV4096_DH128_fp8.mlir | 11 + ...ntion_B4_H32_SQ4096_SKV1024_DH128_f16.mlir | 11 + ...ention_B4_H32_SQ4096_SKV1024_DH128_f8.mlir | 11 + ...tion_B4_H32_SQ4096_SKV1024_DH128_fp16.mlir | 11 + ...ntion_B4_H32_SQ4096_SKV1024_DH128_fp8.mlir | 11 + ...ntion_B4_H32_SQ4096_SKV2048_DH128_f16.mlir | 11 + ...ention_B4_H32_SQ4096_SKV2048_DH128_f8.mlir | 11 + ...tion_B4_H32_SQ4096_SKV2048_DH128_fp16.mlir | 11 + ...ntion_B4_H32_SQ4096_SKV2048_DH128_fp8.mlir | 11 + ...ntion_B4_H32_SQ4096_SKV4096_DH128_f16.mlir | 11 + ...ention_B4_H32_SQ4096_SKV4096_DH128_f8.mlir | 11 + ...tion_B4_H32_SQ4096_SKV4096_DH128_fp16.mlir | 11 + ...ntion_B4_H32_SQ4096_SKV4096_DH128_fp8.mlir | 11 + ...ntion_B4_H40_SQ1024_SKV1024_DH128_f16.mlir | 11 + ...ention_B4_H40_SQ1024_SKV1024_DH128_f8.mlir | 11 + ...tion_B4_H40_SQ1024_SKV1024_DH128_fp16.mlir | 11 + ...ntion_B4_H40_SQ1024_SKV1024_DH128_fp8.mlir | 11 + ...ntion_B4_H40_SQ1024_SKV2048_DH128_f16.mlir | 11 + ...ention_B4_H40_SQ1024_SKV2048_DH128_f8.mlir | 11 + ...tion_B4_H40_SQ1024_SKV2048_DH128_fp16.mlir | 11 + ...ntion_B4_H40_SQ1024_SKV2048_DH128_fp8.mlir | 11 + ...ntion_B4_H40_SQ1024_SKV4096_DH128_f16.mlir | 11 + ...ention_B4_H40_SQ1024_SKV4096_DH128_f8.mlir | 11 + ...tion_B4_H40_SQ1024_SKV4096_DH128_fp16.mlir | 11 + ...ntion_B4_H40_SQ1024_SKV4096_DH128_fp8.mlir | 11 + ...ntion_B4_H40_SQ2048_SKV1024_DH128_f16.mlir | 11 + ...ention_B4_H40_SQ2048_SKV1024_DH128_f8.mlir | 11 + ...tion_B4_H40_SQ2048_SKV1024_DH128_fp16.mlir | 11 + ...ntion_B4_H40_SQ2048_SKV1024_DH128_fp8.mlir | 11 + ...ntion_B4_H40_SQ2048_SKV2048_DH128_f16.mlir | 11 + ...ention_B4_H40_SQ2048_SKV2048_DH128_f8.mlir | 11 + ...tion_B4_H40_SQ2048_SKV2048_DH128_fp16.mlir | 11 + ...ntion_B4_H40_SQ2048_SKV2048_DH128_fp8.mlir | 11 + ...ntion_B4_H40_SQ2048_SKV4096_DH128_f16.mlir | 11 + ...ention_B4_H40_SQ2048_SKV4096_DH128_f8.mlir | 11 + ...tion_B4_H40_SQ2048_SKV4096_DH128_fp16.mlir | 11 + ...ntion_B4_H40_SQ2048_SKV4096_DH128_fp8.mlir | 11 + ...ntion_B4_H40_SQ4096_SKV1024_DH128_f16.mlir | 11 + ...ention_B4_H40_SQ4096_SKV1024_DH128_f8.mlir | 11 + ...tion_B4_H40_SQ4096_SKV1024_DH128_fp16.mlir | 11 + ...ntion_B4_H40_SQ4096_SKV1024_DH128_fp8.mlir | 11 + ...ntion_B4_H40_SQ4096_SKV2048_DH128_f16.mlir | 11 + ...ention_B4_H40_SQ4096_SKV2048_DH128_f8.mlir | 11 + ...tion_B4_H40_SQ4096_SKV2048_DH128_fp16.mlir | 11 + ...ntion_B4_H40_SQ4096_SKV2048_DH128_fp8.mlir | 11 + ...ntion_B4_H40_SQ4096_SKV4096_DH128_f16.mlir | 11 + ...ention_B4_H40_SQ4096_SKV4096_DH128_f8.mlir | 11 + ...tion_B4_H40_SQ4096_SKV4096_DH128_fp16.mlir | 11 + ...ntion_B4_H40_SQ4096_SKV4096_DH128_fp8.mlir | 11 + ...ntion_B4_H64_SQ1024_SKV1024_DH128_f16.mlir | 11 + ...ention_B4_H64_SQ1024_SKV1024_DH128_f8.mlir | 11 + ...tion_B4_H64_SQ1024_SKV1024_DH128_fp16.mlir | 11 + ...ntion_B4_H64_SQ1024_SKV1024_DH128_fp8.mlir | 11 + ...ntion_B4_H64_SQ1024_SKV2048_DH128_f16.mlir | 11 + ...ention_B4_H64_SQ1024_SKV2048_DH128_f8.mlir | 11 + ...tion_B4_H64_SQ1024_SKV2048_DH128_fp16.mlir | 11 + ...ntion_B4_H64_SQ1024_SKV2048_DH128_fp8.mlir | 11 + ...ntion_B4_H64_SQ1024_SKV4096_DH128_f16.mlir | 11 + ...ention_B4_H64_SQ1024_SKV4096_DH128_f8.mlir | 11 + ...tion_B4_H64_SQ1024_SKV4096_DH128_fp16.mlir | 11 + ...ntion_B4_H64_SQ1024_SKV4096_DH128_fp8.mlir | 11 + ...ntion_B4_H64_SQ2048_SKV1024_DH128_f16.mlir | 11 + ...ention_B4_H64_SQ2048_SKV1024_DH128_f8.mlir | 11 + ...tion_B4_H64_SQ2048_SKV1024_DH128_fp16.mlir | 11 + ...ntion_B4_H64_SQ2048_SKV1024_DH128_fp8.mlir | 11 + ...ntion_B4_H64_SQ2048_SKV2048_DH128_f16.mlir | 11 + ...ention_B4_H64_SQ2048_SKV2048_DH128_f8.mlir | 11 + ...tion_B4_H64_SQ2048_SKV2048_DH128_fp16.mlir | 11 + ...ntion_B4_H64_SQ2048_SKV2048_DH128_fp8.mlir | 11 + ...ntion_B4_H64_SQ2048_SKV4096_DH128_f16.mlir | 11 + ...ention_B4_H64_SQ2048_SKV4096_DH128_f8.mlir | 11 + ...tion_B4_H64_SQ2048_SKV4096_DH128_fp16.mlir | 11 + ...ntion_B4_H64_SQ2048_SKV4096_DH128_fp8.mlir | 11 + ...ntion_B4_H64_SQ4096_SKV1024_DH128_f16.mlir | 11 + ...ention_B4_H64_SQ4096_SKV1024_DH128_f8.mlir | 11 + ...tion_B4_H64_SQ4096_SKV1024_DH128_fp16.mlir | 11 + ...ntion_B4_H64_SQ4096_SKV1024_DH128_fp8.mlir | 11 + ...ntion_B4_H64_SQ4096_SKV2048_DH128_f16.mlir | 11 + ...ention_B4_H64_SQ4096_SKV2048_DH128_f8.mlir | 11 + ...tion_B4_H64_SQ4096_SKV2048_DH128_fp16.mlir | 11 + ...ntion_B4_H64_SQ4096_SKV2048_DH128_fp8.mlir | 11 + ...ntion_B4_H64_SQ4096_SKV4096_DH128_f16.mlir | 11 + ...ention_B4_H64_SQ4096_SKV4096_DH128_f8.mlir | 11 + ...tion_B4_H64_SQ4096_SKV4096_DH128_fp16.mlir | 11 + ...ntion_B4_H64_SQ4096_SKV4096_DH128_fp8.mlir | 11 + ...ntion_B1_H32_SQ1024_SKV1024_DH128_f16.vmfb | Bin 0 -> 30100 bytes ...ention_B1_H32_SQ1024_SKV1024_DH128_f8.vmfb | Bin 0 -> 19412 bytes ...ntion_B1_H32_SQ1024_SKV2048_DH128_f16.vmfb | Bin 0 -> 30100 bytes ...ention_B1_H32_SQ1024_SKV2048_DH128_f8.vmfb | Bin 0 -> 19476 bytes ...ntion_B1_H32_SQ1024_SKV4096_DH128_f16.vmfb | Bin 0 -> 30100 bytes ...ention_B1_H32_SQ1024_SKV4096_DH128_f8.vmfb | Bin 0 -> 19476 bytes ...ntion_B1_H32_SQ2048_SKV1024_DH128_f16.vmfb | Bin 0 -> 30164 bytes ...ention_B1_H32_SQ2048_SKV1024_DH128_f8.vmfb | Bin 0 -> 19476 bytes ...ntion_B1_H32_SQ2048_SKV2048_DH128_f16.vmfb | Bin 0 -> 30100 bytes ...ention_B1_H32_SQ2048_SKV2048_DH128_f8.vmfb | Bin 0 -> 19412 bytes ...ntion_B1_H32_SQ2048_SKV4096_DH128_f16.vmfb | Bin 0 -> 30100 bytes ...ention_B1_H32_SQ2048_SKV4096_DH128_f8.vmfb | Bin 0 -> 19476 bytes ...ntion_B1_H32_SQ4096_SKV1024_DH128_f16.vmfb | Bin 0 -> 30100 bytes ...ention_B1_H32_SQ4096_SKV1024_DH128_f8.vmfb | Bin 0 -> 19476 bytes ...ntion_B1_H32_SQ4096_SKV2048_DH128_f16.vmfb | Bin 0 -> 30164 bytes ...ention_B1_H32_SQ4096_SKV2048_DH128_f8.vmfb | Bin 0 -> 19476 bytes ...ntion_B1_H32_SQ4096_SKV4096_DH128_f16.vmfb | Bin 0 -> 30100 bytes ...ention_B1_H32_SQ4096_SKV4096_DH128_f8.vmfb | Bin 0 -> 19412 bytes ...ntion_B1_H40_SQ1024_SKV1024_DH128_f16.vmfb | Bin 0 -> 30100 bytes ...ention_B1_H40_SQ1024_SKV1024_DH128_f8.vmfb | Bin 0 -> 19412 bytes ...ntion_B1_H40_SQ1024_SKV2048_DH128_f16.vmfb | Bin 0 -> 30100 bytes ...ention_B1_H40_SQ1024_SKV2048_DH128_f8.vmfb | Bin 0 -> 19476 bytes ...ntion_B1_H40_SQ1024_SKV4096_DH128_f16.vmfb | Bin 0 -> 30100 bytes ...ention_B1_H40_SQ1024_SKV4096_DH128_f8.vmfb | Bin 0 -> 19476 bytes ...ntion_B1_H40_SQ2048_SKV1024_DH128_f16.vmfb | Bin 0 -> 30164 bytes ...ention_B1_H40_SQ2048_SKV1024_DH128_f8.vmfb | Bin 0 -> 19476 bytes ...ntion_B1_H40_SQ2048_SKV2048_DH128_f16.vmfb | Bin 0 -> 30100 bytes ...ention_B1_H40_SQ2048_SKV2048_DH128_f8.vmfb | Bin 0 -> 19412 bytes ...ntion_B1_H40_SQ2048_SKV4096_DH128_f16.vmfb | Bin 0 -> 30100 bytes ...ention_B1_H40_SQ2048_SKV4096_DH128_f8.vmfb | Bin 0 -> 19476 bytes ...ntion_B1_H40_SQ4096_SKV1024_DH128_f16.vmfb | Bin 0 -> 30100 bytes ...ention_B1_H40_SQ4096_SKV1024_DH128_f8.vmfb | Bin 0 -> 19476 bytes ...ntion_B1_H40_SQ4096_SKV2048_DH128_f16.vmfb | Bin 0 -> 30164 bytes ...ention_B1_H40_SQ4096_SKV2048_DH128_f8.vmfb | Bin 0 -> 19476 bytes ...ntion_B1_H40_SQ4096_SKV4096_DH128_f16.vmfb | Bin 0 -> 30100 bytes ...ention_B1_H40_SQ4096_SKV4096_DH128_f8.vmfb | Bin 0 -> 19412 bytes ...ntion_B1_H64_SQ1024_SKV1024_DH128_f16.vmfb | Bin 0 -> 30100 bytes ...ention_B1_H64_SQ1024_SKV1024_DH128_f8.vmfb | Bin 0 -> 19412 bytes ...ntion_B1_H64_SQ1024_SKV2048_DH128_f16.vmfb | Bin 0 -> 30100 bytes ...ention_B1_H64_SQ1024_SKV2048_DH128_f8.vmfb | Bin 0 -> 19476 bytes ...ntion_B1_H64_SQ1024_SKV4096_DH128_f16.vmfb | Bin 0 -> 30100 bytes ...ention_B1_H64_SQ1024_SKV4096_DH128_f8.vmfb | Bin 0 -> 19476 bytes ...ntion_B1_H64_SQ2048_SKV1024_DH128_f16.vmfb | Bin 0 -> 30164 bytes ...ention_B1_H64_SQ2048_SKV1024_DH128_f8.vmfb | Bin 0 -> 19476 bytes ...ntion_B1_H64_SQ2048_SKV2048_DH128_f16.vmfb | Bin 0 -> 30100 bytes ...ention_B1_H64_SQ2048_SKV2048_DH128_f8.vmfb | Bin 0 -> 19412 bytes ...ntion_B1_H64_SQ2048_SKV4096_DH128_f16.vmfb | Bin 0 -> 30100 bytes ...ention_B1_H64_SQ2048_SKV4096_DH128_f8.vmfb | Bin 0 -> 19476 bytes ...ntion_B1_H64_SQ4096_SKV1024_DH128_f16.vmfb | Bin 0 -> 30100 bytes ...ention_B1_H64_SQ4096_SKV1024_DH128_f8.vmfb | Bin 0 -> 19476 bytes ...ntion_B1_H64_SQ4096_SKV2048_DH128_f16.vmfb | Bin 0 -> 30164 bytes ...ention_B1_H64_SQ4096_SKV2048_DH128_f8.vmfb | Bin 0 -> 19476 bytes ...ntion_B1_H64_SQ4096_SKV4096_DH128_f16.vmfb | Bin 0 -> 30100 bytes ...ention_B1_H64_SQ4096_SKV4096_DH128_f8.vmfb | Bin 0 -> 19412 bytes ...ention_B2_H10_SQ1024_SKV1024_DH64_f16.vmfb | Bin 0 -> 25044 bytes ...tention_B2_H10_SQ1024_SKV1024_DH64_f8.vmfb | Bin 0 -> 18324 bytes ...ention_B2_H10_SQ4096_SKV4096_DH64_f16.vmfb | Bin 0 -> 25044 bytes ...tention_B2_H10_SQ4096_SKV4096_DH64_f8.vmfb | Bin 0 -> 18324 bytes ...ttention_B2_H10_SQ4096_SKV64_DH64_f16.vmfb | Bin 0 -> 20948 bytes ...attention_B2_H10_SQ4096_SKV64_DH64_f8.vmfb | Bin 0 -> 18004 bytes ...ttention_B2_H20_SQ1024_SKV64_DH64_f16.vmfb | Bin 0 -> 20948 bytes ...attention_B2_H20_SQ1024_SKV64_DH64_f8.vmfb | Bin 0 -> 18004 bytes ...ntion_B2_H32_SQ1024_SKV1024_DH128_f16.vmfb | Bin 0 -> 30100 bytes ...ention_B2_H32_SQ1024_SKV1024_DH128_f8.vmfb | Bin 0 -> 19412 bytes ...ntion_B2_H32_SQ1024_SKV2048_DH128_f16.vmfb | Bin 0 -> 30100 bytes ...ention_B2_H32_SQ1024_SKV2048_DH128_f8.vmfb | Bin 0 -> 19476 bytes ...ntion_B2_H32_SQ1024_SKV4096_DH128_f16.vmfb | Bin 0 -> 30100 bytes ...ention_B2_H32_SQ1024_SKV4096_DH128_f8.vmfb | Bin 0 -> 19476 bytes ...ntion_B2_H32_SQ2048_SKV1024_DH128_f16.vmfb | Bin 0 -> 30164 bytes ...ention_B2_H32_SQ2048_SKV1024_DH128_f8.vmfb | Bin 0 -> 19476 bytes ...ntion_B2_H32_SQ2048_SKV2048_DH128_f16.vmfb | Bin 0 -> 30100 bytes ...ention_B2_H32_SQ2048_SKV2048_DH128_f8.vmfb | Bin 0 -> 19412 bytes ...ntion_B2_H32_SQ2048_SKV4096_DH128_f16.vmfb | Bin 0 -> 30100 bytes ...ention_B2_H32_SQ2048_SKV4096_DH128_f8.vmfb | Bin 0 -> 19476 bytes ...ntion_B2_H32_SQ4096_SKV1024_DH128_f16.vmfb | Bin 0 -> 30100 bytes ...ention_B2_H32_SQ4096_SKV1024_DH128_f8.vmfb | Bin 0 -> 19476 bytes ...ntion_B2_H32_SQ4096_SKV2048_DH128_f16.vmfb | Bin 0 -> 30164 bytes ...ention_B2_H32_SQ4096_SKV2048_DH128_f8.vmfb | Bin 0 -> 19476 bytes ...ntion_B2_H32_SQ4096_SKV4096_DH128_f16.vmfb | Bin 0 -> 30100 bytes ...ention_B2_H32_SQ4096_SKV4096_DH128_f8.vmfb | Bin 0 -> 19412 bytes ...ntion_B2_H40_SQ1024_SKV1024_DH128_f16.vmfb | Bin 0 -> 30100 bytes ...ention_B2_H40_SQ1024_SKV1024_DH128_f8.vmfb | Bin 0 -> 19412 bytes ...ntion_B2_H40_SQ1024_SKV2048_DH128_f16.vmfb | Bin 0 -> 30100 bytes ...ention_B2_H40_SQ1024_SKV2048_DH128_f8.vmfb | Bin 0 -> 19476 bytes ...ntion_B2_H40_SQ1024_SKV4096_DH128_f16.vmfb | Bin 0 -> 30100 bytes ...ention_B2_H40_SQ1024_SKV4096_DH128_f8.vmfb | Bin 0 -> 19476 bytes ...ntion_B2_H40_SQ2048_SKV1024_DH128_f16.vmfb | Bin 0 -> 30164 bytes ...ention_B2_H40_SQ2048_SKV1024_DH128_f8.vmfb | Bin 0 -> 19476 bytes ...ntion_B2_H40_SQ2048_SKV2048_DH128_f16.vmfb | Bin 0 -> 30100 bytes ...ention_B2_H40_SQ2048_SKV2048_DH128_f8.vmfb | Bin 0 -> 19412 bytes ...ntion_B2_H40_SQ2048_SKV4096_DH128_f16.vmfb | Bin 0 -> 30100 bytes ...ention_B2_H40_SQ2048_SKV4096_DH128_f8.vmfb | Bin 0 -> 19476 bytes ...ntion_B2_H40_SQ4096_SKV1024_DH128_f16.vmfb | Bin 0 -> 30100 bytes ...ention_B2_H40_SQ4096_SKV1024_DH128_f8.vmfb | Bin 0 -> 19476 bytes ...ntion_B2_H40_SQ4096_SKV2048_DH128_f16.vmfb | Bin 0 -> 30164 bytes ...ention_B2_H40_SQ4096_SKV2048_DH128_f8.vmfb | Bin 0 -> 19476 bytes ...ntion_B2_H40_SQ4096_SKV4096_DH128_f16.vmfb | Bin 0 -> 30100 bytes ...ention_B2_H40_SQ4096_SKV4096_DH128_f8.vmfb | Bin 0 -> 19412 bytes ...ntion_B2_H64_SQ1024_SKV1024_DH128_f16.vmfb | Bin 0 -> 30104 bytes ...ention_B2_H64_SQ1024_SKV1024_DH128_f8.vmfb | Bin 0 -> 19416 bytes ...ntion_B2_H64_SQ1024_SKV2048_DH128_f16.vmfb | Bin 0 -> 30104 bytes ...ention_B2_H64_SQ1024_SKV2048_DH128_f8.vmfb | Bin 0 -> 19480 bytes ...ntion_B2_H64_SQ1024_SKV4096_DH128_f16.vmfb | Bin 0 -> 30104 bytes ...ention_B2_H64_SQ1024_SKV4096_DH128_f8.vmfb | Bin 0 -> 19480 bytes ...ntion_B2_H64_SQ2048_SKV1024_DH128_f16.vmfb | Bin 0 -> 30168 bytes ...ention_B2_H64_SQ2048_SKV1024_DH128_f8.vmfb | Bin 0 -> 19480 bytes ...ntion_B2_H64_SQ2048_SKV2048_DH128_f16.vmfb | Bin 0 -> 30104 bytes ...ention_B2_H64_SQ2048_SKV2048_DH128_f8.vmfb | Bin 0 -> 19416 bytes ...ntion_B2_H64_SQ2048_SKV4096_DH128_f16.vmfb | Bin 0 -> 30104 bytes ...ention_B2_H64_SQ2048_SKV4096_DH128_f8.vmfb | Bin 0 -> 19480 bytes ...ntion_B2_H64_SQ4096_SKV1024_DH128_f16.vmfb | Bin 0 -> 30104 bytes ...ention_B2_H64_SQ4096_SKV1024_DH128_f8.vmfb | Bin 0 -> 19480 bytes ...ntion_B2_H64_SQ4096_SKV2048_DH128_f16.vmfb | Bin 0 -> 30168 bytes ...ention_B2_H64_SQ4096_SKV2048_DH128_f8.vmfb | Bin 0 -> 19480 bytes ...ntion_B2_H64_SQ4096_SKV4096_DH128_f16.vmfb | Bin 0 -> 30104 bytes ...ention_B2_H64_SQ4096_SKV4096_DH128_f8.vmfb | Bin 0 -> 19416 bytes ...ntion_B4_H32_SQ1024_SKV1024_DH128_f16.vmfb | Bin 0 -> 30104 bytes ...ention_B4_H32_SQ1024_SKV1024_DH128_f8.vmfb | Bin 0 -> 19416 bytes ...ntion_B4_H32_SQ1024_SKV2048_DH128_f16.vmfb | Bin 0 -> 30104 bytes ...ention_B4_H32_SQ1024_SKV2048_DH128_f8.vmfb | Bin 0 -> 19480 bytes ...ntion_B4_H32_SQ1024_SKV4096_DH128_f16.vmfb | Bin 0 -> 30104 bytes ...ention_B4_H32_SQ1024_SKV4096_DH128_f8.vmfb | Bin 0 -> 19480 bytes ...ntion_B4_H32_SQ2048_SKV1024_DH128_f16.vmfb | Bin 0 -> 30168 bytes ...ention_B4_H32_SQ2048_SKV1024_DH128_f8.vmfb | Bin 0 -> 19480 bytes ...ntion_B4_H32_SQ2048_SKV2048_DH128_f16.vmfb | Bin 0 -> 30104 bytes ...ention_B4_H32_SQ2048_SKV2048_DH128_f8.vmfb | Bin 0 -> 19416 bytes ...ntion_B4_H32_SQ2048_SKV4096_DH128_f16.vmfb | Bin 0 -> 30104 bytes ...ention_B4_H32_SQ2048_SKV4096_DH128_f8.vmfb | Bin 0 -> 19480 bytes ...ntion_B4_H32_SQ4096_SKV1024_DH128_f16.vmfb | Bin 0 -> 30104 bytes ...ention_B4_H32_SQ4096_SKV1024_DH128_f8.vmfb | Bin 0 -> 19480 bytes ...ntion_B4_H32_SQ4096_SKV2048_DH128_f16.vmfb | Bin 0 -> 30168 bytes ...ention_B4_H32_SQ4096_SKV2048_DH128_f8.vmfb | Bin 0 -> 19480 bytes ...ntion_B4_H32_SQ4096_SKV4096_DH128_f16.vmfb | Bin 0 -> 30104 bytes ...ention_B4_H32_SQ4096_SKV4096_DH128_f8.vmfb | Bin 0 -> 19416 bytes ...ntion_B4_H40_SQ1024_SKV1024_DH128_f16.vmfb | Bin 0 -> 30104 bytes ...ention_B4_H40_SQ1024_SKV1024_DH128_f8.vmfb | Bin 0 -> 19416 bytes ...ntion_B4_H40_SQ1024_SKV2048_DH128_f16.vmfb | Bin 0 -> 30104 bytes ...ention_B4_H40_SQ1024_SKV2048_DH128_f8.vmfb | Bin 0 -> 19480 bytes ...ntion_B4_H40_SQ1024_SKV4096_DH128_f16.vmfb | Bin 0 -> 30104 bytes ...ention_B4_H40_SQ1024_SKV4096_DH128_f8.vmfb | Bin 0 -> 19480 bytes ...ntion_B4_H40_SQ2048_SKV1024_DH128_f16.vmfb | Bin 0 -> 30168 bytes ...ention_B4_H40_SQ2048_SKV1024_DH128_f8.vmfb | Bin 0 -> 19480 bytes ...ntion_B4_H40_SQ2048_SKV2048_DH128_f16.vmfb | Bin 0 -> 30104 bytes ...ention_B4_H40_SQ2048_SKV2048_DH128_f8.vmfb | Bin 0 -> 19416 bytes ...ntion_B4_H40_SQ2048_SKV4096_DH128_f16.vmfb | Bin 0 -> 30104 bytes ...ention_B4_H40_SQ2048_SKV4096_DH128_f8.vmfb | Bin 0 -> 19480 bytes ...ntion_B4_H40_SQ4096_SKV1024_DH128_f16.vmfb | Bin 0 -> 30104 bytes ...ention_B4_H40_SQ4096_SKV1024_DH128_f8.vmfb | Bin 0 -> 19480 bytes ...ntion_B4_H40_SQ4096_SKV2048_DH128_f16.vmfb | Bin 0 -> 30168 bytes ...ention_B4_H40_SQ4096_SKV2048_DH128_f8.vmfb | Bin 0 -> 19480 bytes ...ntion_B4_H40_SQ4096_SKV4096_DH128_f16.vmfb | Bin 0 -> 30104 bytes ...ention_B4_H40_SQ4096_SKV4096_DH128_f8.vmfb | Bin 0 -> 19416 bytes ...ntion_B4_H64_SQ1024_SKV1024_DH128_f16.vmfb | Bin 0 -> 30104 bytes ...ention_B4_H64_SQ1024_SKV1024_DH128_f8.vmfb | Bin 0 -> 19416 bytes ...ntion_B4_H64_SQ1024_SKV2048_DH128_f16.vmfb | Bin 0 -> 30104 bytes ...ention_B4_H64_SQ1024_SKV2048_DH128_f8.vmfb | Bin 0 -> 19480 bytes ...ntion_B4_H64_SQ1024_SKV4096_DH128_f16.vmfb | Bin 0 -> 30104 bytes ...ention_B4_H64_SQ1024_SKV4096_DH128_f8.vmfb | Bin 0 -> 19480 bytes ...ntion_B4_H64_SQ2048_SKV1024_DH128_f16.vmfb | Bin 0 -> 30168 bytes ...ention_B4_H64_SQ2048_SKV1024_DH128_f8.vmfb | Bin 0 -> 19480 bytes ...ntion_B4_H64_SQ2048_SKV2048_DH128_f16.vmfb | Bin 0 -> 30104 bytes ...ention_B4_H64_SQ2048_SKV2048_DH128_f8.vmfb | Bin 0 -> 19416 bytes ...ntion_B4_H64_SQ2048_SKV4096_DH128_f16.vmfb | Bin 0 -> 30104 bytes ...ention_B4_H64_SQ2048_SKV4096_DH128_f8.vmfb | Bin 0 -> 19480 bytes ...ntion_B4_H64_SQ4096_SKV1024_DH128_f16.vmfb | Bin 0 -> 30104 bytes ...ention_B4_H64_SQ4096_SKV1024_DH128_f8.vmfb | Bin 0 -> 19480 bytes ...ntion_B4_H64_SQ4096_SKV2048_DH128_f16.vmfb | Bin 0 -> 30168 bytes ...ention_B4_H64_SQ4096_SKV2048_DH128_f8.vmfb | Bin 0 -> 19480 bytes ...ntion_B4_H64_SQ4096_SKV4096_DH128_f16.vmfb | Bin 0 -> 30104 bytes ...ention_B4_H64_SQ4096_SKV4096_DH128_f8.vmfb | Bin 0 -> 19416 bytes ...mlir => attention_and_matmul_spec_f16.mlir | 0 attention_and_matmul_spec_f8.mlir | 935 ++++++++++++ attentionbench/attention_utils.py | 48 + attentionbench/benchmark_torch_attention.py | 77 + attentionbench/benchmark_triton_attention.py | 1307 +++++++++++++++++ {gemmbench => attentionbench}/shark_fa2.py | 61 +- gemmbench/__init__.py | 1 + gemmbench/bench_utils.py | 36 + gemmbench/benchmark_torch_attention.py | 89 -- gemmbench/cli.py | 221 ++- gemmbench/csv_to_hdf.py | 42 + gemmbench/problems.py | 69 +- results/torch_llama_sdxl_attention.csv | 49 + results/triton_llama_sdxl_attention.csv | 49 + src/benchmark/driver.cpp | 151 -- src/benchmark/gemm-bench.cpp | 18 +- src/benchmark/gemm-bench.hpp | 3 +- src/benchmark/main.cpp | 15 +- src/benchmark/run-hipblaslt.cpp | 1 - src/benchmark/run_flashattention.cpp | 15 +- src/benchmark/run_iree.cpp | 1 - 534 files changed, 6508 insertions(+), 448 deletions(-) create mode 100644 attention/mlir/attention_B1_H32_SQ1024_SKV1024_DH128_f16.mlir create mode 100644 attention/mlir/attention_B1_H32_SQ1024_SKV1024_DH128_f8.mlir create mode 100644 attention/mlir/attention_B1_H32_SQ1024_SKV1024_DH128_fp16.mlir create mode 100644 attention/mlir/attention_B1_H32_SQ1024_SKV1024_DH128_fp8.mlir create mode 100644 attention/mlir/attention_B1_H32_SQ1024_SKV2048_DH128_f16.mlir create mode 100644 attention/mlir/attention_B1_H32_SQ1024_SKV2048_DH128_f8.mlir create mode 100644 attention/mlir/attention_B1_H32_SQ1024_SKV2048_DH128_fp16.mlir create mode 100644 attention/mlir/attention_B1_H32_SQ1024_SKV2048_DH128_fp8.mlir create mode 100644 attention/mlir/attention_B1_H32_SQ1024_SKV4096_DH128_f16.mlir create mode 100644 attention/mlir/attention_B1_H32_SQ1024_SKV4096_DH128_f8.mlir create mode 100644 attention/mlir/attention_B1_H32_SQ1024_SKV4096_DH128_fp16.mlir create mode 100644 attention/mlir/attention_B1_H32_SQ1024_SKV4096_DH128_fp8.mlir create mode 100644 attention/mlir/attention_B1_H32_SQ2048_SKV1024_DH128_f16.mlir create mode 100644 attention/mlir/attention_B1_H32_SQ2048_SKV1024_DH128_f8.mlir create mode 100644 attention/mlir/attention_B1_H32_SQ2048_SKV1024_DH128_fp16.mlir create mode 100644 attention/mlir/attention_B1_H32_SQ2048_SKV1024_DH128_fp8.mlir create mode 100644 attention/mlir/attention_B1_H32_SQ2048_SKV2048_DH128_f16.mlir create mode 100644 attention/mlir/attention_B1_H32_SQ2048_SKV2048_DH128_f8.mlir create mode 100644 attention/mlir/attention_B1_H32_SQ2048_SKV2048_DH128_fp16.mlir create mode 100644 attention/mlir/attention_B1_H32_SQ2048_SKV2048_DH128_fp8.mlir create mode 100644 attention/mlir/attention_B1_H32_SQ2048_SKV4096_DH128_f16.mlir create mode 100644 attention/mlir/attention_B1_H32_SQ2048_SKV4096_DH128_f8.mlir create mode 100644 attention/mlir/attention_B1_H32_SQ2048_SKV4096_DH128_fp16.mlir create mode 100644 attention/mlir/attention_B1_H32_SQ2048_SKV4096_DH128_fp8.mlir create mode 100644 attention/mlir/attention_B1_H32_SQ4096_SKV1024_DH128_f16.mlir create mode 100644 attention/mlir/attention_B1_H32_SQ4096_SKV1024_DH128_f8.mlir create mode 100644 attention/mlir/attention_B1_H32_SQ4096_SKV1024_DH128_fp16.mlir create mode 100644 attention/mlir/attention_B1_H32_SQ4096_SKV1024_DH128_fp8.mlir create mode 100644 attention/mlir/attention_B1_H32_SQ4096_SKV2048_DH128_f16.mlir create mode 100644 attention/mlir/attention_B1_H32_SQ4096_SKV2048_DH128_f8.mlir create mode 100644 attention/mlir/attention_B1_H32_SQ4096_SKV2048_DH128_fp16.mlir create mode 100644 attention/mlir/attention_B1_H32_SQ4096_SKV2048_DH128_fp8.mlir create mode 100644 attention/mlir/attention_B1_H32_SQ4096_SKV4096_DH128_f16.mlir create mode 100644 attention/mlir/attention_B1_H32_SQ4096_SKV4096_DH128_f8.mlir create mode 100644 attention/mlir/attention_B1_H32_SQ4096_SKV4096_DH128_fp16.mlir create mode 100644 attention/mlir/attention_B1_H32_SQ4096_SKV4096_DH128_fp8.mlir create mode 100644 attention/mlir/attention_B1_H40_SQ1024_SKV1024_DH128_f16.mlir create mode 100644 attention/mlir/attention_B1_H40_SQ1024_SKV1024_DH128_f8.mlir create mode 100644 attention/mlir/attention_B1_H40_SQ1024_SKV1024_DH128_fp16.mlir create mode 100644 attention/mlir/attention_B1_H40_SQ1024_SKV1024_DH128_fp8.mlir create mode 100644 attention/mlir/attention_B1_H40_SQ1024_SKV2048_DH128_f16.mlir create mode 100644 attention/mlir/attention_B1_H40_SQ1024_SKV2048_DH128_f8.mlir create mode 100644 attention/mlir/attention_B1_H40_SQ1024_SKV2048_DH128_fp16.mlir create mode 100644 attention/mlir/attention_B1_H40_SQ1024_SKV2048_DH128_fp8.mlir create mode 100644 attention/mlir/attention_B1_H40_SQ1024_SKV4096_DH128_f16.mlir create mode 100644 attention/mlir/attention_B1_H40_SQ1024_SKV4096_DH128_f8.mlir create mode 100644 attention/mlir/attention_B1_H40_SQ1024_SKV4096_DH128_fp16.mlir create mode 100644 attention/mlir/attention_B1_H40_SQ1024_SKV4096_DH128_fp8.mlir create mode 100644 attention/mlir/attention_B1_H40_SQ2048_SKV1024_DH128_f16.mlir create mode 100644 attention/mlir/attention_B1_H40_SQ2048_SKV1024_DH128_f8.mlir create mode 100644 attention/mlir/attention_B1_H40_SQ2048_SKV1024_DH128_fp16.mlir create mode 100644 attention/mlir/attention_B1_H40_SQ2048_SKV1024_DH128_fp8.mlir create mode 100644 attention/mlir/attention_B1_H40_SQ2048_SKV2048_DH128_f16.mlir create mode 100644 attention/mlir/attention_B1_H40_SQ2048_SKV2048_DH128_f8.mlir create mode 100644 attention/mlir/attention_B1_H40_SQ2048_SKV2048_DH128_fp16.mlir create mode 100644 attention/mlir/attention_B1_H40_SQ2048_SKV2048_DH128_fp8.mlir create mode 100644 attention/mlir/attention_B1_H40_SQ2048_SKV4096_DH128_f16.mlir create mode 100644 attention/mlir/attention_B1_H40_SQ2048_SKV4096_DH128_f8.mlir create mode 100644 attention/mlir/attention_B1_H40_SQ2048_SKV4096_DH128_fp16.mlir create mode 100644 attention/mlir/attention_B1_H40_SQ2048_SKV4096_DH128_fp8.mlir create mode 100644 attention/mlir/attention_B1_H40_SQ4096_SKV1024_DH128_f16.mlir create mode 100644 attention/mlir/attention_B1_H40_SQ4096_SKV1024_DH128_f8.mlir create mode 100644 attention/mlir/attention_B1_H40_SQ4096_SKV1024_DH128_fp16.mlir create mode 100644 attention/mlir/attention_B1_H40_SQ4096_SKV1024_DH128_fp8.mlir create mode 100644 attention/mlir/attention_B1_H40_SQ4096_SKV2048_DH128_f16.mlir create mode 100644 attention/mlir/attention_B1_H40_SQ4096_SKV2048_DH128_f8.mlir create mode 100644 attention/mlir/attention_B1_H40_SQ4096_SKV2048_DH128_fp16.mlir create mode 100644 attention/mlir/attention_B1_H40_SQ4096_SKV2048_DH128_fp8.mlir create mode 100644 attention/mlir/attention_B1_H40_SQ4096_SKV4096_DH128_f16.mlir create mode 100644 attention/mlir/attention_B1_H40_SQ4096_SKV4096_DH128_f8.mlir create mode 100644 attention/mlir/attention_B1_H40_SQ4096_SKV4096_DH128_fp16.mlir create mode 100644 attention/mlir/attention_B1_H40_SQ4096_SKV4096_DH128_fp8.mlir create mode 100644 attention/mlir/attention_B1_H64_SQ1024_SKV1024_DH128_f16.mlir create mode 100644 attention/mlir/attention_B1_H64_SQ1024_SKV1024_DH128_f8.mlir create mode 100644 attention/mlir/attention_B1_H64_SQ1024_SKV1024_DH128_fp16.mlir create mode 100644 attention/mlir/attention_B1_H64_SQ1024_SKV1024_DH128_fp8.mlir create mode 100644 attention/mlir/attention_B1_H64_SQ1024_SKV2048_DH128_f16.mlir create mode 100644 attention/mlir/attention_B1_H64_SQ1024_SKV2048_DH128_f8.mlir create mode 100644 attention/mlir/attention_B1_H64_SQ1024_SKV2048_DH128_fp16.mlir create mode 100644 attention/mlir/attention_B1_H64_SQ1024_SKV2048_DH128_fp8.mlir create mode 100644 attention/mlir/attention_B1_H64_SQ1024_SKV4096_DH128_f16.mlir create mode 100644 attention/mlir/attention_B1_H64_SQ1024_SKV4096_DH128_f8.mlir create mode 100644 attention/mlir/attention_B1_H64_SQ1024_SKV4096_DH128_fp16.mlir create mode 100644 attention/mlir/attention_B1_H64_SQ1024_SKV4096_DH128_fp8.mlir create mode 100644 attention/mlir/attention_B1_H64_SQ2048_SKV1024_DH128_f16.mlir create mode 100644 attention/mlir/attention_B1_H64_SQ2048_SKV1024_DH128_f8.mlir create mode 100644 attention/mlir/attention_B1_H64_SQ2048_SKV1024_DH128_fp16.mlir create mode 100644 attention/mlir/attention_B1_H64_SQ2048_SKV1024_DH128_fp8.mlir create mode 100644 attention/mlir/attention_B1_H64_SQ2048_SKV2048_DH128_f16.mlir create mode 100644 attention/mlir/attention_B1_H64_SQ2048_SKV2048_DH128_f8.mlir create mode 100644 attention/mlir/attention_B1_H64_SQ2048_SKV2048_DH128_fp16.mlir create mode 100644 attention/mlir/attention_B1_H64_SQ2048_SKV2048_DH128_fp8.mlir create mode 100644 attention/mlir/attention_B1_H64_SQ2048_SKV4096_DH128_f16.mlir create mode 100644 attention/mlir/attention_B1_H64_SQ2048_SKV4096_DH128_f8.mlir create mode 100644 attention/mlir/attention_B1_H64_SQ2048_SKV4096_DH128_fp16.mlir create mode 100644 attention/mlir/attention_B1_H64_SQ2048_SKV4096_DH128_fp8.mlir create mode 100644 attention/mlir/attention_B1_H64_SQ4096_SKV1024_DH128_f16.mlir create mode 100644 attention/mlir/attention_B1_H64_SQ4096_SKV1024_DH128_f8.mlir create mode 100644 attention/mlir/attention_B1_H64_SQ4096_SKV1024_DH128_fp16.mlir create mode 100644 attention/mlir/attention_B1_H64_SQ4096_SKV1024_DH128_fp8.mlir create mode 100644 attention/mlir/attention_B1_H64_SQ4096_SKV2048_DH128_f16.mlir create mode 100644 attention/mlir/attention_B1_H64_SQ4096_SKV2048_DH128_f8.mlir create mode 100644 attention/mlir/attention_B1_H64_SQ4096_SKV2048_DH128_fp16.mlir create mode 100644 attention/mlir/attention_B1_H64_SQ4096_SKV2048_DH128_fp8.mlir create mode 100644 attention/mlir/attention_B1_H64_SQ4096_SKV4096_DH128_f16.mlir create mode 100644 attention/mlir/attention_B1_H64_SQ4096_SKV4096_DH128_f8.mlir create mode 100644 attention/mlir/attention_B1_H64_SQ4096_SKV4096_DH128_fp16.mlir create mode 100644 attention/mlir/attention_B1_H64_SQ4096_SKV4096_DH128_fp8.mlir create mode 100644 attention/mlir/attention_B2_H10_SQ1024_SKV1024_DH64_f16.mlir create mode 100644 attention/mlir/attention_B2_H10_SQ1024_SKV1024_DH64_f8.mlir create mode 100644 attention/mlir/attention_B2_H10_SQ1024_SKV1024_DH64_fp16.mlir create mode 100644 attention/mlir/attention_B2_H10_SQ1024_SKV1024_DH64_fp8.mlir create mode 100644 attention/mlir/attention_B2_H10_SQ4096_SKV4096_DH64_f16.mlir create mode 100644 attention/mlir/attention_B2_H10_SQ4096_SKV4096_DH64_f8.mlir create mode 100644 attention/mlir/attention_B2_H10_SQ4096_SKV4096_DH64_fp16.mlir create mode 100644 attention/mlir/attention_B2_H10_SQ4096_SKV4096_DH64_fp8.mlir create mode 100644 attention/mlir/attention_B2_H10_SQ4096_SKV64_DH64_f16.mlir create mode 100644 attention/mlir/attention_B2_H10_SQ4096_SKV64_DH64_f8.mlir create mode 100644 attention/mlir/attention_B2_H10_SQ4096_SKV64_DH64_fp16.mlir create mode 100644 attention/mlir/attention_B2_H10_SQ4096_SKV64_DH64_fp8.mlir create mode 100644 attention/mlir/attention_B2_H20_SQ1024_SKV64_DH64_f16.mlir create mode 100644 attention/mlir/attention_B2_H20_SQ1024_SKV64_DH64_f8.mlir create mode 100644 attention/mlir/attention_B2_H20_SQ1024_SKV64_DH64_fp16.mlir create mode 100644 attention/mlir/attention_B2_H20_SQ1024_SKV64_DH64_fp8.mlir create mode 100644 attention/mlir/attention_B2_H32_SQ1024_SKV1024_DH128_f16.mlir create mode 100644 attention/mlir/attention_B2_H32_SQ1024_SKV1024_DH128_f8.mlir create mode 100644 attention/mlir/attention_B2_H32_SQ1024_SKV1024_DH128_fp16.mlir create mode 100644 attention/mlir/attention_B2_H32_SQ1024_SKV1024_DH128_fp8.mlir create mode 100644 attention/mlir/attention_B2_H32_SQ1024_SKV2048_DH128_f16.mlir create mode 100644 attention/mlir/attention_B2_H32_SQ1024_SKV2048_DH128_f8.mlir create mode 100644 attention/mlir/attention_B2_H32_SQ1024_SKV2048_DH128_fp16.mlir create mode 100644 attention/mlir/attention_B2_H32_SQ1024_SKV2048_DH128_fp8.mlir create mode 100644 attention/mlir/attention_B2_H32_SQ1024_SKV4096_DH128_f16.mlir create mode 100644 attention/mlir/attention_B2_H32_SQ1024_SKV4096_DH128_f8.mlir create mode 100644 attention/mlir/attention_B2_H32_SQ1024_SKV4096_DH128_fp16.mlir create mode 100644 attention/mlir/attention_B2_H32_SQ1024_SKV4096_DH128_fp8.mlir create mode 100644 attention/mlir/attention_B2_H32_SQ2048_SKV1024_DH128_f16.mlir create mode 100644 attention/mlir/attention_B2_H32_SQ2048_SKV1024_DH128_f8.mlir create mode 100644 attention/mlir/attention_B2_H32_SQ2048_SKV1024_DH128_fp16.mlir create mode 100644 attention/mlir/attention_B2_H32_SQ2048_SKV1024_DH128_fp8.mlir create mode 100644 attention/mlir/attention_B2_H32_SQ2048_SKV2048_DH128_f16.mlir create mode 100644 attention/mlir/attention_B2_H32_SQ2048_SKV2048_DH128_f8.mlir create mode 100644 attention/mlir/attention_B2_H32_SQ2048_SKV2048_DH128_fp16.mlir create mode 100644 attention/mlir/attention_B2_H32_SQ2048_SKV2048_DH128_fp8.mlir create mode 100644 attention/mlir/attention_B2_H32_SQ2048_SKV4096_DH128_f16.mlir create mode 100644 attention/mlir/attention_B2_H32_SQ2048_SKV4096_DH128_f8.mlir create mode 100644 attention/mlir/attention_B2_H32_SQ2048_SKV4096_DH128_fp16.mlir create mode 100644 attention/mlir/attention_B2_H32_SQ2048_SKV4096_DH128_fp8.mlir create mode 100644 attention/mlir/attention_B2_H32_SQ4096_SKV1024_DH128_f16.mlir create mode 100644 attention/mlir/attention_B2_H32_SQ4096_SKV1024_DH128_f8.mlir create mode 100644 attention/mlir/attention_B2_H32_SQ4096_SKV1024_DH128_fp16.mlir create mode 100644 attention/mlir/attention_B2_H32_SQ4096_SKV1024_DH128_fp8.mlir create mode 100644 attention/mlir/attention_B2_H32_SQ4096_SKV2048_DH128_f16.mlir create mode 100644 attention/mlir/attention_B2_H32_SQ4096_SKV2048_DH128_f8.mlir create mode 100644 attention/mlir/attention_B2_H32_SQ4096_SKV2048_DH128_fp16.mlir create mode 100644 attention/mlir/attention_B2_H32_SQ4096_SKV2048_DH128_fp8.mlir create mode 100644 attention/mlir/attention_B2_H32_SQ4096_SKV4096_DH128_f16.mlir create mode 100644 attention/mlir/attention_B2_H32_SQ4096_SKV4096_DH128_f8.mlir create mode 100644 attention/mlir/attention_B2_H32_SQ4096_SKV4096_DH128_fp16.mlir create mode 100644 attention/mlir/attention_B2_H32_SQ4096_SKV4096_DH128_fp8.mlir create mode 100644 attention/mlir/attention_B2_H40_SQ1024_SKV1024_DH128_f16.mlir create mode 100644 attention/mlir/attention_B2_H40_SQ1024_SKV1024_DH128_f8.mlir create mode 100644 attention/mlir/attention_B2_H40_SQ1024_SKV1024_DH128_fp16.mlir create mode 100644 attention/mlir/attention_B2_H40_SQ1024_SKV1024_DH128_fp8.mlir create mode 100644 attention/mlir/attention_B2_H40_SQ1024_SKV2048_DH128_f16.mlir create mode 100644 attention/mlir/attention_B2_H40_SQ1024_SKV2048_DH128_f8.mlir create mode 100644 attention/mlir/attention_B2_H40_SQ1024_SKV2048_DH128_fp16.mlir create mode 100644 attention/mlir/attention_B2_H40_SQ1024_SKV2048_DH128_fp8.mlir create mode 100644 attention/mlir/attention_B2_H40_SQ1024_SKV4096_DH128_f16.mlir create mode 100644 attention/mlir/attention_B2_H40_SQ1024_SKV4096_DH128_f8.mlir create mode 100644 attention/mlir/attention_B2_H40_SQ1024_SKV4096_DH128_fp16.mlir create mode 100644 attention/mlir/attention_B2_H40_SQ1024_SKV4096_DH128_fp8.mlir create mode 100644 attention/mlir/attention_B2_H40_SQ2048_SKV1024_DH128_f16.mlir create mode 100644 attention/mlir/attention_B2_H40_SQ2048_SKV1024_DH128_f8.mlir create mode 100644 attention/mlir/attention_B2_H40_SQ2048_SKV1024_DH128_fp16.mlir create mode 100644 attention/mlir/attention_B2_H40_SQ2048_SKV1024_DH128_fp8.mlir create mode 100644 attention/mlir/attention_B2_H40_SQ2048_SKV2048_DH128_f16.mlir create mode 100644 attention/mlir/attention_B2_H40_SQ2048_SKV2048_DH128_f8.mlir create mode 100644 attention/mlir/attention_B2_H40_SQ2048_SKV2048_DH128_fp16.mlir create mode 100644 attention/mlir/attention_B2_H40_SQ2048_SKV2048_DH128_fp8.mlir create mode 100644 attention/mlir/attention_B2_H40_SQ2048_SKV4096_DH128_f16.mlir create mode 100644 attention/mlir/attention_B2_H40_SQ2048_SKV4096_DH128_f8.mlir create mode 100644 attention/mlir/attention_B2_H40_SQ2048_SKV4096_DH128_fp16.mlir create mode 100644 attention/mlir/attention_B2_H40_SQ2048_SKV4096_DH128_fp8.mlir create mode 100644 attention/mlir/attention_B2_H40_SQ4096_SKV1024_DH128_f16.mlir create mode 100644 attention/mlir/attention_B2_H40_SQ4096_SKV1024_DH128_f8.mlir create mode 100644 attention/mlir/attention_B2_H40_SQ4096_SKV1024_DH128_fp16.mlir create mode 100644 attention/mlir/attention_B2_H40_SQ4096_SKV1024_DH128_fp8.mlir create mode 100644 attention/mlir/attention_B2_H40_SQ4096_SKV2048_DH128_f16.mlir create mode 100644 attention/mlir/attention_B2_H40_SQ4096_SKV2048_DH128_f8.mlir create mode 100644 attention/mlir/attention_B2_H40_SQ4096_SKV2048_DH128_fp16.mlir create mode 100644 attention/mlir/attention_B2_H40_SQ4096_SKV2048_DH128_fp8.mlir create mode 100644 attention/mlir/attention_B2_H40_SQ4096_SKV4096_DH128_f16.mlir create mode 100644 attention/mlir/attention_B2_H40_SQ4096_SKV4096_DH128_f8.mlir create mode 100644 attention/mlir/attention_B2_H40_SQ4096_SKV4096_DH128_fp16.mlir create mode 100644 attention/mlir/attention_B2_H40_SQ4096_SKV4096_DH128_fp8.mlir create mode 100644 attention/mlir/attention_B2_H64_SQ1024_SKV1024_DH128_f16.mlir create mode 100644 attention/mlir/attention_B2_H64_SQ1024_SKV1024_DH128_f8.mlir create mode 100644 attention/mlir/attention_B2_H64_SQ1024_SKV1024_DH128_fp16.mlir create mode 100644 attention/mlir/attention_B2_H64_SQ1024_SKV1024_DH128_fp8.mlir create mode 100644 attention/mlir/attention_B2_H64_SQ1024_SKV2048_DH128_f16.mlir create mode 100644 attention/mlir/attention_B2_H64_SQ1024_SKV2048_DH128_f8.mlir create mode 100644 attention/mlir/attention_B2_H64_SQ1024_SKV2048_DH128_fp16.mlir create mode 100644 attention/mlir/attention_B2_H64_SQ1024_SKV2048_DH128_fp8.mlir create mode 100644 attention/mlir/attention_B2_H64_SQ1024_SKV4096_DH128_f16.mlir create mode 100644 attention/mlir/attention_B2_H64_SQ1024_SKV4096_DH128_f8.mlir create mode 100644 attention/mlir/attention_B2_H64_SQ1024_SKV4096_DH128_fp16.mlir create mode 100644 attention/mlir/attention_B2_H64_SQ1024_SKV4096_DH128_fp8.mlir create mode 100644 attention/mlir/attention_B2_H64_SQ2048_SKV1024_DH128_f16.mlir create mode 100644 attention/mlir/attention_B2_H64_SQ2048_SKV1024_DH128_f8.mlir create mode 100644 attention/mlir/attention_B2_H64_SQ2048_SKV1024_DH128_fp16.mlir create mode 100644 attention/mlir/attention_B2_H64_SQ2048_SKV1024_DH128_fp8.mlir create mode 100644 attention/mlir/attention_B2_H64_SQ2048_SKV2048_DH128_f16.mlir create mode 100644 attention/mlir/attention_B2_H64_SQ2048_SKV2048_DH128_f8.mlir create mode 100644 attention/mlir/attention_B2_H64_SQ2048_SKV2048_DH128_fp16.mlir create mode 100644 attention/mlir/attention_B2_H64_SQ2048_SKV2048_DH128_fp8.mlir create mode 100644 attention/mlir/attention_B2_H64_SQ2048_SKV4096_DH128_f16.mlir create mode 100644 attention/mlir/attention_B2_H64_SQ2048_SKV4096_DH128_f8.mlir create mode 100644 attention/mlir/attention_B2_H64_SQ2048_SKV4096_DH128_fp16.mlir create mode 100644 attention/mlir/attention_B2_H64_SQ2048_SKV4096_DH128_fp8.mlir create mode 100644 attention/mlir/attention_B2_H64_SQ4096_SKV1024_DH128_f16.mlir create mode 100644 attention/mlir/attention_B2_H64_SQ4096_SKV1024_DH128_f8.mlir create mode 100644 attention/mlir/attention_B2_H64_SQ4096_SKV1024_DH128_fp16.mlir create mode 100644 attention/mlir/attention_B2_H64_SQ4096_SKV1024_DH128_fp8.mlir create mode 100644 attention/mlir/attention_B2_H64_SQ4096_SKV2048_DH128_f16.mlir create mode 100644 attention/mlir/attention_B2_H64_SQ4096_SKV2048_DH128_f8.mlir create mode 100644 attention/mlir/attention_B2_H64_SQ4096_SKV2048_DH128_fp16.mlir create mode 100644 attention/mlir/attention_B2_H64_SQ4096_SKV2048_DH128_fp8.mlir create mode 100644 attention/mlir/attention_B2_H64_SQ4096_SKV4096_DH128_f16.mlir create mode 100644 attention/mlir/attention_B2_H64_SQ4096_SKV4096_DH128_f8.mlir create mode 100644 attention/mlir/attention_B2_H64_SQ4096_SKV4096_DH128_fp16.mlir create mode 100644 attention/mlir/attention_B2_H64_SQ4096_SKV4096_DH128_fp8.mlir create mode 100644 attention/mlir/attention_B4_H32_SQ1024_SKV1024_DH128_f16.mlir create mode 100644 attention/mlir/attention_B4_H32_SQ1024_SKV1024_DH128_f8.mlir create mode 100644 attention/mlir/attention_B4_H32_SQ1024_SKV1024_DH128_fp16.mlir create mode 100644 attention/mlir/attention_B4_H32_SQ1024_SKV1024_DH128_fp8.mlir create mode 100644 attention/mlir/attention_B4_H32_SQ1024_SKV2048_DH128_f16.mlir create mode 100644 attention/mlir/attention_B4_H32_SQ1024_SKV2048_DH128_f8.mlir create mode 100644 attention/mlir/attention_B4_H32_SQ1024_SKV2048_DH128_fp16.mlir create mode 100644 attention/mlir/attention_B4_H32_SQ1024_SKV2048_DH128_fp8.mlir create mode 100644 attention/mlir/attention_B4_H32_SQ1024_SKV4096_DH128_f16.mlir create mode 100644 attention/mlir/attention_B4_H32_SQ1024_SKV4096_DH128_f8.mlir create mode 100644 attention/mlir/attention_B4_H32_SQ1024_SKV4096_DH128_fp16.mlir create mode 100644 attention/mlir/attention_B4_H32_SQ1024_SKV4096_DH128_fp8.mlir create mode 100644 attention/mlir/attention_B4_H32_SQ2048_SKV1024_DH128_f16.mlir create mode 100644 attention/mlir/attention_B4_H32_SQ2048_SKV1024_DH128_f8.mlir create mode 100644 attention/mlir/attention_B4_H32_SQ2048_SKV1024_DH128_fp16.mlir create mode 100644 attention/mlir/attention_B4_H32_SQ2048_SKV1024_DH128_fp8.mlir create mode 100644 attention/mlir/attention_B4_H32_SQ2048_SKV2048_DH128_f16.mlir create mode 100644 attention/mlir/attention_B4_H32_SQ2048_SKV2048_DH128_f8.mlir create mode 100644 attention/mlir/attention_B4_H32_SQ2048_SKV2048_DH128_fp16.mlir create mode 100644 attention/mlir/attention_B4_H32_SQ2048_SKV2048_DH128_fp8.mlir create mode 100644 attention/mlir/attention_B4_H32_SQ2048_SKV4096_DH128_f16.mlir create mode 100644 attention/mlir/attention_B4_H32_SQ2048_SKV4096_DH128_f8.mlir create mode 100644 attention/mlir/attention_B4_H32_SQ2048_SKV4096_DH128_fp16.mlir create mode 100644 attention/mlir/attention_B4_H32_SQ2048_SKV4096_DH128_fp8.mlir create mode 100644 attention/mlir/attention_B4_H32_SQ4096_SKV1024_DH128_f16.mlir create mode 100644 attention/mlir/attention_B4_H32_SQ4096_SKV1024_DH128_f8.mlir create mode 100644 attention/mlir/attention_B4_H32_SQ4096_SKV1024_DH128_fp16.mlir create mode 100644 attention/mlir/attention_B4_H32_SQ4096_SKV1024_DH128_fp8.mlir create mode 100644 attention/mlir/attention_B4_H32_SQ4096_SKV2048_DH128_f16.mlir create mode 100644 attention/mlir/attention_B4_H32_SQ4096_SKV2048_DH128_f8.mlir create mode 100644 attention/mlir/attention_B4_H32_SQ4096_SKV2048_DH128_fp16.mlir create mode 100644 attention/mlir/attention_B4_H32_SQ4096_SKV2048_DH128_fp8.mlir create mode 100644 attention/mlir/attention_B4_H32_SQ4096_SKV4096_DH128_f16.mlir create mode 100644 attention/mlir/attention_B4_H32_SQ4096_SKV4096_DH128_f8.mlir create mode 100644 attention/mlir/attention_B4_H32_SQ4096_SKV4096_DH128_fp16.mlir create mode 100644 attention/mlir/attention_B4_H32_SQ4096_SKV4096_DH128_fp8.mlir create mode 100644 attention/mlir/attention_B4_H40_SQ1024_SKV1024_DH128_f16.mlir create mode 100644 attention/mlir/attention_B4_H40_SQ1024_SKV1024_DH128_f8.mlir create mode 100644 attention/mlir/attention_B4_H40_SQ1024_SKV1024_DH128_fp16.mlir create mode 100644 attention/mlir/attention_B4_H40_SQ1024_SKV1024_DH128_fp8.mlir create mode 100644 attention/mlir/attention_B4_H40_SQ1024_SKV2048_DH128_f16.mlir create mode 100644 attention/mlir/attention_B4_H40_SQ1024_SKV2048_DH128_f8.mlir create mode 100644 attention/mlir/attention_B4_H40_SQ1024_SKV2048_DH128_fp16.mlir create mode 100644 attention/mlir/attention_B4_H40_SQ1024_SKV2048_DH128_fp8.mlir create mode 100644 attention/mlir/attention_B4_H40_SQ1024_SKV4096_DH128_f16.mlir create mode 100644 attention/mlir/attention_B4_H40_SQ1024_SKV4096_DH128_f8.mlir create mode 100644 attention/mlir/attention_B4_H40_SQ1024_SKV4096_DH128_fp16.mlir create mode 100644 attention/mlir/attention_B4_H40_SQ1024_SKV4096_DH128_fp8.mlir create mode 100644 attention/mlir/attention_B4_H40_SQ2048_SKV1024_DH128_f16.mlir create mode 100644 attention/mlir/attention_B4_H40_SQ2048_SKV1024_DH128_f8.mlir create mode 100644 attention/mlir/attention_B4_H40_SQ2048_SKV1024_DH128_fp16.mlir create mode 100644 attention/mlir/attention_B4_H40_SQ2048_SKV1024_DH128_fp8.mlir create mode 100644 attention/mlir/attention_B4_H40_SQ2048_SKV2048_DH128_f16.mlir create mode 100644 attention/mlir/attention_B4_H40_SQ2048_SKV2048_DH128_f8.mlir create mode 100644 attention/mlir/attention_B4_H40_SQ2048_SKV2048_DH128_fp16.mlir create mode 100644 attention/mlir/attention_B4_H40_SQ2048_SKV2048_DH128_fp8.mlir create mode 100644 attention/mlir/attention_B4_H40_SQ2048_SKV4096_DH128_f16.mlir create mode 100644 attention/mlir/attention_B4_H40_SQ2048_SKV4096_DH128_f8.mlir create mode 100644 attention/mlir/attention_B4_H40_SQ2048_SKV4096_DH128_fp16.mlir create mode 100644 attention/mlir/attention_B4_H40_SQ2048_SKV4096_DH128_fp8.mlir create mode 100644 attention/mlir/attention_B4_H40_SQ4096_SKV1024_DH128_f16.mlir create mode 100644 attention/mlir/attention_B4_H40_SQ4096_SKV1024_DH128_f8.mlir create mode 100644 attention/mlir/attention_B4_H40_SQ4096_SKV1024_DH128_fp16.mlir create mode 100644 attention/mlir/attention_B4_H40_SQ4096_SKV1024_DH128_fp8.mlir create mode 100644 attention/mlir/attention_B4_H40_SQ4096_SKV2048_DH128_f16.mlir create mode 100644 attention/mlir/attention_B4_H40_SQ4096_SKV2048_DH128_f8.mlir create mode 100644 attention/mlir/attention_B4_H40_SQ4096_SKV2048_DH128_fp16.mlir create mode 100644 attention/mlir/attention_B4_H40_SQ4096_SKV2048_DH128_fp8.mlir create mode 100644 attention/mlir/attention_B4_H40_SQ4096_SKV4096_DH128_f16.mlir create mode 100644 attention/mlir/attention_B4_H40_SQ4096_SKV4096_DH128_f8.mlir create mode 100644 attention/mlir/attention_B4_H40_SQ4096_SKV4096_DH128_fp16.mlir create mode 100644 attention/mlir/attention_B4_H40_SQ4096_SKV4096_DH128_fp8.mlir create mode 100644 attention/mlir/attention_B4_H64_SQ1024_SKV1024_DH128_f16.mlir create mode 100644 attention/mlir/attention_B4_H64_SQ1024_SKV1024_DH128_f8.mlir create mode 100644 attention/mlir/attention_B4_H64_SQ1024_SKV1024_DH128_fp16.mlir create mode 100644 attention/mlir/attention_B4_H64_SQ1024_SKV1024_DH128_fp8.mlir create mode 100644 attention/mlir/attention_B4_H64_SQ1024_SKV2048_DH128_f16.mlir create mode 100644 attention/mlir/attention_B4_H64_SQ1024_SKV2048_DH128_f8.mlir create mode 100644 attention/mlir/attention_B4_H64_SQ1024_SKV2048_DH128_fp16.mlir create mode 100644 attention/mlir/attention_B4_H64_SQ1024_SKV2048_DH128_fp8.mlir create mode 100644 attention/mlir/attention_B4_H64_SQ1024_SKV4096_DH128_f16.mlir create mode 100644 attention/mlir/attention_B4_H64_SQ1024_SKV4096_DH128_f8.mlir create mode 100644 attention/mlir/attention_B4_H64_SQ1024_SKV4096_DH128_fp16.mlir create mode 100644 attention/mlir/attention_B4_H64_SQ1024_SKV4096_DH128_fp8.mlir create mode 100644 attention/mlir/attention_B4_H64_SQ2048_SKV1024_DH128_f16.mlir create mode 100644 attention/mlir/attention_B4_H64_SQ2048_SKV1024_DH128_f8.mlir create mode 100644 attention/mlir/attention_B4_H64_SQ2048_SKV1024_DH128_fp16.mlir create mode 100644 attention/mlir/attention_B4_H64_SQ2048_SKV1024_DH128_fp8.mlir create mode 100644 attention/mlir/attention_B4_H64_SQ2048_SKV2048_DH128_f16.mlir create mode 100644 attention/mlir/attention_B4_H64_SQ2048_SKV2048_DH128_f8.mlir create mode 100644 attention/mlir/attention_B4_H64_SQ2048_SKV2048_DH128_fp16.mlir create mode 100644 attention/mlir/attention_B4_H64_SQ2048_SKV2048_DH128_fp8.mlir create mode 100644 attention/mlir/attention_B4_H64_SQ2048_SKV4096_DH128_f16.mlir create mode 100644 attention/mlir/attention_B4_H64_SQ2048_SKV4096_DH128_f8.mlir create mode 100644 attention/mlir/attention_B4_H64_SQ2048_SKV4096_DH128_fp16.mlir create mode 100644 attention/mlir/attention_B4_H64_SQ2048_SKV4096_DH128_fp8.mlir create mode 100644 attention/mlir/attention_B4_H64_SQ4096_SKV1024_DH128_f16.mlir create mode 100644 attention/mlir/attention_B4_H64_SQ4096_SKV1024_DH128_f8.mlir create mode 100644 attention/mlir/attention_B4_H64_SQ4096_SKV1024_DH128_fp16.mlir create mode 100644 attention/mlir/attention_B4_H64_SQ4096_SKV1024_DH128_fp8.mlir create mode 100644 attention/mlir/attention_B4_H64_SQ4096_SKV2048_DH128_f16.mlir create mode 100644 attention/mlir/attention_B4_H64_SQ4096_SKV2048_DH128_f8.mlir create mode 100644 attention/mlir/attention_B4_H64_SQ4096_SKV2048_DH128_fp16.mlir create mode 100644 attention/mlir/attention_B4_H64_SQ4096_SKV2048_DH128_fp8.mlir create mode 100644 attention/mlir/attention_B4_H64_SQ4096_SKV4096_DH128_f16.mlir create mode 100644 attention/mlir/attention_B4_H64_SQ4096_SKV4096_DH128_f8.mlir create mode 100644 attention/mlir/attention_B4_H64_SQ4096_SKV4096_DH128_fp16.mlir create mode 100644 attention/mlir/attention_B4_H64_SQ4096_SKV4096_DH128_fp8.mlir create mode 100644 attention/vmfb/attention_B1_H32_SQ1024_SKV1024_DH128_f16.vmfb create mode 100644 attention/vmfb/attention_B1_H32_SQ1024_SKV1024_DH128_f8.vmfb create mode 100644 attention/vmfb/attention_B1_H32_SQ1024_SKV2048_DH128_f16.vmfb create mode 100644 attention/vmfb/attention_B1_H32_SQ1024_SKV2048_DH128_f8.vmfb create mode 100644 attention/vmfb/attention_B1_H32_SQ1024_SKV4096_DH128_f16.vmfb create mode 100644 attention/vmfb/attention_B1_H32_SQ1024_SKV4096_DH128_f8.vmfb create mode 100644 attention/vmfb/attention_B1_H32_SQ2048_SKV1024_DH128_f16.vmfb create mode 100644 attention/vmfb/attention_B1_H32_SQ2048_SKV1024_DH128_f8.vmfb create mode 100644 attention/vmfb/attention_B1_H32_SQ2048_SKV2048_DH128_f16.vmfb create mode 100644 attention/vmfb/attention_B1_H32_SQ2048_SKV2048_DH128_f8.vmfb create mode 100644 attention/vmfb/attention_B1_H32_SQ2048_SKV4096_DH128_f16.vmfb create mode 100644 attention/vmfb/attention_B1_H32_SQ2048_SKV4096_DH128_f8.vmfb create mode 100644 attention/vmfb/attention_B1_H32_SQ4096_SKV1024_DH128_f16.vmfb create mode 100644 attention/vmfb/attention_B1_H32_SQ4096_SKV1024_DH128_f8.vmfb create mode 100644 attention/vmfb/attention_B1_H32_SQ4096_SKV2048_DH128_f16.vmfb create mode 100644 attention/vmfb/attention_B1_H32_SQ4096_SKV2048_DH128_f8.vmfb create mode 100644 attention/vmfb/attention_B1_H32_SQ4096_SKV4096_DH128_f16.vmfb create mode 100644 attention/vmfb/attention_B1_H32_SQ4096_SKV4096_DH128_f8.vmfb create mode 100644 attention/vmfb/attention_B1_H40_SQ1024_SKV1024_DH128_f16.vmfb create mode 100644 attention/vmfb/attention_B1_H40_SQ1024_SKV1024_DH128_f8.vmfb create mode 100644 attention/vmfb/attention_B1_H40_SQ1024_SKV2048_DH128_f16.vmfb create mode 100644 attention/vmfb/attention_B1_H40_SQ1024_SKV2048_DH128_f8.vmfb create mode 100644 attention/vmfb/attention_B1_H40_SQ1024_SKV4096_DH128_f16.vmfb create mode 100644 attention/vmfb/attention_B1_H40_SQ1024_SKV4096_DH128_f8.vmfb create mode 100644 attention/vmfb/attention_B1_H40_SQ2048_SKV1024_DH128_f16.vmfb create mode 100644 attention/vmfb/attention_B1_H40_SQ2048_SKV1024_DH128_f8.vmfb create mode 100644 attention/vmfb/attention_B1_H40_SQ2048_SKV2048_DH128_f16.vmfb create mode 100644 attention/vmfb/attention_B1_H40_SQ2048_SKV2048_DH128_f8.vmfb create mode 100644 attention/vmfb/attention_B1_H40_SQ2048_SKV4096_DH128_f16.vmfb create mode 100644 attention/vmfb/attention_B1_H40_SQ2048_SKV4096_DH128_f8.vmfb create mode 100644 attention/vmfb/attention_B1_H40_SQ4096_SKV1024_DH128_f16.vmfb create mode 100644 attention/vmfb/attention_B1_H40_SQ4096_SKV1024_DH128_f8.vmfb create mode 100644 attention/vmfb/attention_B1_H40_SQ4096_SKV2048_DH128_f16.vmfb create mode 100644 attention/vmfb/attention_B1_H40_SQ4096_SKV2048_DH128_f8.vmfb create mode 100644 attention/vmfb/attention_B1_H40_SQ4096_SKV4096_DH128_f16.vmfb create mode 100644 attention/vmfb/attention_B1_H40_SQ4096_SKV4096_DH128_f8.vmfb create mode 100644 attention/vmfb/attention_B1_H64_SQ1024_SKV1024_DH128_f16.vmfb create mode 100644 attention/vmfb/attention_B1_H64_SQ1024_SKV1024_DH128_f8.vmfb create mode 100644 attention/vmfb/attention_B1_H64_SQ1024_SKV2048_DH128_f16.vmfb create mode 100644 attention/vmfb/attention_B1_H64_SQ1024_SKV2048_DH128_f8.vmfb create mode 100644 attention/vmfb/attention_B1_H64_SQ1024_SKV4096_DH128_f16.vmfb create mode 100644 attention/vmfb/attention_B1_H64_SQ1024_SKV4096_DH128_f8.vmfb create mode 100644 attention/vmfb/attention_B1_H64_SQ2048_SKV1024_DH128_f16.vmfb create mode 100644 attention/vmfb/attention_B1_H64_SQ2048_SKV1024_DH128_f8.vmfb create mode 100644 attention/vmfb/attention_B1_H64_SQ2048_SKV2048_DH128_f16.vmfb create mode 100644 attention/vmfb/attention_B1_H64_SQ2048_SKV2048_DH128_f8.vmfb create mode 100644 attention/vmfb/attention_B1_H64_SQ2048_SKV4096_DH128_f16.vmfb create mode 100644 attention/vmfb/attention_B1_H64_SQ2048_SKV4096_DH128_f8.vmfb create mode 100644 attention/vmfb/attention_B1_H64_SQ4096_SKV1024_DH128_f16.vmfb create mode 100644 attention/vmfb/attention_B1_H64_SQ4096_SKV1024_DH128_f8.vmfb create mode 100644 attention/vmfb/attention_B1_H64_SQ4096_SKV2048_DH128_f16.vmfb create mode 100644 attention/vmfb/attention_B1_H64_SQ4096_SKV2048_DH128_f8.vmfb create mode 100644 attention/vmfb/attention_B1_H64_SQ4096_SKV4096_DH128_f16.vmfb create mode 100644 attention/vmfb/attention_B1_H64_SQ4096_SKV4096_DH128_f8.vmfb create mode 100644 attention/vmfb/attention_B2_H10_SQ1024_SKV1024_DH64_f16.vmfb create mode 100644 attention/vmfb/attention_B2_H10_SQ1024_SKV1024_DH64_f8.vmfb create mode 100644 attention/vmfb/attention_B2_H10_SQ4096_SKV4096_DH64_f16.vmfb create mode 100644 attention/vmfb/attention_B2_H10_SQ4096_SKV4096_DH64_f8.vmfb create mode 100644 attention/vmfb/attention_B2_H10_SQ4096_SKV64_DH64_f16.vmfb create mode 100644 attention/vmfb/attention_B2_H10_SQ4096_SKV64_DH64_f8.vmfb create mode 100644 attention/vmfb/attention_B2_H20_SQ1024_SKV64_DH64_f16.vmfb create mode 100644 attention/vmfb/attention_B2_H20_SQ1024_SKV64_DH64_f8.vmfb create mode 100644 attention/vmfb/attention_B2_H32_SQ1024_SKV1024_DH128_f16.vmfb create mode 100644 attention/vmfb/attention_B2_H32_SQ1024_SKV1024_DH128_f8.vmfb create mode 100644 attention/vmfb/attention_B2_H32_SQ1024_SKV2048_DH128_f16.vmfb create mode 100644 attention/vmfb/attention_B2_H32_SQ1024_SKV2048_DH128_f8.vmfb create mode 100644 attention/vmfb/attention_B2_H32_SQ1024_SKV4096_DH128_f16.vmfb create mode 100644 attention/vmfb/attention_B2_H32_SQ1024_SKV4096_DH128_f8.vmfb create mode 100644 attention/vmfb/attention_B2_H32_SQ2048_SKV1024_DH128_f16.vmfb create mode 100644 attention/vmfb/attention_B2_H32_SQ2048_SKV1024_DH128_f8.vmfb create mode 100644 attention/vmfb/attention_B2_H32_SQ2048_SKV2048_DH128_f16.vmfb create mode 100644 attention/vmfb/attention_B2_H32_SQ2048_SKV2048_DH128_f8.vmfb create mode 100644 attention/vmfb/attention_B2_H32_SQ2048_SKV4096_DH128_f16.vmfb create mode 100644 attention/vmfb/attention_B2_H32_SQ2048_SKV4096_DH128_f8.vmfb create mode 100644 attention/vmfb/attention_B2_H32_SQ4096_SKV1024_DH128_f16.vmfb create mode 100644 attention/vmfb/attention_B2_H32_SQ4096_SKV1024_DH128_f8.vmfb create mode 100644 attention/vmfb/attention_B2_H32_SQ4096_SKV2048_DH128_f16.vmfb create mode 100644 attention/vmfb/attention_B2_H32_SQ4096_SKV2048_DH128_f8.vmfb create mode 100644 attention/vmfb/attention_B2_H32_SQ4096_SKV4096_DH128_f16.vmfb create mode 100644 attention/vmfb/attention_B2_H32_SQ4096_SKV4096_DH128_f8.vmfb create mode 100644 attention/vmfb/attention_B2_H40_SQ1024_SKV1024_DH128_f16.vmfb create mode 100644 attention/vmfb/attention_B2_H40_SQ1024_SKV1024_DH128_f8.vmfb create mode 100644 attention/vmfb/attention_B2_H40_SQ1024_SKV2048_DH128_f16.vmfb create mode 100644 attention/vmfb/attention_B2_H40_SQ1024_SKV2048_DH128_f8.vmfb create mode 100644 attention/vmfb/attention_B2_H40_SQ1024_SKV4096_DH128_f16.vmfb create mode 100644 attention/vmfb/attention_B2_H40_SQ1024_SKV4096_DH128_f8.vmfb create mode 100644 attention/vmfb/attention_B2_H40_SQ2048_SKV1024_DH128_f16.vmfb create mode 100644 attention/vmfb/attention_B2_H40_SQ2048_SKV1024_DH128_f8.vmfb create mode 100644 attention/vmfb/attention_B2_H40_SQ2048_SKV2048_DH128_f16.vmfb create mode 100644 attention/vmfb/attention_B2_H40_SQ2048_SKV2048_DH128_f8.vmfb create mode 100644 attention/vmfb/attention_B2_H40_SQ2048_SKV4096_DH128_f16.vmfb create mode 100644 attention/vmfb/attention_B2_H40_SQ2048_SKV4096_DH128_f8.vmfb create mode 100644 attention/vmfb/attention_B2_H40_SQ4096_SKV1024_DH128_f16.vmfb create mode 100644 attention/vmfb/attention_B2_H40_SQ4096_SKV1024_DH128_f8.vmfb create mode 100644 attention/vmfb/attention_B2_H40_SQ4096_SKV2048_DH128_f16.vmfb create mode 100644 attention/vmfb/attention_B2_H40_SQ4096_SKV2048_DH128_f8.vmfb create mode 100644 attention/vmfb/attention_B2_H40_SQ4096_SKV4096_DH128_f16.vmfb create mode 100644 attention/vmfb/attention_B2_H40_SQ4096_SKV4096_DH128_f8.vmfb create mode 100644 attention/vmfb/attention_B2_H64_SQ1024_SKV1024_DH128_f16.vmfb create mode 100644 attention/vmfb/attention_B2_H64_SQ1024_SKV1024_DH128_f8.vmfb create mode 100644 attention/vmfb/attention_B2_H64_SQ1024_SKV2048_DH128_f16.vmfb create mode 100644 attention/vmfb/attention_B2_H64_SQ1024_SKV2048_DH128_f8.vmfb create mode 100644 attention/vmfb/attention_B2_H64_SQ1024_SKV4096_DH128_f16.vmfb create mode 100644 attention/vmfb/attention_B2_H64_SQ1024_SKV4096_DH128_f8.vmfb create mode 100644 attention/vmfb/attention_B2_H64_SQ2048_SKV1024_DH128_f16.vmfb create mode 100644 attention/vmfb/attention_B2_H64_SQ2048_SKV1024_DH128_f8.vmfb create mode 100644 attention/vmfb/attention_B2_H64_SQ2048_SKV2048_DH128_f16.vmfb create mode 100644 attention/vmfb/attention_B2_H64_SQ2048_SKV2048_DH128_f8.vmfb create mode 100644 attention/vmfb/attention_B2_H64_SQ2048_SKV4096_DH128_f16.vmfb create mode 100644 attention/vmfb/attention_B2_H64_SQ2048_SKV4096_DH128_f8.vmfb create mode 100644 attention/vmfb/attention_B2_H64_SQ4096_SKV1024_DH128_f16.vmfb create mode 100644 attention/vmfb/attention_B2_H64_SQ4096_SKV1024_DH128_f8.vmfb create mode 100644 attention/vmfb/attention_B2_H64_SQ4096_SKV2048_DH128_f16.vmfb create mode 100644 attention/vmfb/attention_B2_H64_SQ4096_SKV2048_DH128_f8.vmfb create mode 100644 attention/vmfb/attention_B2_H64_SQ4096_SKV4096_DH128_f16.vmfb create mode 100644 attention/vmfb/attention_B2_H64_SQ4096_SKV4096_DH128_f8.vmfb create mode 100644 attention/vmfb/attention_B4_H32_SQ1024_SKV1024_DH128_f16.vmfb create mode 100644 attention/vmfb/attention_B4_H32_SQ1024_SKV1024_DH128_f8.vmfb create mode 100644 attention/vmfb/attention_B4_H32_SQ1024_SKV2048_DH128_f16.vmfb create mode 100644 attention/vmfb/attention_B4_H32_SQ1024_SKV2048_DH128_f8.vmfb create mode 100644 attention/vmfb/attention_B4_H32_SQ1024_SKV4096_DH128_f16.vmfb create mode 100644 attention/vmfb/attention_B4_H32_SQ1024_SKV4096_DH128_f8.vmfb create mode 100644 attention/vmfb/attention_B4_H32_SQ2048_SKV1024_DH128_f16.vmfb create mode 100644 attention/vmfb/attention_B4_H32_SQ2048_SKV1024_DH128_f8.vmfb create mode 100644 attention/vmfb/attention_B4_H32_SQ2048_SKV2048_DH128_f16.vmfb create mode 100644 attention/vmfb/attention_B4_H32_SQ2048_SKV2048_DH128_f8.vmfb create mode 100644 attention/vmfb/attention_B4_H32_SQ2048_SKV4096_DH128_f16.vmfb create mode 100644 attention/vmfb/attention_B4_H32_SQ2048_SKV4096_DH128_f8.vmfb create mode 100644 attention/vmfb/attention_B4_H32_SQ4096_SKV1024_DH128_f16.vmfb create mode 100644 attention/vmfb/attention_B4_H32_SQ4096_SKV1024_DH128_f8.vmfb create mode 100644 attention/vmfb/attention_B4_H32_SQ4096_SKV2048_DH128_f16.vmfb create mode 100644 attention/vmfb/attention_B4_H32_SQ4096_SKV2048_DH128_f8.vmfb create mode 100644 attention/vmfb/attention_B4_H32_SQ4096_SKV4096_DH128_f16.vmfb create mode 100644 attention/vmfb/attention_B4_H32_SQ4096_SKV4096_DH128_f8.vmfb create mode 100644 attention/vmfb/attention_B4_H40_SQ1024_SKV1024_DH128_f16.vmfb create mode 100644 attention/vmfb/attention_B4_H40_SQ1024_SKV1024_DH128_f8.vmfb create mode 100644 attention/vmfb/attention_B4_H40_SQ1024_SKV2048_DH128_f16.vmfb create mode 100644 attention/vmfb/attention_B4_H40_SQ1024_SKV2048_DH128_f8.vmfb create mode 100644 attention/vmfb/attention_B4_H40_SQ1024_SKV4096_DH128_f16.vmfb create mode 100644 attention/vmfb/attention_B4_H40_SQ1024_SKV4096_DH128_f8.vmfb create mode 100644 attention/vmfb/attention_B4_H40_SQ2048_SKV1024_DH128_f16.vmfb create mode 100644 attention/vmfb/attention_B4_H40_SQ2048_SKV1024_DH128_f8.vmfb create mode 100644 attention/vmfb/attention_B4_H40_SQ2048_SKV2048_DH128_f16.vmfb create mode 100644 attention/vmfb/attention_B4_H40_SQ2048_SKV2048_DH128_f8.vmfb create mode 100644 attention/vmfb/attention_B4_H40_SQ2048_SKV4096_DH128_f16.vmfb create mode 100644 attention/vmfb/attention_B4_H40_SQ2048_SKV4096_DH128_f8.vmfb create mode 100644 attention/vmfb/attention_B4_H40_SQ4096_SKV1024_DH128_f16.vmfb create mode 100644 attention/vmfb/attention_B4_H40_SQ4096_SKV1024_DH128_f8.vmfb create mode 100644 attention/vmfb/attention_B4_H40_SQ4096_SKV2048_DH128_f16.vmfb create mode 100644 attention/vmfb/attention_B4_H40_SQ4096_SKV2048_DH128_f8.vmfb create mode 100644 attention/vmfb/attention_B4_H40_SQ4096_SKV4096_DH128_f16.vmfb create mode 100644 attention/vmfb/attention_B4_H40_SQ4096_SKV4096_DH128_f8.vmfb create mode 100644 attention/vmfb/attention_B4_H64_SQ1024_SKV1024_DH128_f16.vmfb create mode 100644 attention/vmfb/attention_B4_H64_SQ1024_SKV1024_DH128_f8.vmfb create mode 100644 attention/vmfb/attention_B4_H64_SQ1024_SKV2048_DH128_f16.vmfb create mode 100644 attention/vmfb/attention_B4_H64_SQ1024_SKV2048_DH128_f8.vmfb create mode 100644 attention/vmfb/attention_B4_H64_SQ1024_SKV4096_DH128_f16.vmfb create mode 100644 attention/vmfb/attention_B4_H64_SQ1024_SKV4096_DH128_f8.vmfb create mode 100644 attention/vmfb/attention_B4_H64_SQ2048_SKV1024_DH128_f16.vmfb create mode 100644 attention/vmfb/attention_B4_H64_SQ2048_SKV1024_DH128_f8.vmfb create mode 100644 attention/vmfb/attention_B4_H64_SQ2048_SKV2048_DH128_f16.vmfb create mode 100644 attention/vmfb/attention_B4_H64_SQ2048_SKV2048_DH128_f8.vmfb create mode 100644 attention/vmfb/attention_B4_H64_SQ2048_SKV4096_DH128_f16.vmfb create mode 100644 attention/vmfb/attention_B4_H64_SQ2048_SKV4096_DH128_f8.vmfb create mode 100644 attention/vmfb/attention_B4_H64_SQ4096_SKV1024_DH128_f16.vmfb create mode 100644 attention/vmfb/attention_B4_H64_SQ4096_SKV1024_DH128_f8.vmfb create mode 100644 attention/vmfb/attention_B4_H64_SQ4096_SKV2048_DH128_f16.vmfb create mode 100644 attention/vmfb/attention_B4_H64_SQ4096_SKV2048_DH128_f8.vmfb create mode 100644 attention/vmfb/attention_B4_H64_SQ4096_SKV4096_DH128_f16.vmfb create mode 100644 attention/vmfb/attention_B4_H64_SQ4096_SKV4096_DH128_f8.vmfb rename attention_and_matmul_spec.mlir => attention_and_matmul_spec_f16.mlir (100%) create mode 100644 attention_and_matmul_spec_f8.mlir create mode 100644 attentionbench/attention_utils.py create mode 100644 attentionbench/benchmark_torch_attention.py create mode 100644 attentionbench/benchmark_triton_attention.py rename {gemmbench => attentionbench}/shark_fa2.py (68%) create mode 100644 gemmbench/bench_utils.py delete mode 100644 gemmbench/benchmark_torch_attention.py create mode 100644 gemmbench/csv_to_hdf.py create mode 100644 results/torch_llama_sdxl_attention.csv create mode 100644 results/triton_llama_sdxl_attention.csv delete mode 100644 src/benchmark/driver.cpp diff --git a/.github/workflows/run_bench.yml b/.github/workflows/run_bench.yml index f3df82a..2d72f36 100644 --- a/.github/workflows/run_bench.yml +++ b/.github/workflows/run_bench.yml @@ -62,7 +62,7 @@ jobs: cd $GITHUB_WORKSPACE source $GITHUB_WORKSPACE/venv/bin/activate for device in $(seq 3 7); do (sudo $GITHUB_WORKSPACE/build/gemm-bench --device=$device &); done - ./gb run --backends=rocblas --repeat=1 --output=results/rocblas.hdf + ./gb run --backends=rocblas --repeat=1 --output=results/rocblas.csv sudo pkill -f gemm-bench deactivate @@ -72,16 +72,27 @@ jobs: cd $GITHUB_WORKSPACE source $GITHUB_WORKSPACE/venv/bin/activate for device in $(seq 3 7); do (sudo $GITHUB_WORKSPACE/build/gemm-bench --device=$device &); done - ./gb run --backends=hipblaslt --repeat=1 --output=results/hipblaslt.hdf + ./gb run --backends=hipblaslt --repeat=1 --output=results/hipblaslt.csv sudo pkill -f gemm-bench deactivate - name: Run IREE Benchmarks run: | + sudo pkill -f gemm-bench + cd $GITHUB_WORKSPACE + source $GITHUB_WORKSPACE/venv/bin/activate + for device in $(seq 3 7); do (sudo $GITHUB_WORKSPACE/build/gemm-bench --device=$device &); done + ./gb run --backends=iree --repeat=1 --output=results/iree.csv + sudo pkill -f gemm-bench + deactivate + + - name: Run SHARK Attention Benchmarks + run: | + sudo pkill -f gemm-bench cd $GITHUB_WORKSPACE source $GITHUB_WORKSPACE/venv/bin/activate for device in $(seq 3 7); do (sudo $GITHUB_WORKSPACE/build/gemm-bench --device=$device &); done - ./gb run --backends=iree --repeat=1 --output=results/iree.hdf + ./gb run --backends=sharkfa --suite=flash_attention --repeat=1 --output=results/sharkfa_llama_sdxl_attention.csv sudo pkill -f gemm-bench deactivate diff --git a/.gitignore b/.gitignore index a128914..5faa7ac 100644 --- a/.gitignore +++ b/.gitignore @@ -2,6 +2,4 @@ build rocm_gemm_venv *venv __pycache__ -*.hdf -attention/mlir -attention/vmfb \ No newline at end of file +*.hdf \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json index 19b0661..079441f 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -114,11 +114,14 @@ "syncstream": "c", "runtime.hpp": "c", "strstream": "cpp", - "__functional_03": "cpp" + "__functional_03": "cpp", + "hash_map": "cpp", + "hash_set": "cpp" }, "editor.formatOnSave": true, "editor.rulers": [80], "clang-format.executable": "usr/bin/clang-format", "C_Cpp.errorSquiggles": "enabled", - "dotnet.defaultSolution": "disable" + "dotnet.defaultSolution": "disable", + "git.ignoreLimitWarning": true } diff --git a/attention/mlir/attention_B1_H32_SQ1024_SKV1024_DH128_f16.mlir b/attention/mlir/attention_B1_H32_SQ1024_SKV1024_DH128_f16.mlir new file mode 100644 index 0000000..8d906fc --- /dev/null +++ b/attention/mlir/attention_B1_H32_SQ1024_SKV1024_DH128_f16.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[1,32,1024,128],f16>, %298 : !torch.vtensor<[1,32,1024,128],f16>, %301 : !torch.vtensor<[1,32,1024,128],f16>) -> !torch.vtensor<[1,32,1024,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[1,32,1024,128],f16>, !torch.vtensor<[1,32,1024,128],f16>, !torch.vtensor<[1,32,1024,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[1,32,1024,128],f16>, !torch.vtensor<[1,32,1024], f32>) + return %282#0 : !torch.vtensor<[1,32,1024,128],f16> + } +} diff --git a/attention/mlir/attention_B1_H32_SQ1024_SKV1024_DH128_f8.mlir b/attention/mlir/attention_B1_H32_SQ1024_SKV1024_DH128_f8.mlir new file mode 100644 index 0000000..8d906fc --- /dev/null +++ b/attention/mlir/attention_B1_H32_SQ1024_SKV1024_DH128_f8.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[1,32,1024,128],f16>, %298 : !torch.vtensor<[1,32,1024,128],f16>, %301 : !torch.vtensor<[1,32,1024,128],f16>) -> !torch.vtensor<[1,32,1024,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[1,32,1024,128],f16>, !torch.vtensor<[1,32,1024,128],f16>, !torch.vtensor<[1,32,1024,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[1,32,1024,128],f16>, !torch.vtensor<[1,32,1024], f32>) + return %282#0 : !torch.vtensor<[1,32,1024,128],f16> + } +} diff --git a/attention/mlir/attention_B1_H32_SQ1024_SKV1024_DH128_fp16.mlir b/attention/mlir/attention_B1_H32_SQ1024_SKV1024_DH128_fp16.mlir new file mode 100644 index 0000000..8d906fc --- /dev/null +++ b/attention/mlir/attention_B1_H32_SQ1024_SKV1024_DH128_fp16.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[1,32,1024,128],f16>, %298 : !torch.vtensor<[1,32,1024,128],f16>, %301 : !torch.vtensor<[1,32,1024,128],f16>) -> !torch.vtensor<[1,32,1024,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[1,32,1024,128],f16>, !torch.vtensor<[1,32,1024,128],f16>, !torch.vtensor<[1,32,1024,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[1,32,1024,128],f16>, !torch.vtensor<[1,32,1024], f32>) + return %282#0 : !torch.vtensor<[1,32,1024,128],f16> + } +} diff --git a/attention/mlir/attention_B1_H32_SQ1024_SKV1024_DH128_fp8.mlir b/attention/mlir/attention_B1_H32_SQ1024_SKV1024_DH128_fp8.mlir new file mode 100644 index 0000000..8d906fc --- /dev/null +++ b/attention/mlir/attention_B1_H32_SQ1024_SKV1024_DH128_fp8.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[1,32,1024,128],f16>, %298 : !torch.vtensor<[1,32,1024,128],f16>, %301 : !torch.vtensor<[1,32,1024,128],f16>) -> !torch.vtensor<[1,32,1024,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[1,32,1024,128],f16>, !torch.vtensor<[1,32,1024,128],f16>, !torch.vtensor<[1,32,1024,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[1,32,1024,128],f16>, !torch.vtensor<[1,32,1024], f32>) + return %282#0 : !torch.vtensor<[1,32,1024,128],f16> + } +} diff --git a/attention/mlir/attention_B1_H32_SQ1024_SKV2048_DH128_f16.mlir b/attention/mlir/attention_B1_H32_SQ1024_SKV2048_DH128_f16.mlir new file mode 100644 index 0000000..dc91ab6 --- /dev/null +++ b/attention/mlir/attention_B1_H32_SQ1024_SKV2048_DH128_f16.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[1,32,1024,128],f16>, %298 : !torch.vtensor<[1,32,2048,128],f16>, %301 : !torch.vtensor<[1,32,2048,128],f16>) -> !torch.vtensor<[1,32,1024,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[1,32,1024,128],f16>, !torch.vtensor<[1,32,2048,128],f16>, !torch.vtensor<[1,32,2048,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[1,32,1024,128],f16>, !torch.vtensor<[1,32,1024], f32>) + return %282#0 : !torch.vtensor<[1,32,1024,128],f16> + } +} diff --git a/attention/mlir/attention_B1_H32_SQ1024_SKV2048_DH128_f8.mlir b/attention/mlir/attention_B1_H32_SQ1024_SKV2048_DH128_f8.mlir new file mode 100644 index 0000000..dc91ab6 --- /dev/null +++ b/attention/mlir/attention_B1_H32_SQ1024_SKV2048_DH128_f8.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[1,32,1024,128],f16>, %298 : !torch.vtensor<[1,32,2048,128],f16>, %301 : !torch.vtensor<[1,32,2048,128],f16>) -> !torch.vtensor<[1,32,1024,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[1,32,1024,128],f16>, !torch.vtensor<[1,32,2048,128],f16>, !torch.vtensor<[1,32,2048,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[1,32,1024,128],f16>, !torch.vtensor<[1,32,1024], f32>) + return %282#0 : !torch.vtensor<[1,32,1024,128],f16> + } +} diff --git a/attention/mlir/attention_B1_H32_SQ1024_SKV2048_DH128_fp16.mlir b/attention/mlir/attention_B1_H32_SQ1024_SKV2048_DH128_fp16.mlir new file mode 100644 index 0000000..dc91ab6 --- /dev/null +++ b/attention/mlir/attention_B1_H32_SQ1024_SKV2048_DH128_fp16.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[1,32,1024,128],f16>, %298 : !torch.vtensor<[1,32,2048,128],f16>, %301 : !torch.vtensor<[1,32,2048,128],f16>) -> !torch.vtensor<[1,32,1024,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[1,32,1024,128],f16>, !torch.vtensor<[1,32,2048,128],f16>, !torch.vtensor<[1,32,2048,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[1,32,1024,128],f16>, !torch.vtensor<[1,32,1024], f32>) + return %282#0 : !torch.vtensor<[1,32,1024,128],f16> + } +} diff --git a/attention/mlir/attention_B1_H32_SQ1024_SKV2048_DH128_fp8.mlir b/attention/mlir/attention_B1_H32_SQ1024_SKV2048_DH128_fp8.mlir new file mode 100644 index 0000000..dc91ab6 --- /dev/null +++ b/attention/mlir/attention_B1_H32_SQ1024_SKV2048_DH128_fp8.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[1,32,1024,128],f16>, %298 : !torch.vtensor<[1,32,2048,128],f16>, %301 : !torch.vtensor<[1,32,2048,128],f16>) -> !torch.vtensor<[1,32,1024,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[1,32,1024,128],f16>, !torch.vtensor<[1,32,2048,128],f16>, !torch.vtensor<[1,32,2048,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[1,32,1024,128],f16>, !torch.vtensor<[1,32,1024], f32>) + return %282#0 : !torch.vtensor<[1,32,1024,128],f16> + } +} diff --git a/attention/mlir/attention_B1_H32_SQ1024_SKV4096_DH128_f16.mlir b/attention/mlir/attention_B1_H32_SQ1024_SKV4096_DH128_f16.mlir new file mode 100644 index 0000000..749431b --- /dev/null +++ b/attention/mlir/attention_B1_H32_SQ1024_SKV4096_DH128_f16.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[1,32,1024,128],f16>, %298 : !torch.vtensor<[1,32,4096,128],f16>, %301 : !torch.vtensor<[1,32,4096,128],f16>) -> !torch.vtensor<[1,32,1024,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[1,32,1024,128],f16>, !torch.vtensor<[1,32,4096,128],f16>, !torch.vtensor<[1,32,4096,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[1,32,1024,128],f16>, !torch.vtensor<[1,32,1024], f32>) + return %282#0 : !torch.vtensor<[1,32,1024,128],f16> + } +} diff --git a/attention/mlir/attention_B1_H32_SQ1024_SKV4096_DH128_f8.mlir b/attention/mlir/attention_B1_H32_SQ1024_SKV4096_DH128_f8.mlir new file mode 100644 index 0000000..749431b --- /dev/null +++ b/attention/mlir/attention_B1_H32_SQ1024_SKV4096_DH128_f8.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[1,32,1024,128],f16>, %298 : !torch.vtensor<[1,32,4096,128],f16>, %301 : !torch.vtensor<[1,32,4096,128],f16>) -> !torch.vtensor<[1,32,1024,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[1,32,1024,128],f16>, !torch.vtensor<[1,32,4096,128],f16>, !torch.vtensor<[1,32,4096,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[1,32,1024,128],f16>, !torch.vtensor<[1,32,1024], f32>) + return %282#0 : !torch.vtensor<[1,32,1024,128],f16> + } +} diff --git a/attention/mlir/attention_B1_H32_SQ1024_SKV4096_DH128_fp16.mlir b/attention/mlir/attention_B1_H32_SQ1024_SKV4096_DH128_fp16.mlir new file mode 100644 index 0000000..749431b --- /dev/null +++ b/attention/mlir/attention_B1_H32_SQ1024_SKV4096_DH128_fp16.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[1,32,1024,128],f16>, %298 : !torch.vtensor<[1,32,4096,128],f16>, %301 : !torch.vtensor<[1,32,4096,128],f16>) -> !torch.vtensor<[1,32,1024,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[1,32,1024,128],f16>, !torch.vtensor<[1,32,4096,128],f16>, !torch.vtensor<[1,32,4096,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[1,32,1024,128],f16>, !torch.vtensor<[1,32,1024], f32>) + return %282#0 : !torch.vtensor<[1,32,1024,128],f16> + } +} diff --git a/attention/mlir/attention_B1_H32_SQ1024_SKV4096_DH128_fp8.mlir b/attention/mlir/attention_B1_H32_SQ1024_SKV4096_DH128_fp8.mlir new file mode 100644 index 0000000..749431b --- /dev/null +++ b/attention/mlir/attention_B1_H32_SQ1024_SKV4096_DH128_fp8.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[1,32,1024,128],f16>, %298 : !torch.vtensor<[1,32,4096,128],f16>, %301 : !torch.vtensor<[1,32,4096,128],f16>) -> !torch.vtensor<[1,32,1024,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[1,32,1024,128],f16>, !torch.vtensor<[1,32,4096,128],f16>, !torch.vtensor<[1,32,4096,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[1,32,1024,128],f16>, !torch.vtensor<[1,32,1024], f32>) + return %282#0 : !torch.vtensor<[1,32,1024,128],f16> + } +} diff --git a/attention/mlir/attention_B1_H32_SQ2048_SKV1024_DH128_f16.mlir b/attention/mlir/attention_B1_H32_SQ2048_SKV1024_DH128_f16.mlir new file mode 100644 index 0000000..19bfa2b --- /dev/null +++ b/attention/mlir/attention_B1_H32_SQ2048_SKV1024_DH128_f16.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[1,32,2048,128],f16>, %298 : !torch.vtensor<[1,32,1024,128],f16>, %301 : !torch.vtensor<[1,32,1024,128],f16>) -> !torch.vtensor<[1,32,2048,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[1,32,2048,128],f16>, !torch.vtensor<[1,32,1024,128],f16>, !torch.vtensor<[1,32,1024,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[1,32,2048,128],f16>, !torch.vtensor<[1,32,2048], f32>) + return %282#0 : !torch.vtensor<[1,32,2048,128],f16> + } +} diff --git a/attention/mlir/attention_B1_H32_SQ2048_SKV1024_DH128_f8.mlir b/attention/mlir/attention_B1_H32_SQ2048_SKV1024_DH128_f8.mlir new file mode 100644 index 0000000..19bfa2b --- /dev/null +++ b/attention/mlir/attention_B1_H32_SQ2048_SKV1024_DH128_f8.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[1,32,2048,128],f16>, %298 : !torch.vtensor<[1,32,1024,128],f16>, %301 : !torch.vtensor<[1,32,1024,128],f16>) -> !torch.vtensor<[1,32,2048,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[1,32,2048,128],f16>, !torch.vtensor<[1,32,1024,128],f16>, !torch.vtensor<[1,32,1024,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[1,32,2048,128],f16>, !torch.vtensor<[1,32,2048], f32>) + return %282#0 : !torch.vtensor<[1,32,2048,128],f16> + } +} diff --git a/attention/mlir/attention_B1_H32_SQ2048_SKV1024_DH128_fp16.mlir b/attention/mlir/attention_B1_H32_SQ2048_SKV1024_DH128_fp16.mlir new file mode 100644 index 0000000..19bfa2b --- /dev/null +++ b/attention/mlir/attention_B1_H32_SQ2048_SKV1024_DH128_fp16.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[1,32,2048,128],f16>, %298 : !torch.vtensor<[1,32,1024,128],f16>, %301 : !torch.vtensor<[1,32,1024,128],f16>) -> !torch.vtensor<[1,32,2048,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[1,32,2048,128],f16>, !torch.vtensor<[1,32,1024,128],f16>, !torch.vtensor<[1,32,1024,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[1,32,2048,128],f16>, !torch.vtensor<[1,32,2048], f32>) + return %282#0 : !torch.vtensor<[1,32,2048,128],f16> + } +} diff --git a/attention/mlir/attention_B1_H32_SQ2048_SKV1024_DH128_fp8.mlir b/attention/mlir/attention_B1_H32_SQ2048_SKV1024_DH128_fp8.mlir new file mode 100644 index 0000000..19bfa2b --- /dev/null +++ b/attention/mlir/attention_B1_H32_SQ2048_SKV1024_DH128_fp8.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[1,32,2048,128],f16>, %298 : !torch.vtensor<[1,32,1024,128],f16>, %301 : !torch.vtensor<[1,32,1024,128],f16>) -> !torch.vtensor<[1,32,2048,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[1,32,2048,128],f16>, !torch.vtensor<[1,32,1024,128],f16>, !torch.vtensor<[1,32,1024,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[1,32,2048,128],f16>, !torch.vtensor<[1,32,2048], f32>) + return %282#0 : !torch.vtensor<[1,32,2048,128],f16> + } +} diff --git a/attention/mlir/attention_B1_H32_SQ2048_SKV2048_DH128_f16.mlir b/attention/mlir/attention_B1_H32_SQ2048_SKV2048_DH128_f16.mlir new file mode 100644 index 0000000..6036ee2 --- /dev/null +++ b/attention/mlir/attention_B1_H32_SQ2048_SKV2048_DH128_f16.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[1,32,2048,128],f16>, %298 : !torch.vtensor<[1,32,2048,128],f16>, %301 : !torch.vtensor<[1,32,2048,128],f16>) -> !torch.vtensor<[1,32,2048,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[1,32,2048,128],f16>, !torch.vtensor<[1,32,2048,128],f16>, !torch.vtensor<[1,32,2048,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[1,32,2048,128],f16>, !torch.vtensor<[1,32,2048], f32>) + return %282#0 : !torch.vtensor<[1,32,2048,128],f16> + } +} diff --git a/attention/mlir/attention_B1_H32_SQ2048_SKV2048_DH128_f8.mlir b/attention/mlir/attention_B1_H32_SQ2048_SKV2048_DH128_f8.mlir new file mode 100644 index 0000000..6036ee2 --- /dev/null +++ b/attention/mlir/attention_B1_H32_SQ2048_SKV2048_DH128_f8.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[1,32,2048,128],f16>, %298 : !torch.vtensor<[1,32,2048,128],f16>, %301 : !torch.vtensor<[1,32,2048,128],f16>) -> !torch.vtensor<[1,32,2048,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[1,32,2048,128],f16>, !torch.vtensor<[1,32,2048,128],f16>, !torch.vtensor<[1,32,2048,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[1,32,2048,128],f16>, !torch.vtensor<[1,32,2048], f32>) + return %282#0 : !torch.vtensor<[1,32,2048,128],f16> + } +} diff --git a/attention/mlir/attention_B1_H32_SQ2048_SKV2048_DH128_fp16.mlir b/attention/mlir/attention_B1_H32_SQ2048_SKV2048_DH128_fp16.mlir new file mode 100644 index 0000000..6036ee2 --- /dev/null +++ b/attention/mlir/attention_B1_H32_SQ2048_SKV2048_DH128_fp16.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[1,32,2048,128],f16>, %298 : !torch.vtensor<[1,32,2048,128],f16>, %301 : !torch.vtensor<[1,32,2048,128],f16>) -> !torch.vtensor<[1,32,2048,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[1,32,2048,128],f16>, !torch.vtensor<[1,32,2048,128],f16>, !torch.vtensor<[1,32,2048,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[1,32,2048,128],f16>, !torch.vtensor<[1,32,2048], f32>) + return %282#0 : !torch.vtensor<[1,32,2048,128],f16> + } +} diff --git a/attention/mlir/attention_B1_H32_SQ2048_SKV2048_DH128_fp8.mlir b/attention/mlir/attention_B1_H32_SQ2048_SKV2048_DH128_fp8.mlir new file mode 100644 index 0000000..6036ee2 --- /dev/null +++ b/attention/mlir/attention_B1_H32_SQ2048_SKV2048_DH128_fp8.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[1,32,2048,128],f16>, %298 : !torch.vtensor<[1,32,2048,128],f16>, %301 : !torch.vtensor<[1,32,2048,128],f16>) -> !torch.vtensor<[1,32,2048,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[1,32,2048,128],f16>, !torch.vtensor<[1,32,2048,128],f16>, !torch.vtensor<[1,32,2048,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[1,32,2048,128],f16>, !torch.vtensor<[1,32,2048], f32>) + return %282#0 : !torch.vtensor<[1,32,2048,128],f16> + } +} diff --git a/attention/mlir/attention_B1_H32_SQ2048_SKV4096_DH128_f16.mlir b/attention/mlir/attention_B1_H32_SQ2048_SKV4096_DH128_f16.mlir new file mode 100644 index 0000000..44ce76d --- /dev/null +++ b/attention/mlir/attention_B1_H32_SQ2048_SKV4096_DH128_f16.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[1,32,2048,128],f16>, %298 : !torch.vtensor<[1,32,4096,128],f16>, %301 : !torch.vtensor<[1,32,4096,128],f16>) -> !torch.vtensor<[1,32,2048,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[1,32,2048,128],f16>, !torch.vtensor<[1,32,4096,128],f16>, !torch.vtensor<[1,32,4096,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[1,32,2048,128],f16>, !torch.vtensor<[1,32,2048], f32>) + return %282#0 : !torch.vtensor<[1,32,2048,128],f16> + } +} diff --git a/attention/mlir/attention_B1_H32_SQ2048_SKV4096_DH128_f8.mlir b/attention/mlir/attention_B1_H32_SQ2048_SKV4096_DH128_f8.mlir new file mode 100644 index 0000000..44ce76d --- /dev/null +++ b/attention/mlir/attention_B1_H32_SQ2048_SKV4096_DH128_f8.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[1,32,2048,128],f16>, %298 : !torch.vtensor<[1,32,4096,128],f16>, %301 : !torch.vtensor<[1,32,4096,128],f16>) -> !torch.vtensor<[1,32,2048,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[1,32,2048,128],f16>, !torch.vtensor<[1,32,4096,128],f16>, !torch.vtensor<[1,32,4096,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[1,32,2048,128],f16>, !torch.vtensor<[1,32,2048], f32>) + return %282#0 : !torch.vtensor<[1,32,2048,128],f16> + } +} diff --git a/attention/mlir/attention_B1_H32_SQ2048_SKV4096_DH128_fp16.mlir b/attention/mlir/attention_B1_H32_SQ2048_SKV4096_DH128_fp16.mlir new file mode 100644 index 0000000..44ce76d --- /dev/null +++ b/attention/mlir/attention_B1_H32_SQ2048_SKV4096_DH128_fp16.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[1,32,2048,128],f16>, %298 : !torch.vtensor<[1,32,4096,128],f16>, %301 : !torch.vtensor<[1,32,4096,128],f16>) -> !torch.vtensor<[1,32,2048,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[1,32,2048,128],f16>, !torch.vtensor<[1,32,4096,128],f16>, !torch.vtensor<[1,32,4096,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[1,32,2048,128],f16>, !torch.vtensor<[1,32,2048], f32>) + return %282#0 : !torch.vtensor<[1,32,2048,128],f16> + } +} diff --git a/attention/mlir/attention_B1_H32_SQ2048_SKV4096_DH128_fp8.mlir b/attention/mlir/attention_B1_H32_SQ2048_SKV4096_DH128_fp8.mlir new file mode 100644 index 0000000..44ce76d --- /dev/null +++ b/attention/mlir/attention_B1_H32_SQ2048_SKV4096_DH128_fp8.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[1,32,2048,128],f16>, %298 : !torch.vtensor<[1,32,4096,128],f16>, %301 : !torch.vtensor<[1,32,4096,128],f16>) -> !torch.vtensor<[1,32,2048,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[1,32,2048,128],f16>, !torch.vtensor<[1,32,4096,128],f16>, !torch.vtensor<[1,32,4096,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[1,32,2048,128],f16>, !torch.vtensor<[1,32,2048], f32>) + return %282#0 : !torch.vtensor<[1,32,2048,128],f16> + } +} diff --git a/attention/mlir/attention_B1_H32_SQ4096_SKV1024_DH128_f16.mlir b/attention/mlir/attention_B1_H32_SQ4096_SKV1024_DH128_f16.mlir new file mode 100644 index 0000000..2690e4a --- /dev/null +++ b/attention/mlir/attention_B1_H32_SQ4096_SKV1024_DH128_f16.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[1,32,4096,128],f16>, %298 : !torch.vtensor<[1,32,1024,128],f16>, %301 : !torch.vtensor<[1,32,1024,128],f16>) -> !torch.vtensor<[1,32,4096,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[1,32,4096,128],f16>, !torch.vtensor<[1,32,1024,128],f16>, !torch.vtensor<[1,32,1024,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[1,32,4096,128],f16>, !torch.vtensor<[1,32,4096], f32>) + return %282#0 : !torch.vtensor<[1,32,4096,128],f16> + } +} diff --git a/attention/mlir/attention_B1_H32_SQ4096_SKV1024_DH128_f8.mlir b/attention/mlir/attention_B1_H32_SQ4096_SKV1024_DH128_f8.mlir new file mode 100644 index 0000000..2690e4a --- /dev/null +++ b/attention/mlir/attention_B1_H32_SQ4096_SKV1024_DH128_f8.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[1,32,4096,128],f16>, %298 : !torch.vtensor<[1,32,1024,128],f16>, %301 : !torch.vtensor<[1,32,1024,128],f16>) -> !torch.vtensor<[1,32,4096,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[1,32,4096,128],f16>, !torch.vtensor<[1,32,1024,128],f16>, !torch.vtensor<[1,32,1024,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[1,32,4096,128],f16>, !torch.vtensor<[1,32,4096], f32>) + return %282#0 : !torch.vtensor<[1,32,4096,128],f16> + } +} diff --git a/attention/mlir/attention_B1_H32_SQ4096_SKV1024_DH128_fp16.mlir b/attention/mlir/attention_B1_H32_SQ4096_SKV1024_DH128_fp16.mlir new file mode 100644 index 0000000..2690e4a --- /dev/null +++ b/attention/mlir/attention_B1_H32_SQ4096_SKV1024_DH128_fp16.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[1,32,4096,128],f16>, %298 : !torch.vtensor<[1,32,1024,128],f16>, %301 : !torch.vtensor<[1,32,1024,128],f16>) -> !torch.vtensor<[1,32,4096,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[1,32,4096,128],f16>, !torch.vtensor<[1,32,1024,128],f16>, !torch.vtensor<[1,32,1024,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[1,32,4096,128],f16>, !torch.vtensor<[1,32,4096], f32>) + return %282#0 : !torch.vtensor<[1,32,4096,128],f16> + } +} diff --git a/attention/mlir/attention_B1_H32_SQ4096_SKV1024_DH128_fp8.mlir b/attention/mlir/attention_B1_H32_SQ4096_SKV1024_DH128_fp8.mlir new file mode 100644 index 0000000..2690e4a --- /dev/null +++ b/attention/mlir/attention_B1_H32_SQ4096_SKV1024_DH128_fp8.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[1,32,4096,128],f16>, %298 : !torch.vtensor<[1,32,1024,128],f16>, %301 : !torch.vtensor<[1,32,1024,128],f16>) -> !torch.vtensor<[1,32,4096,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[1,32,4096,128],f16>, !torch.vtensor<[1,32,1024,128],f16>, !torch.vtensor<[1,32,1024,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[1,32,4096,128],f16>, !torch.vtensor<[1,32,4096], f32>) + return %282#0 : !torch.vtensor<[1,32,4096,128],f16> + } +} diff --git a/attention/mlir/attention_B1_H32_SQ4096_SKV2048_DH128_f16.mlir b/attention/mlir/attention_B1_H32_SQ4096_SKV2048_DH128_f16.mlir new file mode 100644 index 0000000..87f4c6a --- /dev/null +++ b/attention/mlir/attention_B1_H32_SQ4096_SKV2048_DH128_f16.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[1,32,4096,128],f16>, %298 : !torch.vtensor<[1,32,2048,128],f16>, %301 : !torch.vtensor<[1,32,2048,128],f16>) -> !torch.vtensor<[1,32,4096,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[1,32,4096,128],f16>, !torch.vtensor<[1,32,2048,128],f16>, !torch.vtensor<[1,32,2048,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[1,32,4096,128],f16>, !torch.vtensor<[1,32,4096], f32>) + return %282#0 : !torch.vtensor<[1,32,4096,128],f16> + } +} diff --git a/attention/mlir/attention_B1_H32_SQ4096_SKV2048_DH128_f8.mlir b/attention/mlir/attention_B1_H32_SQ4096_SKV2048_DH128_f8.mlir new file mode 100644 index 0000000..87f4c6a --- /dev/null +++ b/attention/mlir/attention_B1_H32_SQ4096_SKV2048_DH128_f8.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[1,32,4096,128],f16>, %298 : !torch.vtensor<[1,32,2048,128],f16>, %301 : !torch.vtensor<[1,32,2048,128],f16>) -> !torch.vtensor<[1,32,4096,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[1,32,4096,128],f16>, !torch.vtensor<[1,32,2048,128],f16>, !torch.vtensor<[1,32,2048,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[1,32,4096,128],f16>, !torch.vtensor<[1,32,4096], f32>) + return %282#0 : !torch.vtensor<[1,32,4096,128],f16> + } +} diff --git a/attention/mlir/attention_B1_H32_SQ4096_SKV2048_DH128_fp16.mlir b/attention/mlir/attention_B1_H32_SQ4096_SKV2048_DH128_fp16.mlir new file mode 100644 index 0000000..87f4c6a --- /dev/null +++ b/attention/mlir/attention_B1_H32_SQ4096_SKV2048_DH128_fp16.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[1,32,4096,128],f16>, %298 : !torch.vtensor<[1,32,2048,128],f16>, %301 : !torch.vtensor<[1,32,2048,128],f16>) -> !torch.vtensor<[1,32,4096,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[1,32,4096,128],f16>, !torch.vtensor<[1,32,2048,128],f16>, !torch.vtensor<[1,32,2048,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[1,32,4096,128],f16>, !torch.vtensor<[1,32,4096], f32>) + return %282#0 : !torch.vtensor<[1,32,4096,128],f16> + } +} diff --git a/attention/mlir/attention_B1_H32_SQ4096_SKV2048_DH128_fp8.mlir b/attention/mlir/attention_B1_H32_SQ4096_SKV2048_DH128_fp8.mlir new file mode 100644 index 0000000..87f4c6a --- /dev/null +++ b/attention/mlir/attention_B1_H32_SQ4096_SKV2048_DH128_fp8.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[1,32,4096,128],f16>, %298 : !torch.vtensor<[1,32,2048,128],f16>, %301 : !torch.vtensor<[1,32,2048,128],f16>) -> !torch.vtensor<[1,32,4096,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[1,32,4096,128],f16>, !torch.vtensor<[1,32,2048,128],f16>, !torch.vtensor<[1,32,2048,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[1,32,4096,128],f16>, !torch.vtensor<[1,32,4096], f32>) + return %282#0 : !torch.vtensor<[1,32,4096,128],f16> + } +} diff --git a/attention/mlir/attention_B1_H32_SQ4096_SKV4096_DH128_f16.mlir b/attention/mlir/attention_B1_H32_SQ4096_SKV4096_DH128_f16.mlir new file mode 100644 index 0000000..4a9a643 --- /dev/null +++ b/attention/mlir/attention_B1_H32_SQ4096_SKV4096_DH128_f16.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[1,32,4096,128],f16>, %298 : !torch.vtensor<[1,32,4096,128],f16>, %301 : !torch.vtensor<[1,32,4096,128],f16>) -> !torch.vtensor<[1,32,4096,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[1,32,4096,128],f16>, !torch.vtensor<[1,32,4096,128],f16>, !torch.vtensor<[1,32,4096,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[1,32,4096,128],f16>, !torch.vtensor<[1,32,4096], f32>) + return %282#0 : !torch.vtensor<[1,32,4096,128],f16> + } +} diff --git a/attention/mlir/attention_B1_H32_SQ4096_SKV4096_DH128_f8.mlir b/attention/mlir/attention_B1_H32_SQ4096_SKV4096_DH128_f8.mlir new file mode 100644 index 0000000..4a9a643 --- /dev/null +++ b/attention/mlir/attention_B1_H32_SQ4096_SKV4096_DH128_f8.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[1,32,4096,128],f16>, %298 : !torch.vtensor<[1,32,4096,128],f16>, %301 : !torch.vtensor<[1,32,4096,128],f16>) -> !torch.vtensor<[1,32,4096,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[1,32,4096,128],f16>, !torch.vtensor<[1,32,4096,128],f16>, !torch.vtensor<[1,32,4096,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[1,32,4096,128],f16>, !torch.vtensor<[1,32,4096], f32>) + return %282#0 : !torch.vtensor<[1,32,4096,128],f16> + } +} diff --git a/attention/mlir/attention_B1_H32_SQ4096_SKV4096_DH128_fp16.mlir b/attention/mlir/attention_B1_H32_SQ4096_SKV4096_DH128_fp16.mlir new file mode 100644 index 0000000..4a9a643 --- /dev/null +++ b/attention/mlir/attention_B1_H32_SQ4096_SKV4096_DH128_fp16.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[1,32,4096,128],f16>, %298 : !torch.vtensor<[1,32,4096,128],f16>, %301 : !torch.vtensor<[1,32,4096,128],f16>) -> !torch.vtensor<[1,32,4096,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[1,32,4096,128],f16>, !torch.vtensor<[1,32,4096,128],f16>, !torch.vtensor<[1,32,4096,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[1,32,4096,128],f16>, !torch.vtensor<[1,32,4096], f32>) + return %282#0 : !torch.vtensor<[1,32,4096,128],f16> + } +} diff --git a/attention/mlir/attention_B1_H32_SQ4096_SKV4096_DH128_fp8.mlir b/attention/mlir/attention_B1_H32_SQ4096_SKV4096_DH128_fp8.mlir new file mode 100644 index 0000000..4a9a643 --- /dev/null +++ b/attention/mlir/attention_B1_H32_SQ4096_SKV4096_DH128_fp8.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[1,32,4096,128],f16>, %298 : !torch.vtensor<[1,32,4096,128],f16>, %301 : !torch.vtensor<[1,32,4096,128],f16>) -> !torch.vtensor<[1,32,4096,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[1,32,4096,128],f16>, !torch.vtensor<[1,32,4096,128],f16>, !torch.vtensor<[1,32,4096,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[1,32,4096,128],f16>, !torch.vtensor<[1,32,4096], f32>) + return %282#0 : !torch.vtensor<[1,32,4096,128],f16> + } +} diff --git a/attention/mlir/attention_B1_H40_SQ1024_SKV1024_DH128_f16.mlir b/attention/mlir/attention_B1_H40_SQ1024_SKV1024_DH128_f16.mlir new file mode 100644 index 0000000..e55a29d --- /dev/null +++ b/attention/mlir/attention_B1_H40_SQ1024_SKV1024_DH128_f16.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[1,40,1024,128],f16>, %298 : !torch.vtensor<[1,40,1024,128],f16>, %301 : !torch.vtensor<[1,40,1024,128],f16>) -> !torch.vtensor<[1,40,1024,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[1,40,1024,128],f16>, !torch.vtensor<[1,40,1024,128],f16>, !torch.vtensor<[1,40,1024,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[1,40,1024,128],f16>, !torch.vtensor<[1,40,1024], f32>) + return %282#0 : !torch.vtensor<[1,40,1024,128],f16> + } +} diff --git a/attention/mlir/attention_B1_H40_SQ1024_SKV1024_DH128_f8.mlir b/attention/mlir/attention_B1_H40_SQ1024_SKV1024_DH128_f8.mlir new file mode 100644 index 0000000..e55a29d --- /dev/null +++ b/attention/mlir/attention_B1_H40_SQ1024_SKV1024_DH128_f8.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[1,40,1024,128],f16>, %298 : !torch.vtensor<[1,40,1024,128],f16>, %301 : !torch.vtensor<[1,40,1024,128],f16>) -> !torch.vtensor<[1,40,1024,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[1,40,1024,128],f16>, !torch.vtensor<[1,40,1024,128],f16>, !torch.vtensor<[1,40,1024,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[1,40,1024,128],f16>, !torch.vtensor<[1,40,1024], f32>) + return %282#0 : !torch.vtensor<[1,40,1024,128],f16> + } +} diff --git a/attention/mlir/attention_B1_H40_SQ1024_SKV1024_DH128_fp16.mlir b/attention/mlir/attention_B1_H40_SQ1024_SKV1024_DH128_fp16.mlir new file mode 100644 index 0000000..e55a29d --- /dev/null +++ b/attention/mlir/attention_B1_H40_SQ1024_SKV1024_DH128_fp16.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[1,40,1024,128],f16>, %298 : !torch.vtensor<[1,40,1024,128],f16>, %301 : !torch.vtensor<[1,40,1024,128],f16>) -> !torch.vtensor<[1,40,1024,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[1,40,1024,128],f16>, !torch.vtensor<[1,40,1024,128],f16>, !torch.vtensor<[1,40,1024,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[1,40,1024,128],f16>, !torch.vtensor<[1,40,1024], f32>) + return %282#0 : !torch.vtensor<[1,40,1024,128],f16> + } +} diff --git a/attention/mlir/attention_B1_H40_SQ1024_SKV1024_DH128_fp8.mlir b/attention/mlir/attention_B1_H40_SQ1024_SKV1024_DH128_fp8.mlir new file mode 100644 index 0000000..e55a29d --- /dev/null +++ b/attention/mlir/attention_B1_H40_SQ1024_SKV1024_DH128_fp8.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[1,40,1024,128],f16>, %298 : !torch.vtensor<[1,40,1024,128],f16>, %301 : !torch.vtensor<[1,40,1024,128],f16>) -> !torch.vtensor<[1,40,1024,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[1,40,1024,128],f16>, !torch.vtensor<[1,40,1024,128],f16>, !torch.vtensor<[1,40,1024,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[1,40,1024,128],f16>, !torch.vtensor<[1,40,1024], f32>) + return %282#0 : !torch.vtensor<[1,40,1024,128],f16> + } +} diff --git a/attention/mlir/attention_B1_H40_SQ1024_SKV2048_DH128_f16.mlir b/attention/mlir/attention_B1_H40_SQ1024_SKV2048_DH128_f16.mlir new file mode 100644 index 0000000..5a8c0d7 --- /dev/null +++ b/attention/mlir/attention_B1_H40_SQ1024_SKV2048_DH128_f16.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[1,40,1024,128],f16>, %298 : !torch.vtensor<[1,40,2048,128],f16>, %301 : !torch.vtensor<[1,40,2048,128],f16>) -> !torch.vtensor<[1,40,1024,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[1,40,1024,128],f16>, !torch.vtensor<[1,40,2048,128],f16>, !torch.vtensor<[1,40,2048,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[1,40,1024,128],f16>, !torch.vtensor<[1,40,1024], f32>) + return %282#0 : !torch.vtensor<[1,40,1024,128],f16> + } +} diff --git a/attention/mlir/attention_B1_H40_SQ1024_SKV2048_DH128_f8.mlir b/attention/mlir/attention_B1_H40_SQ1024_SKV2048_DH128_f8.mlir new file mode 100644 index 0000000..5a8c0d7 --- /dev/null +++ b/attention/mlir/attention_B1_H40_SQ1024_SKV2048_DH128_f8.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[1,40,1024,128],f16>, %298 : !torch.vtensor<[1,40,2048,128],f16>, %301 : !torch.vtensor<[1,40,2048,128],f16>) -> !torch.vtensor<[1,40,1024,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[1,40,1024,128],f16>, !torch.vtensor<[1,40,2048,128],f16>, !torch.vtensor<[1,40,2048,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[1,40,1024,128],f16>, !torch.vtensor<[1,40,1024], f32>) + return %282#0 : !torch.vtensor<[1,40,1024,128],f16> + } +} diff --git a/attention/mlir/attention_B1_H40_SQ1024_SKV2048_DH128_fp16.mlir b/attention/mlir/attention_B1_H40_SQ1024_SKV2048_DH128_fp16.mlir new file mode 100644 index 0000000..5a8c0d7 --- /dev/null +++ b/attention/mlir/attention_B1_H40_SQ1024_SKV2048_DH128_fp16.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[1,40,1024,128],f16>, %298 : !torch.vtensor<[1,40,2048,128],f16>, %301 : !torch.vtensor<[1,40,2048,128],f16>) -> !torch.vtensor<[1,40,1024,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[1,40,1024,128],f16>, !torch.vtensor<[1,40,2048,128],f16>, !torch.vtensor<[1,40,2048,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[1,40,1024,128],f16>, !torch.vtensor<[1,40,1024], f32>) + return %282#0 : !torch.vtensor<[1,40,1024,128],f16> + } +} diff --git a/attention/mlir/attention_B1_H40_SQ1024_SKV2048_DH128_fp8.mlir b/attention/mlir/attention_B1_H40_SQ1024_SKV2048_DH128_fp8.mlir new file mode 100644 index 0000000..5a8c0d7 --- /dev/null +++ b/attention/mlir/attention_B1_H40_SQ1024_SKV2048_DH128_fp8.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[1,40,1024,128],f16>, %298 : !torch.vtensor<[1,40,2048,128],f16>, %301 : !torch.vtensor<[1,40,2048,128],f16>) -> !torch.vtensor<[1,40,1024,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[1,40,1024,128],f16>, !torch.vtensor<[1,40,2048,128],f16>, !torch.vtensor<[1,40,2048,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[1,40,1024,128],f16>, !torch.vtensor<[1,40,1024], f32>) + return %282#0 : !torch.vtensor<[1,40,1024,128],f16> + } +} diff --git a/attention/mlir/attention_B1_H40_SQ1024_SKV4096_DH128_f16.mlir b/attention/mlir/attention_B1_H40_SQ1024_SKV4096_DH128_f16.mlir new file mode 100644 index 0000000..00f1de6 --- /dev/null +++ b/attention/mlir/attention_B1_H40_SQ1024_SKV4096_DH128_f16.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[1,40,1024,128],f16>, %298 : !torch.vtensor<[1,40,4096,128],f16>, %301 : !torch.vtensor<[1,40,4096,128],f16>) -> !torch.vtensor<[1,40,1024,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[1,40,1024,128],f16>, !torch.vtensor<[1,40,4096,128],f16>, !torch.vtensor<[1,40,4096,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[1,40,1024,128],f16>, !torch.vtensor<[1,40,1024], f32>) + return %282#0 : !torch.vtensor<[1,40,1024,128],f16> + } +} diff --git a/attention/mlir/attention_B1_H40_SQ1024_SKV4096_DH128_f8.mlir b/attention/mlir/attention_B1_H40_SQ1024_SKV4096_DH128_f8.mlir new file mode 100644 index 0000000..00f1de6 --- /dev/null +++ b/attention/mlir/attention_B1_H40_SQ1024_SKV4096_DH128_f8.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[1,40,1024,128],f16>, %298 : !torch.vtensor<[1,40,4096,128],f16>, %301 : !torch.vtensor<[1,40,4096,128],f16>) -> !torch.vtensor<[1,40,1024,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[1,40,1024,128],f16>, !torch.vtensor<[1,40,4096,128],f16>, !torch.vtensor<[1,40,4096,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[1,40,1024,128],f16>, !torch.vtensor<[1,40,1024], f32>) + return %282#0 : !torch.vtensor<[1,40,1024,128],f16> + } +} diff --git a/attention/mlir/attention_B1_H40_SQ1024_SKV4096_DH128_fp16.mlir b/attention/mlir/attention_B1_H40_SQ1024_SKV4096_DH128_fp16.mlir new file mode 100644 index 0000000..00f1de6 --- /dev/null +++ b/attention/mlir/attention_B1_H40_SQ1024_SKV4096_DH128_fp16.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[1,40,1024,128],f16>, %298 : !torch.vtensor<[1,40,4096,128],f16>, %301 : !torch.vtensor<[1,40,4096,128],f16>) -> !torch.vtensor<[1,40,1024,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[1,40,1024,128],f16>, !torch.vtensor<[1,40,4096,128],f16>, !torch.vtensor<[1,40,4096,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[1,40,1024,128],f16>, !torch.vtensor<[1,40,1024], f32>) + return %282#0 : !torch.vtensor<[1,40,1024,128],f16> + } +} diff --git a/attention/mlir/attention_B1_H40_SQ1024_SKV4096_DH128_fp8.mlir b/attention/mlir/attention_B1_H40_SQ1024_SKV4096_DH128_fp8.mlir new file mode 100644 index 0000000..00f1de6 --- /dev/null +++ b/attention/mlir/attention_B1_H40_SQ1024_SKV4096_DH128_fp8.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[1,40,1024,128],f16>, %298 : !torch.vtensor<[1,40,4096,128],f16>, %301 : !torch.vtensor<[1,40,4096,128],f16>) -> !torch.vtensor<[1,40,1024,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[1,40,1024,128],f16>, !torch.vtensor<[1,40,4096,128],f16>, !torch.vtensor<[1,40,4096,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[1,40,1024,128],f16>, !torch.vtensor<[1,40,1024], f32>) + return %282#0 : !torch.vtensor<[1,40,1024,128],f16> + } +} diff --git a/attention/mlir/attention_B1_H40_SQ2048_SKV1024_DH128_f16.mlir b/attention/mlir/attention_B1_H40_SQ2048_SKV1024_DH128_f16.mlir new file mode 100644 index 0000000..5204bd7 --- /dev/null +++ b/attention/mlir/attention_B1_H40_SQ2048_SKV1024_DH128_f16.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[1,40,2048,128],f16>, %298 : !torch.vtensor<[1,40,1024,128],f16>, %301 : !torch.vtensor<[1,40,1024,128],f16>) -> !torch.vtensor<[1,40,2048,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[1,40,2048,128],f16>, !torch.vtensor<[1,40,1024,128],f16>, !torch.vtensor<[1,40,1024,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[1,40,2048,128],f16>, !torch.vtensor<[1,40,2048], f32>) + return %282#0 : !torch.vtensor<[1,40,2048,128],f16> + } +} diff --git a/attention/mlir/attention_B1_H40_SQ2048_SKV1024_DH128_f8.mlir b/attention/mlir/attention_B1_H40_SQ2048_SKV1024_DH128_f8.mlir new file mode 100644 index 0000000..5204bd7 --- /dev/null +++ b/attention/mlir/attention_B1_H40_SQ2048_SKV1024_DH128_f8.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[1,40,2048,128],f16>, %298 : !torch.vtensor<[1,40,1024,128],f16>, %301 : !torch.vtensor<[1,40,1024,128],f16>) -> !torch.vtensor<[1,40,2048,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[1,40,2048,128],f16>, !torch.vtensor<[1,40,1024,128],f16>, !torch.vtensor<[1,40,1024,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[1,40,2048,128],f16>, !torch.vtensor<[1,40,2048], f32>) + return %282#0 : !torch.vtensor<[1,40,2048,128],f16> + } +} diff --git a/attention/mlir/attention_B1_H40_SQ2048_SKV1024_DH128_fp16.mlir b/attention/mlir/attention_B1_H40_SQ2048_SKV1024_DH128_fp16.mlir new file mode 100644 index 0000000..5204bd7 --- /dev/null +++ b/attention/mlir/attention_B1_H40_SQ2048_SKV1024_DH128_fp16.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[1,40,2048,128],f16>, %298 : !torch.vtensor<[1,40,1024,128],f16>, %301 : !torch.vtensor<[1,40,1024,128],f16>) -> !torch.vtensor<[1,40,2048,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[1,40,2048,128],f16>, !torch.vtensor<[1,40,1024,128],f16>, !torch.vtensor<[1,40,1024,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[1,40,2048,128],f16>, !torch.vtensor<[1,40,2048], f32>) + return %282#0 : !torch.vtensor<[1,40,2048,128],f16> + } +} diff --git a/attention/mlir/attention_B1_H40_SQ2048_SKV1024_DH128_fp8.mlir b/attention/mlir/attention_B1_H40_SQ2048_SKV1024_DH128_fp8.mlir new file mode 100644 index 0000000..5204bd7 --- /dev/null +++ b/attention/mlir/attention_B1_H40_SQ2048_SKV1024_DH128_fp8.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[1,40,2048,128],f16>, %298 : !torch.vtensor<[1,40,1024,128],f16>, %301 : !torch.vtensor<[1,40,1024,128],f16>) -> !torch.vtensor<[1,40,2048,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[1,40,2048,128],f16>, !torch.vtensor<[1,40,1024,128],f16>, !torch.vtensor<[1,40,1024,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[1,40,2048,128],f16>, !torch.vtensor<[1,40,2048], f32>) + return %282#0 : !torch.vtensor<[1,40,2048,128],f16> + } +} diff --git a/attention/mlir/attention_B1_H40_SQ2048_SKV2048_DH128_f16.mlir b/attention/mlir/attention_B1_H40_SQ2048_SKV2048_DH128_f16.mlir new file mode 100644 index 0000000..c9761e6 --- /dev/null +++ b/attention/mlir/attention_B1_H40_SQ2048_SKV2048_DH128_f16.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[1,40,2048,128],f16>, %298 : !torch.vtensor<[1,40,2048,128],f16>, %301 : !torch.vtensor<[1,40,2048,128],f16>) -> !torch.vtensor<[1,40,2048,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[1,40,2048,128],f16>, !torch.vtensor<[1,40,2048,128],f16>, !torch.vtensor<[1,40,2048,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[1,40,2048,128],f16>, !torch.vtensor<[1,40,2048], f32>) + return %282#0 : !torch.vtensor<[1,40,2048,128],f16> + } +} diff --git a/attention/mlir/attention_B1_H40_SQ2048_SKV2048_DH128_f8.mlir b/attention/mlir/attention_B1_H40_SQ2048_SKV2048_DH128_f8.mlir new file mode 100644 index 0000000..c9761e6 --- /dev/null +++ b/attention/mlir/attention_B1_H40_SQ2048_SKV2048_DH128_f8.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[1,40,2048,128],f16>, %298 : !torch.vtensor<[1,40,2048,128],f16>, %301 : !torch.vtensor<[1,40,2048,128],f16>) -> !torch.vtensor<[1,40,2048,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[1,40,2048,128],f16>, !torch.vtensor<[1,40,2048,128],f16>, !torch.vtensor<[1,40,2048,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[1,40,2048,128],f16>, !torch.vtensor<[1,40,2048], f32>) + return %282#0 : !torch.vtensor<[1,40,2048,128],f16> + } +} diff --git a/attention/mlir/attention_B1_H40_SQ2048_SKV2048_DH128_fp16.mlir b/attention/mlir/attention_B1_H40_SQ2048_SKV2048_DH128_fp16.mlir new file mode 100644 index 0000000..c9761e6 --- /dev/null +++ b/attention/mlir/attention_B1_H40_SQ2048_SKV2048_DH128_fp16.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[1,40,2048,128],f16>, %298 : !torch.vtensor<[1,40,2048,128],f16>, %301 : !torch.vtensor<[1,40,2048,128],f16>) -> !torch.vtensor<[1,40,2048,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[1,40,2048,128],f16>, !torch.vtensor<[1,40,2048,128],f16>, !torch.vtensor<[1,40,2048,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[1,40,2048,128],f16>, !torch.vtensor<[1,40,2048], f32>) + return %282#0 : !torch.vtensor<[1,40,2048,128],f16> + } +} diff --git a/attention/mlir/attention_B1_H40_SQ2048_SKV2048_DH128_fp8.mlir b/attention/mlir/attention_B1_H40_SQ2048_SKV2048_DH128_fp8.mlir new file mode 100644 index 0000000..c9761e6 --- /dev/null +++ b/attention/mlir/attention_B1_H40_SQ2048_SKV2048_DH128_fp8.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[1,40,2048,128],f16>, %298 : !torch.vtensor<[1,40,2048,128],f16>, %301 : !torch.vtensor<[1,40,2048,128],f16>) -> !torch.vtensor<[1,40,2048,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[1,40,2048,128],f16>, !torch.vtensor<[1,40,2048,128],f16>, !torch.vtensor<[1,40,2048,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[1,40,2048,128],f16>, !torch.vtensor<[1,40,2048], f32>) + return %282#0 : !torch.vtensor<[1,40,2048,128],f16> + } +} diff --git a/attention/mlir/attention_B1_H40_SQ2048_SKV4096_DH128_f16.mlir b/attention/mlir/attention_B1_H40_SQ2048_SKV4096_DH128_f16.mlir new file mode 100644 index 0000000..e99a61c --- /dev/null +++ b/attention/mlir/attention_B1_H40_SQ2048_SKV4096_DH128_f16.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[1,40,2048,128],f16>, %298 : !torch.vtensor<[1,40,4096,128],f16>, %301 : !torch.vtensor<[1,40,4096,128],f16>) -> !torch.vtensor<[1,40,2048,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[1,40,2048,128],f16>, !torch.vtensor<[1,40,4096,128],f16>, !torch.vtensor<[1,40,4096,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[1,40,2048,128],f16>, !torch.vtensor<[1,40,2048], f32>) + return %282#0 : !torch.vtensor<[1,40,2048,128],f16> + } +} diff --git a/attention/mlir/attention_B1_H40_SQ2048_SKV4096_DH128_f8.mlir b/attention/mlir/attention_B1_H40_SQ2048_SKV4096_DH128_f8.mlir new file mode 100644 index 0000000..e99a61c --- /dev/null +++ b/attention/mlir/attention_B1_H40_SQ2048_SKV4096_DH128_f8.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[1,40,2048,128],f16>, %298 : !torch.vtensor<[1,40,4096,128],f16>, %301 : !torch.vtensor<[1,40,4096,128],f16>) -> !torch.vtensor<[1,40,2048,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[1,40,2048,128],f16>, !torch.vtensor<[1,40,4096,128],f16>, !torch.vtensor<[1,40,4096,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[1,40,2048,128],f16>, !torch.vtensor<[1,40,2048], f32>) + return %282#0 : !torch.vtensor<[1,40,2048,128],f16> + } +} diff --git a/attention/mlir/attention_B1_H40_SQ2048_SKV4096_DH128_fp16.mlir b/attention/mlir/attention_B1_H40_SQ2048_SKV4096_DH128_fp16.mlir new file mode 100644 index 0000000..e99a61c --- /dev/null +++ b/attention/mlir/attention_B1_H40_SQ2048_SKV4096_DH128_fp16.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[1,40,2048,128],f16>, %298 : !torch.vtensor<[1,40,4096,128],f16>, %301 : !torch.vtensor<[1,40,4096,128],f16>) -> !torch.vtensor<[1,40,2048,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[1,40,2048,128],f16>, !torch.vtensor<[1,40,4096,128],f16>, !torch.vtensor<[1,40,4096,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[1,40,2048,128],f16>, !torch.vtensor<[1,40,2048], f32>) + return %282#0 : !torch.vtensor<[1,40,2048,128],f16> + } +} diff --git a/attention/mlir/attention_B1_H40_SQ2048_SKV4096_DH128_fp8.mlir b/attention/mlir/attention_B1_H40_SQ2048_SKV4096_DH128_fp8.mlir new file mode 100644 index 0000000..e99a61c --- /dev/null +++ b/attention/mlir/attention_B1_H40_SQ2048_SKV4096_DH128_fp8.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[1,40,2048,128],f16>, %298 : !torch.vtensor<[1,40,4096,128],f16>, %301 : !torch.vtensor<[1,40,4096,128],f16>) -> !torch.vtensor<[1,40,2048,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[1,40,2048,128],f16>, !torch.vtensor<[1,40,4096,128],f16>, !torch.vtensor<[1,40,4096,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[1,40,2048,128],f16>, !torch.vtensor<[1,40,2048], f32>) + return %282#0 : !torch.vtensor<[1,40,2048,128],f16> + } +} diff --git a/attention/mlir/attention_B1_H40_SQ4096_SKV1024_DH128_f16.mlir b/attention/mlir/attention_B1_H40_SQ4096_SKV1024_DH128_f16.mlir new file mode 100644 index 0000000..d05fa28 --- /dev/null +++ b/attention/mlir/attention_B1_H40_SQ4096_SKV1024_DH128_f16.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[1,40,4096,128],f16>, %298 : !torch.vtensor<[1,40,1024,128],f16>, %301 : !torch.vtensor<[1,40,1024,128],f16>) -> !torch.vtensor<[1,40,4096,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[1,40,4096,128],f16>, !torch.vtensor<[1,40,1024,128],f16>, !torch.vtensor<[1,40,1024,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[1,40,4096,128],f16>, !torch.vtensor<[1,40,4096], f32>) + return %282#0 : !torch.vtensor<[1,40,4096,128],f16> + } +} diff --git a/attention/mlir/attention_B1_H40_SQ4096_SKV1024_DH128_f8.mlir b/attention/mlir/attention_B1_H40_SQ4096_SKV1024_DH128_f8.mlir new file mode 100644 index 0000000..d05fa28 --- /dev/null +++ b/attention/mlir/attention_B1_H40_SQ4096_SKV1024_DH128_f8.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[1,40,4096,128],f16>, %298 : !torch.vtensor<[1,40,1024,128],f16>, %301 : !torch.vtensor<[1,40,1024,128],f16>) -> !torch.vtensor<[1,40,4096,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[1,40,4096,128],f16>, !torch.vtensor<[1,40,1024,128],f16>, !torch.vtensor<[1,40,1024,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[1,40,4096,128],f16>, !torch.vtensor<[1,40,4096], f32>) + return %282#0 : !torch.vtensor<[1,40,4096,128],f16> + } +} diff --git a/attention/mlir/attention_B1_H40_SQ4096_SKV1024_DH128_fp16.mlir b/attention/mlir/attention_B1_H40_SQ4096_SKV1024_DH128_fp16.mlir new file mode 100644 index 0000000..d05fa28 --- /dev/null +++ b/attention/mlir/attention_B1_H40_SQ4096_SKV1024_DH128_fp16.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[1,40,4096,128],f16>, %298 : !torch.vtensor<[1,40,1024,128],f16>, %301 : !torch.vtensor<[1,40,1024,128],f16>) -> !torch.vtensor<[1,40,4096,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[1,40,4096,128],f16>, !torch.vtensor<[1,40,1024,128],f16>, !torch.vtensor<[1,40,1024,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[1,40,4096,128],f16>, !torch.vtensor<[1,40,4096], f32>) + return %282#0 : !torch.vtensor<[1,40,4096,128],f16> + } +} diff --git a/attention/mlir/attention_B1_H40_SQ4096_SKV1024_DH128_fp8.mlir b/attention/mlir/attention_B1_H40_SQ4096_SKV1024_DH128_fp8.mlir new file mode 100644 index 0000000..d05fa28 --- /dev/null +++ b/attention/mlir/attention_B1_H40_SQ4096_SKV1024_DH128_fp8.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[1,40,4096,128],f16>, %298 : !torch.vtensor<[1,40,1024,128],f16>, %301 : !torch.vtensor<[1,40,1024,128],f16>) -> !torch.vtensor<[1,40,4096,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[1,40,4096,128],f16>, !torch.vtensor<[1,40,1024,128],f16>, !torch.vtensor<[1,40,1024,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[1,40,4096,128],f16>, !torch.vtensor<[1,40,4096], f32>) + return %282#0 : !torch.vtensor<[1,40,4096,128],f16> + } +} diff --git a/attention/mlir/attention_B1_H40_SQ4096_SKV2048_DH128_f16.mlir b/attention/mlir/attention_B1_H40_SQ4096_SKV2048_DH128_f16.mlir new file mode 100644 index 0000000..8d1a244 --- /dev/null +++ b/attention/mlir/attention_B1_H40_SQ4096_SKV2048_DH128_f16.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[1,40,4096,128],f16>, %298 : !torch.vtensor<[1,40,2048,128],f16>, %301 : !torch.vtensor<[1,40,2048,128],f16>) -> !torch.vtensor<[1,40,4096,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[1,40,4096,128],f16>, !torch.vtensor<[1,40,2048,128],f16>, !torch.vtensor<[1,40,2048,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[1,40,4096,128],f16>, !torch.vtensor<[1,40,4096], f32>) + return %282#0 : !torch.vtensor<[1,40,4096,128],f16> + } +} diff --git a/attention/mlir/attention_B1_H40_SQ4096_SKV2048_DH128_f8.mlir b/attention/mlir/attention_B1_H40_SQ4096_SKV2048_DH128_f8.mlir new file mode 100644 index 0000000..8d1a244 --- /dev/null +++ b/attention/mlir/attention_B1_H40_SQ4096_SKV2048_DH128_f8.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[1,40,4096,128],f16>, %298 : !torch.vtensor<[1,40,2048,128],f16>, %301 : !torch.vtensor<[1,40,2048,128],f16>) -> !torch.vtensor<[1,40,4096,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[1,40,4096,128],f16>, !torch.vtensor<[1,40,2048,128],f16>, !torch.vtensor<[1,40,2048,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[1,40,4096,128],f16>, !torch.vtensor<[1,40,4096], f32>) + return %282#0 : !torch.vtensor<[1,40,4096,128],f16> + } +} diff --git a/attention/mlir/attention_B1_H40_SQ4096_SKV2048_DH128_fp16.mlir b/attention/mlir/attention_B1_H40_SQ4096_SKV2048_DH128_fp16.mlir new file mode 100644 index 0000000..8d1a244 --- /dev/null +++ b/attention/mlir/attention_B1_H40_SQ4096_SKV2048_DH128_fp16.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[1,40,4096,128],f16>, %298 : !torch.vtensor<[1,40,2048,128],f16>, %301 : !torch.vtensor<[1,40,2048,128],f16>) -> !torch.vtensor<[1,40,4096,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[1,40,4096,128],f16>, !torch.vtensor<[1,40,2048,128],f16>, !torch.vtensor<[1,40,2048,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[1,40,4096,128],f16>, !torch.vtensor<[1,40,4096], f32>) + return %282#0 : !torch.vtensor<[1,40,4096,128],f16> + } +} diff --git a/attention/mlir/attention_B1_H40_SQ4096_SKV2048_DH128_fp8.mlir b/attention/mlir/attention_B1_H40_SQ4096_SKV2048_DH128_fp8.mlir new file mode 100644 index 0000000..8d1a244 --- /dev/null +++ b/attention/mlir/attention_B1_H40_SQ4096_SKV2048_DH128_fp8.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[1,40,4096,128],f16>, %298 : !torch.vtensor<[1,40,2048,128],f16>, %301 : !torch.vtensor<[1,40,2048,128],f16>) -> !torch.vtensor<[1,40,4096,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[1,40,4096,128],f16>, !torch.vtensor<[1,40,2048,128],f16>, !torch.vtensor<[1,40,2048,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[1,40,4096,128],f16>, !torch.vtensor<[1,40,4096], f32>) + return %282#0 : !torch.vtensor<[1,40,4096,128],f16> + } +} diff --git a/attention/mlir/attention_B1_H40_SQ4096_SKV4096_DH128_f16.mlir b/attention/mlir/attention_B1_H40_SQ4096_SKV4096_DH128_f16.mlir new file mode 100644 index 0000000..736628a --- /dev/null +++ b/attention/mlir/attention_B1_H40_SQ4096_SKV4096_DH128_f16.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[1,40,4096,128],f16>, %298 : !torch.vtensor<[1,40,4096,128],f16>, %301 : !torch.vtensor<[1,40,4096,128],f16>) -> !torch.vtensor<[1,40,4096,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[1,40,4096,128],f16>, !torch.vtensor<[1,40,4096,128],f16>, !torch.vtensor<[1,40,4096,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[1,40,4096,128],f16>, !torch.vtensor<[1,40,4096], f32>) + return %282#0 : !torch.vtensor<[1,40,4096,128],f16> + } +} diff --git a/attention/mlir/attention_B1_H40_SQ4096_SKV4096_DH128_f8.mlir b/attention/mlir/attention_B1_H40_SQ4096_SKV4096_DH128_f8.mlir new file mode 100644 index 0000000..736628a --- /dev/null +++ b/attention/mlir/attention_B1_H40_SQ4096_SKV4096_DH128_f8.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[1,40,4096,128],f16>, %298 : !torch.vtensor<[1,40,4096,128],f16>, %301 : !torch.vtensor<[1,40,4096,128],f16>) -> !torch.vtensor<[1,40,4096,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[1,40,4096,128],f16>, !torch.vtensor<[1,40,4096,128],f16>, !torch.vtensor<[1,40,4096,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[1,40,4096,128],f16>, !torch.vtensor<[1,40,4096], f32>) + return %282#0 : !torch.vtensor<[1,40,4096,128],f16> + } +} diff --git a/attention/mlir/attention_B1_H40_SQ4096_SKV4096_DH128_fp16.mlir b/attention/mlir/attention_B1_H40_SQ4096_SKV4096_DH128_fp16.mlir new file mode 100644 index 0000000..736628a --- /dev/null +++ b/attention/mlir/attention_B1_H40_SQ4096_SKV4096_DH128_fp16.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[1,40,4096,128],f16>, %298 : !torch.vtensor<[1,40,4096,128],f16>, %301 : !torch.vtensor<[1,40,4096,128],f16>) -> !torch.vtensor<[1,40,4096,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[1,40,4096,128],f16>, !torch.vtensor<[1,40,4096,128],f16>, !torch.vtensor<[1,40,4096,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[1,40,4096,128],f16>, !torch.vtensor<[1,40,4096], f32>) + return %282#0 : !torch.vtensor<[1,40,4096,128],f16> + } +} diff --git a/attention/mlir/attention_B1_H40_SQ4096_SKV4096_DH128_fp8.mlir b/attention/mlir/attention_B1_H40_SQ4096_SKV4096_DH128_fp8.mlir new file mode 100644 index 0000000..736628a --- /dev/null +++ b/attention/mlir/attention_B1_H40_SQ4096_SKV4096_DH128_fp8.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[1,40,4096,128],f16>, %298 : !torch.vtensor<[1,40,4096,128],f16>, %301 : !torch.vtensor<[1,40,4096,128],f16>) -> !torch.vtensor<[1,40,4096,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[1,40,4096,128],f16>, !torch.vtensor<[1,40,4096,128],f16>, !torch.vtensor<[1,40,4096,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[1,40,4096,128],f16>, !torch.vtensor<[1,40,4096], f32>) + return %282#0 : !torch.vtensor<[1,40,4096,128],f16> + } +} diff --git a/attention/mlir/attention_B1_H64_SQ1024_SKV1024_DH128_f16.mlir b/attention/mlir/attention_B1_H64_SQ1024_SKV1024_DH128_f16.mlir new file mode 100644 index 0000000..1e32ec9 --- /dev/null +++ b/attention/mlir/attention_B1_H64_SQ1024_SKV1024_DH128_f16.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[1,64,1024,128],f16>, %298 : !torch.vtensor<[1,64,1024,128],f16>, %301 : !torch.vtensor<[1,64,1024,128],f16>) -> !torch.vtensor<[1,64,1024,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[1,64,1024,128],f16>, !torch.vtensor<[1,64,1024,128],f16>, !torch.vtensor<[1,64,1024,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[1,64,1024,128],f16>, !torch.vtensor<[1,64,1024], f32>) + return %282#0 : !torch.vtensor<[1,64,1024,128],f16> + } +} diff --git a/attention/mlir/attention_B1_H64_SQ1024_SKV1024_DH128_f8.mlir b/attention/mlir/attention_B1_H64_SQ1024_SKV1024_DH128_f8.mlir new file mode 100644 index 0000000..1e32ec9 --- /dev/null +++ b/attention/mlir/attention_B1_H64_SQ1024_SKV1024_DH128_f8.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[1,64,1024,128],f16>, %298 : !torch.vtensor<[1,64,1024,128],f16>, %301 : !torch.vtensor<[1,64,1024,128],f16>) -> !torch.vtensor<[1,64,1024,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[1,64,1024,128],f16>, !torch.vtensor<[1,64,1024,128],f16>, !torch.vtensor<[1,64,1024,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[1,64,1024,128],f16>, !torch.vtensor<[1,64,1024], f32>) + return %282#0 : !torch.vtensor<[1,64,1024,128],f16> + } +} diff --git a/attention/mlir/attention_B1_H64_SQ1024_SKV1024_DH128_fp16.mlir b/attention/mlir/attention_B1_H64_SQ1024_SKV1024_DH128_fp16.mlir new file mode 100644 index 0000000..1e32ec9 --- /dev/null +++ b/attention/mlir/attention_B1_H64_SQ1024_SKV1024_DH128_fp16.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[1,64,1024,128],f16>, %298 : !torch.vtensor<[1,64,1024,128],f16>, %301 : !torch.vtensor<[1,64,1024,128],f16>) -> !torch.vtensor<[1,64,1024,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[1,64,1024,128],f16>, !torch.vtensor<[1,64,1024,128],f16>, !torch.vtensor<[1,64,1024,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[1,64,1024,128],f16>, !torch.vtensor<[1,64,1024], f32>) + return %282#0 : !torch.vtensor<[1,64,1024,128],f16> + } +} diff --git a/attention/mlir/attention_B1_H64_SQ1024_SKV1024_DH128_fp8.mlir b/attention/mlir/attention_B1_H64_SQ1024_SKV1024_DH128_fp8.mlir new file mode 100644 index 0000000..1e32ec9 --- /dev/null +++ b/attention/mlir/attention_B1_H64_SQ1024_SKV1024_DH128_fp8.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[1,64,1024,128],f16>, %298 : !torch.vtensor<[1,64,1024,128],f16>, %301 : !torch.vtensor<[1,64,1024,128],f16>) -> !torch.vtensor<[1,64,1024,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[1,64,1024,128],f16>, !torch.vtensor<[1,64,1024,128],f16>, !torch.vtensor<[1,64,1024,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[1,64,1024,128],f16>, !torch.vtensor<[1,64,1024], f32>) + return %282#0 : !torch.vtensor<[1,64,1024,128],f16> + } +} diff --git a/attention/mlir/attention_B1_H64_SQ1024_SKV2048_DH128_f16.mlir b/attention/mlir/attention_B1_H64_SQ1024_SKV2048_DH128_f16.mlir new file mode 100644 index 0000000..a0d8435 --- /dev/null +++ b/attention/mlir/attention_B1_H64_SQ1024_SKV2048_DH128_f16.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[1,64,1024,128],f16>, %298 : !torch.vtensor<[1,64,2048,128],f16>, %301 : !torch.vtensor<[1,64,2048,128],f16>) -> !torch.vtensor<[1,64,1024,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[1,64,1024,128],f16>, !torch.vtensor<[1,64,2048,128],f16>, !torch.vtensor<[1,64,2048,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[1,64,1024,128],f16>, !torch.vtensor<[1,64,1024], f32>) + return %282#0 : !torch.vtensor<[1,64,1024,128],f16> + } +} diff --git a/attention/mlir/attention_B1_H64_SQ1024_SKV2048_DH128_f8.mlir b/attention/mlir/attention_B1_H64_SQ1024_SKV2048_DH128_f8.mlir new file mode 100644 index 0000000..a0d8435 --- /dev/null +++ b/attention/mlir/attention_B1_H64_SQ1024_SKV2048_DH128_f8.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[1,64,1024,128],f16>, %298 : !torch.vtensor<[1,64,2048,128],f16>, %301 : !torch.vtensor<[1,64,2048,128],f16>) -> !torch.vtensor<[1,64,1024,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[1,64,1024,128],f16>, !torch.vtensor<[1,64,2048,128],f16>, !torch.vtensor<[1,64,2048,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[1,64,1024,128],f16>, !torch.vtensor<[1,64,1024], f32>) + return %282#0 : !torch.vtensor<[1,64,1024,128],f16> + } +} diff --git a/attention/mlir/attention_B1_H64_SQ1024_SKV2048_DH128_fp16.mlir b/attention/mlir/attention_B1_H64_SQ1024_SKV2048_DH128_fp16.mlir new file mode 100644 index 0000000..a0d8435 --- /dev/null +++ b/attention/mlir/attention_B1_H64_SQ1024_SKV2048_DH128_fp16.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[1,64,1024,128],f16>, %298 : !torch.vtensor<[1,64,2048,128],f16>, %301 : !torch.vtensor<[1,64,2048,128],f16>) -> !torch.vtensor<[1,64,1024,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[1,64,1024,128],f16>, !torch.vtensor<[1,64,2048,128],f16>, !torch.vtensor<[1,64,2048,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[1,64,1024,128],f16>, !torch.vtensor<[1,64,1024], f32>) + return %282#0 : !torch.vtensor<[1,64,1024,128],f16> + } +} diff --git a/attention/mlir/attention_B1_H64_SQ1024_SKV2048_DH128_fp8.mlir b/attention/mlir/attention_B1_H64_SQ1024_SKV2048_DH128_fp8.mlir new file mode 100644 index 0000000..a0d8435 --- /dev/null +++ b/attention/mlir/attention_B1_H64_SQ1024_SKV2048_DH128_fp8.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[1,64,1024,128],f16>, %298 : !torch.vtensor<[1,64,2048,128],f16>, %301 : !torch.vtensor<[1,64,2048,128],f16>) -> !torch.vtensor<[1,64,1024,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[1,64,1024,128],f16>, !torch.vtensor<[1,64,2048,128],f16>, !torch.vtensor<[1,64,2048,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[1,64,1024,128],f16>, !torch.vtensor<[1,64,1024], f32>) + return %282#0 : !torch.vtensor<[1,64,1024,128],f16> + } +} diff --git a/attention/mlir/attention_B1_H64_SQ1024_SKV4096_DH128_f16.mlir b/attention/mlir/attention_B1_H64_SQ1024_SKV4096_DH128_f16.mlir new file mode 100644 index 0000000..bc28d65 --- /dev/null +++ b/attention/mlir/attention_B1_H64_SQ1024_SKV4096_DH128_f16.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[1,64,1024,128],f16>, %298 : !torch.vtensor<[1,64,4096,128],f16>, %301 : !torch.vtensor<[1,64,4096,128],f16>) -> !torch.vtensor<[1,64,1024,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[1,64,1024,128],f16>, !torch.vtensor<[1,64,4096,128],f16>, !torch.vtensor<[1,64,4096,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[1,64,1024,128],f16>, !torch.vtensor<[1,64,1024], f32>) + return %282#0 : !torch.vtensor<[1,64,1024,128],f16> + } +} diff --git a/attention/mlir/attention_B1_H64_SQ1024_SKV4096_DH128_f8.mlir b/attention/mlir/attention_B1_H64_SQ1024_SKV4096_DH128_f8.mlir new file mode 100644 index 0000000..bc28d65 --- /dev/null +++ b/attention/mlir/attention_B1_H64_SQ1024_SKV4096_DH128_f8.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[1,64,1024,128],f16>, %298 : !torch.vtensor<[1,64,4096,128],f16>, %301 : !torch.vtensor<[1,64,4096,128],f16>) -> !torch.vtensor<[1,64,1024,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[1,64,1024,128],f16>, !torch.vtensor<[1,64,4096,128],f16>, !torch.vtensor<[1,64,4096,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[1,64,1024,128],f16>, !torch.vtensor<[1,64,1024], f32>) + return %282#0 : !torch.vtensor<[1,64,1024,128],f16> + } +} diff --git a/attention/mlir/attention_B1_H64_SQ1024_SKV4096_DH128_fp16.mlir b/attention/mlir/attention_B1_H64_SQ1024_SKV4096_DH128_fp16.mlir new file mode 100644 index 0000000..bc28d65 --- /dev/null +++ b/attention/mlir/attention_B1_H64_SQ1024_SKV4096_DH128_fp16.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[1,64,1024,128],f16>, %298 : !torch.vtensor<[1,64,4096,128],f16>, %301 : !torch.vtensor<[1,64,4096,128],f16>) -> !torch.vtensor<[1,64,1024,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[1,64,1024,128],f16>, !torch.vtensor<[1,64,4096,128],f16>, !torch.vtensor<[1,64,4096,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[1,64,1024,128],f16>, !torch.vtensor<[1,64,1024], f32>) + return %282#0 : !torch.vtensor<[1,64,1024,128],f16> + } +} diff --git a/attention/mlir/attention_B1_H64_SQ1024_SKV4096_DH128_fp8.mlir b/attention/mlir/attention_B1_H64_SQ1024_SKV4096_DH128_fp8.mlir new file mode 100644 index 0000000..bc28d65 --- /dev/null +++ b/attention/mlir/attention_B1_H64_SQ1024_SKV4096_DH128_fp8.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[1,64,1024,128],f16>, %298 : !torch.vtensor<[1,64,4096,128],f16>, %301 : !torch.vtensor<[1,64,4096,128],f16>) -> !torch.vtensor<[1,64,1024,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[1,64,1024,128],f16>, !torch.vtensor<[1,64,4096,128],f16>, !torch.vtensor<[1,64,4096,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[1,64,1024,128],f16>, !torch.vtensor<[1,64,1024], f32>) + return %282#0 : !torch.vtensor<[1,64,1024,128],f16> + } +} diff --git a/attention/mlir/attention_B1_H64_SQ2048_SKV1024_DH128_f16.mlir b/attention/mlir/attention_B1_H64_SQ2048_SKV1024_DH128_f16.mlir new file mode 100644 index 0000000..40c9a8a --- /dev/null +++ b/attention/mlir/attention_B1_H64_SQ2048_SKV1024_DH128_f16.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[1,64,2048,128],f16>, %298 : !torch.vtensor<[1,64,1024,128],f16>, %301 : !torch.vtensor<[1,64,1024,128],f16>) -> !torch.vtensor<[1,64,2048,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[1,64,2048,128],f16>, !torch.vtensor<[1,64,1024,128],f16>, !torch.vtensor<[1,64,1024,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[1,64,2048,128],f16>, !torch.vtensor<[1,64,2048], f32>) + return %282#0 : !torch.vtensor<[1,64,2048,128],f16> + } +} diff --git a/attention/mlir/attention_B1_H64_SQ2048_SKV1024_DH128_f8.mlir b/attention/mlir/attention_B1_H64_SQ2048_SKV1024_DH128_f8.mlir new file mode 100644 index 0000000..40c9a8a --- /dev/null +++ b/attention/mlir/attention_B1_H64_SQ2048_SKV1024_DH128_f8.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[1,64,2048,128],f16>, %298 : !torch.vtensor<[1,64,1024,128],f16>, %301 : !torch.vtensor<[1,64,1024,128],f16>) -> !torch.vtensor<[1,64,2048,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[1,64,2048,128],f16>, !torch.vtensor<[1,64,1024,128],f16>, !torch.vtensor<[1,64,1024,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[1,64,2048,128],f16>, !torch.vtensor<[1,64,2048], f32>) + return %282#0 : !torch.vtensor<[1,64,2048,128],f16> + } +} diff --git a/attention/mlir/attention_B1_H64_SQ2048_SKV1024_DH128_fp16.mlir b/attention/mlir/attention_B1_H64_SQ2048_SKV1024_DH128_fp16.mlir new file mode 100644 index 0000000..40c9a8a --- /dev/null +++ b/attention/mlir/attention_B1_H64_SQ2048_SKV1024_DH128_fp16.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[1,64,2048,128],f16>, %298 : !torch.vtensor<[1,64,1024,128],f16>, %301 : !torch.vtensor<[1,64,1024,128],f16>) -> !torch.vtensor<[1,64,2048,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[1,64,2048,128],f16>, !torch.vtensor<[1,64,1024,128],f16>, !torch.vtensor<[1,64,1024,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[1,64,2048,128],f16>, !torch.vtensor<[1,64,2048], f32>) + return %282#0 : !torch.vtensor<[1,64,2048,128],f16> + } +} diff --git a/attention/mlir/attention_B1_H64_SQ2048_SKV1024_DH128_fp8.mlir b/attention/mlir/attention_B1_H64_SQ2048_SKV1024_DH128_fp8.mlir new file mode 100644 index 0000000..40c9a8a --- /dev/null +++ b/attention/mlir/attention_B1_H64_SQ2048_SKV1024_DH128_fp8.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[1,64,2048,128],f16>, %298 : !torch.vtensor<[1,64,1024,128],f16>, %301 : !torch.vtensor<[1,64,1024,128],f16>) -> !torch.vtensor<[1,64,2048,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[1,64,2048,128],f16>, !torch.vtensor<[1,64,1024,128],f16>, !torch.vtensor<[1,64,1024,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[1,64,2048,128],f16>, !torch.vtensor<[1,64,2048], f32>) + return %282#0 : !torch.vtensor<[1,64,2048,128],f16> + } +} diff --git a/attention/mlir/attention_B1_H64_SQ2048_SKV2048_DH128_f16.mlir b/attention/mlir/attention_B1_H64_SQ2048_SKV2048_DH128_f16.mlir new file mode 100644 index 0000000..f674ae6 --- /dev/null +++ b/attention/mlir/attention_B1_H64_SQ2048_SKV2048_DH128_f16.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[1,64,2048,128],f16>, %298 : !torch.vtensor<[1,64,2048,128],f16>, %301 : !torch.vtensor<[1,64,2048,128],f16>) -> !torch.vtensor<[1,64,2048,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[1,64,2048,128],f16>, !torch.vtensor<[1,64,2048,128],f16>, !torch.vtensor<[1,64,2048,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[1,64,2048,128],f16>, !torch.vtensor<[1,64,2048], f32>) + return %282#0 : !torch.vtensor<[1,64,2048,128],f16> + } +} diff --git a/attention/mlir/attention_B1_H64_SQ2048_SKV2048_DH128_f8.mlir b/attention/mlir/attention_B1_H64_SQ2048_SKV2048_DH128_f8.mlir new file mode 100644 index 0000000..f674ae6 --- /dev/null +++ b/attention/mlir/attention_B1_H64_SQ2048_SKV2048_DH128_f8.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[1,64,2048,128],f16>, %298 : !torch.vtensor<[1,64,2048,128],f16>, %301 : !torch.vtensor<[1,64,2048,128],f16>) -> !torch.vtensor<[1,64,2048,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[1,64,2048,128],f16>, !torch.vtensor<[1,64,2048,128],f16>, !torch.vtensor<[1,64,2048,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[1,64,2048,128],f16>, !torch.vtensor<[1,64,2048], f32>) + return %282#0 : !torch.vtensor<[1,64,2048,128],f16> + } +} diff --git a/attention/mlir/attention_B1_H64_SQ2048_SKV2048_DH128_fp16.mlir b/attention/mlir/attention_B1_H64_SQ2048_SKV2048_DH128_fp16.mlir new file mode 100644 index 0000000..f674ae6 --- /dev/null +++ b/attention/mlir/attention_B1_H64_SQ2048_SKV2048_DH128_fp16.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[1,64,2048,128],f16>, %298 : !torch.vtensor<[1,64,2048,128],f16>, %301 : !torch.vtensor<[1,64,2048,128],f16>) -> !torch.vtensor<[1,64,2048,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[1,64,2048,128],f16>, !torch.vtensor<[1,64,2048,128],f16>, !torch.vtensor<[1,64,2048,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[1,64,2048,128],f16>, !torch.vtensor<[1,64,2048], f32>) + return %282#0 : !torch.vtensor<[1,64,2048,128],f16> + } +} diff --git a/attention/mlir/attention_B1_H64_SQ2048_SKV2048_DH128_fp8.mlir b/attention/mlir/attention_B1_H64_SQ2048_SKV2048_DH128_fp8.mlir new file mode 100644 index 0000000..f674ae6 --- /dev/null +++ b/attention/mlir/attention_B1_H64_SQ2048_SKV2048_DH128_fp8.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[1,64,2048,128],f16>, %298 : !torch.vtensor<[1,64,2048,128],f16>, %301 : !torch.vtensor<[1,64,2048,128],f16>) -> !torch.vtensor<[1,64,2048,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[1,64,2048,128],f16>, !torch.vtensor<[1,64,2048,128],f16>, !torch.vtensor<[1,64,2048,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[1,64,2048,128],f16>, !torch.vtensor<[1,64,2048], f32>) + return %282#0 : !torch.vtensor<[1,64,2048,128],f16> + } +} diff --git a/attention/mlir/attention_B1_H64_SQ2048_SKV4096_DH128_f16.mlir b/attention/mlir/attention_B1_H64_SQ2048_SKV4096_DH128_f16.mlir new file mode 100644 index 0000000..287734c --- /dev/null +++ b/attention/mlir/attention_B1_H64_SQ2048_SKV4096_DH128_f16.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[1,64,2048,128],f16>, %298 : !torch.vtensor<[1,64,4096,128],f16>, %301 : !torch.vtensor<[1,64,4096,128],f16>) -> !torch.vtensor<[1,64,2048,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[1,64,2048,128],f16>, !torch.vtensor<[1,64,4096,128],f16>, !torch.vtensor<[1,64,4096,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[1,64,2048,128],f16>, !torch.vtensor<[1,64,2048], f32>) + return %282#0 : !torch.vtensor<[1,64,2048,128],f16> + } +} diff --git a/attention/mlir/attention_B1_H64_SQ2048_SKV4096_DH128_f8.mlir b/attention/mlir/attention_B1_H64_SQ2048_SKV4096_DH128_f8.mlir new file mode 100644 index 0000000..287734c --- /dev/null +++ b/attention/mlir/attention_B1_H64_SQ2048_SKV4096_DH128_f8.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[1,64,2048,128],f16>, %298 : !torch.vtensor<[1,64,4096,128],f16>, %301 : !torch.vtensor<[1,64,4096,128],f16>) -> !torch.vtensor<[1,64,2048,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[1,64,2048,128],f16>, !torch.vtensor<[1,64,4096,128],f16>, !torch.vtensor<[1,64,4096,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[1,64,2048,128],f16>, !torch.vtensor<[1,64,2048], f32>) + return %282#0 : !torch.vtensor<[1,64,2048,128],f16> + } +} diff --git a/attention/mlir/attention_B1_H64_SQ2048_SKV4096_DH128_fp16.mlir b/attention/mlir/attention_B1_H64_SQ2048_SKV4096_DH128_fp16.mlir new file mode 100644 index 0000000..287734c --- /dev/null +++ b/attention/mlir/attention_B1_H64_SQ2048_SKV4096_DH128_fp16.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[1,64,2048,128],f16>, %298 : !torch.vtensor<[1,64,4096,128],f16>, %301 : !torch.vtensor<[1,64,4096,128],f16>) -> !torch.vtensor<[1,64,2048,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[1,64,2048,128],f16>, !torch.vtensor<[1,64,4096,128],f16>, !torch.vtensor<[1,64,4096,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[1,64,2048,128],f16>, !torch.vtensor<[1,64,2048], f32>) + return %282#0 : !torch.vtensor<[1,64,2048,128],f16> + } +} diff --git a/attention/mlir/attention_B1_H64_SQ2048_SKV4096_DH128_fp8.mlir b/attention/mlir/attention_B1_H64_SQ2048_SKV4096_DH128_fp8.mlir new file mode 100644 index 0000000..287734c --- /dev/null +++ b/attention/mlir/attention_B1_H64_SQ2048_SKV4096_DH128_fp8.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[1,64,2048,128],f16>, %298 : !torch.vtensor<[1,64,4096,128],f16>, %301 : !torch.vtensor<[1,64,4096,128],f16>) -> !torch.vtensor<[1,64,2048,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[1,64,2048,128],f16>, !torch.vtensor<[1,64,4096,128],f16>, !torch.vtensor<[1,64,4096,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[1,64,2048,128],f16>, !torch.vtensor<[1,64,2048], f32>) + return %282#0 : !torch.vtensor<[1,64,2048,128],f16> + } +} diff --git a/attention/mlir/attention_B1_H64_SQ4096_SKV1024_DH128_f16.mlir b/attention/mlir/attention_B1_H64_SQ4096_SKV1024_DH128_f16.mlir new file mode 100644 index 0000000..b820d89 --- /dev/null +++ b/attention/mlir/attention_B1_H64_SQ4096_SKV1024_DH128_f16.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[1,64,4096,128],f16>, %298 : !torch.vtensor<[1,64,1024,128],f16>, %301 : !torch.vtensor<[1,64,1024,128],f16>) -> !torch.vtensor<[1,64,4096,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[1,64,4096,128],f16>, !torch.vtensor<[1,64,1024,128],f16>, !torch.vtensor<[1,64,1024,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[1,64,4096,128],f16>, !torch.vtensor<[1,64,4096], f32>) + return %282#0 : !torch.vtensor<[1,64,4096,128],f16> + } +} diff --git a/attention/mlir/attention_B1_H64_SQ4096_SKV1024_DH128_f8.mlir b/attention/mlir/attention_B1_H64_SQ4096_SKV1024_DH128_f8.mlir new file mode 100644 index 0000000..b820d89 --- /dev/null +++ b/attention/mlir/attention_B1_H64_SQ4096_SKV1024_DH128_f8.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[1,64,4096,128],f16>, %298 : !torch.vtensor<[1,64,1024,128],f16>, %301 : !torch.vtensor<[1,64,1024,128],f16>) -> !torch.vtensor<[1,64,4096,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[1,64,4096,128],f16>, !torch.vtensor<[1,64,1024,128],f16>, !torch.vtensor<[1,64,1024,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[1,64,4096,128],f16>, !torch.vtensor<[1,64,4096], f32>) + return %282#0 : !torch.vtensor<[1,64,4096,128],f16> + } +} diff --git a/attention/mlir/attention_B1_H64_SQ4096_SKV1024_DH128_fp16.mlir b/attention/mlir/attention_B1_H64_SQ4096_SKV1024_DH128_fp16.mlir new file mode 100644 index 0000000..b820d89 --- /dev/null +++ b/attention/mlir/attention_B1_H64_SQ4096_SKV1024_DH128_fp16.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[1,64,4096,128],f16>, %298 : !torch.vtensor<[1,64,1024,128],f16>, %301 : !torch.vtensor<[1,64,1024,128],f16>) -> !torch.vtensor<[1,64,4096,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[1,64,4096,128],f16>, !torch.vtensor<[1,64,1024,128],f16>, !torch.vtensor<[1,64,1024,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[1,64,4096,128],f16>, !torch.vtensor<[1,64,4096], f32>) + return %282#0 : !torch.vtensor<[1,64,4096,128],f16> + } +} diff --git a/attention/mlir/attention_B1_H64_SQ4096_SKV1024_DH128_fp8.mlir b/attention/mlir/attention_B1_H64_SQ4096_SKV1024_DH128_fp8.mlir new file mode 100644 index 0000000..b820d89 --- /dev/null +++ b/attention/mlir/attention_B1_H64_SQ4096_SKV1024_DH128_fp8.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[1,64,4096,128],f16>, %298 : !torch.vtensor<[1,64,1024,128],f16>, %301 : !torch.vtensor<[1,64,1024,128],f16>) -> !torch.vtensor<[1,64,4096,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[1,64,4096,128],f16>, !torch.vtensor<[1,64,1024,128],f16>, !torch.vtensor<[1,64,1024,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[1,64,4096,128],f16>, !torch.vtensor<[1,64,4096], f32>) + return %282#0 : !torch.vtensor<[1,64,4096,128],f16> + } +} diff --git a/attention/mlir/attention_B1_H64_SQ4096_SKV2048_DH128_f16.mlir b/attention/mlir/attention_B1_H64_SQ4096_SKV2048_DH128_f16.mlir new file mode 100644 index 0000000..ae01ffa --- /dev/null +++ b/attention/mlir/attention_B1_H64_SQ4096_SKV2048_DH128_f16.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[1,64,4096,128],f16>, %298 : !torch.vtensor<[1,64,2048,128],f16>, %301 : !torch.vtensor<[1,64,2048,128],f16>) -> !torch.vtensor<[1,64,4096,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[1,64,4096,128],f16>, !torch.vtensor<[1,64,2048,128],f16>, !torch.vtensor<[1,64,2048,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[1,64,4096,128],f16>, !torch.vtensor<[1,64,4096], f32>) + return %282#0 : !torch.vtensor<[1,64,4096,128],f16> + } +} diff --git a/attention/mlir/attention_B1_H64_SQ4096_SKV2048_DH128_f8.mlir b/attention/mlir/attention_B1_H64_SQ4096_SKV2048_DH128_f8.mlir new file mode 100644 index 0000000..ae01ffa --- /dev/null +++ b/attention/mlir/attention_B1_H64_SQ4096_SKV2048_DH128_f8.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[1,64,4096,128],f16>, %298 : !torch.vtensor<[1,64,2048,128],f16>, %301 : !torch.vtensor<[1,64,2048,128],f16>) -> !torch.vtensor<[1,64,4096,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[1,64,4096,128],f16>, !torch.vtensor<[1,64,2048,128],f16>, !torch.vtensor<[1,64,2048,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[1,64,4096,128],f16>, !torch.vtensor<[1,64,4096], f32>) + return %282#0 : !torch.vtensor<[1,64,4096,128],f16> + } +} diff --git a/attention/mlir/attention_B1_H64_SQ4096_SKV2048_DH128_fp16.mlir b/attention/mlir/attention_B1_H64_SQ4096_SKV2048_DH128_fp16.mlir new file mode 100644 index 0000000..ae01ffa --- /dev/null +++ b/attention/mlir/attention_B1_H64_SQ4096_SKV2048_DH128_fp16.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[1,64,4096,128],f16>, %298 : !torch.vtensor<[1,64,2048,128],f16>, %301 : !torch.vtensor<[1,64,2048,128],f16>) -> !torch.vtensor<[1,64,4096,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[1,64,4096,128],f16>, !torch.vtensor<[1,64,2048,128],f16>, !torch.vtensor<[1,64,2048,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[1,64,4096,128],f16>, !torch.vtensor<[1,64,4096], f32>) + return %282#0 : !torch.vtensor<[1,64,4096,128],f16> + } +} diff --git a/attention/mlir/attention_B1_H64_SQ4096_SKV2048_DH128_fp8.mlir b/attention/mlir/attention_B1_H64_SQ4096_SKV2048_DH128_fp8.mlir new file mode 100644 index 0000000..ae01ffa --- /dev/null +++ b/attention/mlir/attention_B1_H64_SQ4096_SKV2048_DH128_fp8.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[1,64,4096,128],f16>, %298 : !torch.vtensor<[1,64,2048,128],f16>, %301 : !torch.vtensor<[1,64,2048,128],f16>) -> !torch.vtensor<[1,64,4096,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[1,64,4096,128],f16>, !torch.vtensor<[1,64,2048,128],f16>, !torch.vtensor<[1,64,2048,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[1,64,4096,128],f16>, !torch.vtensor<[1,64,4096], f32>) + return %282#0 : !torch.vtensor<[1,64,4096,128],f16> + } +} diff --git a/attention/mlir/attention_B1_H64_SQ4096_SKV4096_DH128_f16.mlir b/attention/mlir/attention_B1_H64_SQ4096_SKV4096_DH128_f16.mlir new file mode 100644 index 0000000..d85089e --- /dev/null +++ b/attention/mlir/attention_B1_H64_SQ4096_SKV4096_DH128_f16.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[1,64,4096,128],f16>, %298 : !torch.vtensor<[1,64,4096,128],f16>, %301 : !torch.vtensor<[1,64,4096,128],f16>) -> !torch.vtensor<[1,64,4096,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[1,64,4096,128],f16>, !torch.vtensor<[1,64,4096,128],f16>, !torch.vtensor<[1,64,4096,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[1,64,4096,128],f16>, !torch.vtensor<[1,64,4096], f32>) + return %282#0 : !torch.vtensor<[1,64,4096,128],f16> + } +} diff --git a/attention/mlir/attention_B1_H64_SQ4096_SKV4096_DH128_f8.mlir b/attention/mlir/attention_B1_H64_SQ4096_SKV4096_DH128_f8.mlir new file mode 100644 index 0000000..d85089e --- /dev/null +++ b/attention/mlir/attention_B1_H64_SQ4096_SKV4096_DH128_f8.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[1,64,4096,128],f16>, %298 : !torch.vtensor<[1,64,4096,128],f16>, %301 : !torch.vtensor<[1,64,4096,128],f16>) -> !torch.vtensor<[1,64,4096,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[1,64,4096,128],f16>, !torch.vtensor<[1,64,4096,128],f16>, !torch.vtensor<[1,64,4096,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[1,64,4096,128],f16>, !torch.vtensor<[1,64,4096], f32>) + return %282#0 : !torch.vtensor<[1,64,4096,128],f16> + } +} diff --git a/attention/mlir/attention_B1_H64_SQ4096_SKV4096_DH128_fp16.mlir b/attention/mlir/attention_B1_H64_SQ4096_SKV4096_DH128_fp16.mlir new file mode 100644 index 0000000..d85089e --- /dev/null +++ b/attention/mlir/attention_B1_H64_SQ4096_SKV4096_DH128_fp16.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[1,64,4096,128],f16>, %298 : !torch.vtensor<[1,64,4096,128],f16>, %301 : !torch.vtensor<[1,64,4096,128],f16>) -> !torch.vtensor<[1,64,4096,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[1,64,4096,128],f16>, !torch.vtensor<[1,64,4096,128],f16>, !torch.vtensor<[1,64,4096,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[1,64,4096,128],f16>, !torch.vtensor<[1,64,4096], f32>) + return %282#0 : !torch.vtensor<[1,64,4096,128],f16> + } +} diff --git a/attention/mlir/attention_B1_H64_SQ4096_SKV4096_DH128_fp8.mlir b/attention/mlir/attention_B1_H64_SQ4096_SKV4096_DH128_fp8.mlir new file mode 100644 index 0000000..d85089e --- /dev/null +++ b/attention/mlir/attention_B1_H64_SQ4096_SKV4096_DH128_fp8.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[1,64,4096,128],f16>, %298 : !torch.vtensor<[1,64,4096,128],f16>, %301 : !torch.vtensor<[1,64,4096,128],f16>) -> !torch.vtensor<[1,64,4096,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[1,64,4096,128],f16>, !torch.vtensor<[1,64,4096,128],f16>, !torch.vtensor<[1,64,4096,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[1,64,4096,128],f16>, !torch.vtensor<[1,64,4096], f32>) + return %282#0 : !torch.vtensor<[1,64,4096,128],f16> + } +} diff --git a/attention/mlir/attention_B2_H10_SQ1024_SKV1024_DH64_f16.mlir b/attention/mlir/attention_B2_H10_SQ1024_SKV1024_DH64_f16.mlir new file mode 100644 index 0000000..08d9d9f --- /dev/null +++ b/attention/mlir/attention_B2_H10_SQ1024_SKV1024_DH64_f16.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[2,10,1024,64],f16>, %298 : !torch.vtensor<[2,10,1024,64],f16>, %301 : !torch.vtensor<[2,10,1024,64],f16>) -> !torch.vtensor<[2,10,1024,64],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[2,10,1024,64],f16>, !torch.vtensor<[2,10,1024,64],f16>, !torch.vtensor<[2,10,1024,64],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[2,10,1024,64],f16>, !torch.vtensor<[2,10,1024], f32>) + return %282#0 : !torch.vtensor<[2,10,1024,64],f16> + } +} diff --git a/attention/mlir/attention_B2_H10_SQ1024_SKV1024_DH64_f8.mlir b/attention/mlir/attention_B2_H10_SQ1024_SKV1024_DH64_f8.mlir new file mode 100644 index 0000000..08d9d9f --- /dev/null +++ b/attention/mlir/attention_B2_H10_SQ1024_SKV1024_DH64_f8.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[2,10,1024,64],f16>, %298 : !torch.vtensor<[2,10,1024,64],f16>, %301 : !torch.vtensor<[2,10,1024,64],f16>) -> !torch.vtensor<[2,10,1024,64],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[2,10,1024,64],f16>, !torch.vtensor<[2,10,1024,64],f16>, !torch.vtensor<[2,10,1024,64],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[2,10,1024,64],f16>, !torch.vtensor<[2,10,1024], f32>) + return %282#0 : !torch.vtensor<[2,10,1024,64],f16> + } +} diff --git a/attention/mlir/attention_B2_H10_SQ1024_SKV1024_DH64_fp16.mlir b/attention/mlir/attention_B2_H10_SQ1024_SKV1024_DH64_fp16.mlir new file mode 100644 index 0000000..08d9d9f --- /dev/null +++ b/attention/mlir/attention_B2_H10_SQ1024_SKV1024_DH64_fp16.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[2,10,1024,64],f16>, %298 : !torch.vtensor<[2,10,1024,64],f16>, %301 : !torch.vtensor<[2,10,1024,64],f16>) -> !torch.vtensor<[2,10,1024,64],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[2,10,1024,64],f16>, !torch.vtensor<[2,10,1024,64],f16>, !torch.vtensor<[2,10,1024,64],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[2,10,1024,64],f16>, !torch.vtensor<[2,10,1024], f32>) + return %282#0 : !torch.vtensor<[2,10,1024,64],f16> + } +} diff --git a/attention/mlir/attention_B2_H10_SQ1024_SKV1024_DH64_fp8.mlir b/attention/mlir/attention_B2_H10_SQ1024_SKV1024_DH64_fp8.mlir new file mode 100644 index 0000000..08d9d9f --- /dev/null +++ b/attention/mlir/attention_B2_H10_SQ1024_SKV1024_DH64_fp8.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[2,10,1024,64],f16>, %298 : !torch.vtensor<[2,10,1024,64],f16>, %301 : !torch.vtensor<[2,10,1024,64],f16>) -> !torch.vtensor<[2,10,1024,64],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[2,10,1024,64],f16>, !torch.vtensor<[2,10,1024,64],f16>, !torch.vtensor<[2,10,1024,64],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[2,10,1024,64],f16>, !torch.vtensor<[2,10,1024], f32>) + return %282#0 : !torch.vtensor<[2,10,1024,64],f16> + } +} diff --git a/attention/mlir/attention_B2_H10_SQ4096_SKV4096_DH64_f16.mlir b/attention/mlir/attention_B2_H10_SQ4096_SKV4096_DH64_f16.mlir new file mode 100644 index 0000000..5bcd2d6 --- /dev/null +++ b/attention/mlir/attention_B2_H10_SQ4096_SKV4096_DH64_f16.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[2,10,4096,64],f16>, %298 : !torch.vtensor<[2,10,4096,64],f16>, %301 : !torch.vtensor<[2,10,4096,64],f16>) -> !torch.vtensor<[2,10,4096,64],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[2,10,4096,64],f16>, !torch.vtensor<[2,10,4096,64],f16>, !torch.vtensor<[2,10,4096,64],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[2,10,4096,64],f16>, !torch.vtensor<[2,10,4096], f32>) + return %282#0 : !torch.vtensor<[2,10,4096,64],f16> + } +} diff --git a/attention/mlir/attention_B2_H10_SQ4096_SKV4096_DH64_f8.mlir b/attention/mlir/attention_B2_H10_SQ4096_SKV4096_DH64_f8.mlir new file mode 100644 index 0000000..5bcd2d6 --- /dev/null +++ b/attention/mlir/attention_B2_H10_SQ4096_SKV4096_DH64_f8.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[2,10,4096,64],f16>, %298 : !torch.vtensor<[2,10,4096,64],f16>, %301 : !torch.vtensor<[2,10,4096,64],f16>) -> !torch.vtensor<[2,10,4096,64],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[2,10,4096,64],f16>, !torch.vtensor<[2,10,4096,64],f16>, !torch.vtensor<[2,10,4096,64],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[2,10,4096,64],f16>, !torch.vtensor<[2,10,4096], f32>) + return %282#0 : !torch.vtensor<[2,10,4096,64],f16> + } +} diff --git a/attention/mlir/attention_B2_H10_SQ4096_SKV4096_DH64_fp16.mlir b/attention/mlir/attention_B2_H10_SQ4096_SKV4096_DH64_fp16.mlir new file mode 100644 index 0000000..5bcd2d6 --- /dev/null +++ b/attention/mlir/attention_B2_H10_SQ4096_SKV4096_DH64_fp16.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[2,10,4096,64],f16>, %298 : !torch.vtensor<[2,10,4096,64],f16>, %301 : !torch.vtensor<[2,10,4096,64],f16>) -> !torch.vtensor<[2,10,4096,64],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[2,10,4096,64],f16>, !torch.vtensor<[2,10,4096,64],f16>, !torch.vtensor<[2,10,4096,64],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[2,10,4096,64],f16>, !torch.vtensor<[2,10,4096], f32>) + return %282#0 : !torch.vtensor<[2,10,4096,64],f16> + } +} diff --git a/attention/mlir/attention_B2_H10_SQ4096_SKV4096_DH64_fp8.mlir b/attention/mlir/attention_B2_H10_SQ4096_SKV4096_DH64_fp8.mlir new file mode 100644 index 0000000..5bcd2d6 --- /dev/null +++ b/attention/mlir/attention_B2_H10_SQ4096_SKV4096_DH64_fp8.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[2,10,4096,64],f16>, %298 : !torch.vtensor<[2,10,4096,64],f16>, %301 : !torch.vtensor<[2,10,4096,64],f16>) -> !torch.vtensor<[2,10,4096,64],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[2,10,4096,64],f16>, !torch.vtensor<[2,10,4096,64],f16>, !torch.vtensor<[2,10,4096,64],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[2,10,4096,64],f16>, !torch.vtensor<[2,10,4096], f32>) + return %282#0 : !torch.vtensor<[2,10,4096,64],f16> + } +} diff --git a/attention/mlir/attention_B2_H10_SQ4096_SKV64_DH64_f16.mlir b/attention/mlir/attention_B2_H10_SQ4096_SKV64_DH64_f16.mlir new file mode 100644 index 0000000..c1fca9f --- /dev/null +++ b/attention/mlir/attention_B2_H10_SQ4096_SKV64_DH64_f16.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[2,10,4096,64],f16>, %298 : !torch.vtensor<[2,10,64,64],f16>, %301 : !torch.vtensor<[2,10,64,64],f16>) -> !torch.vtensor<[2,10,4096,64],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[2,10,4096,64],f16>, !torch.vtensor<[2,10,64,64],f16>, !torch.vtensor<[2,10,64,64],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[2,10,4096,64],f16>, !torch.vtensor<[2,10,4096], f32>) + return %282#0 : !torch.vtensor<[2,10,4096,64],f16> + } +} diff --git a/attention/mlir/attention_B2_H10_SQ4096_SKV64_DH64_f8.mlir b/attention/mlir/attention_B2_H10_SQ4096_SKV64_DH64_f8.mlir new file mode 100644 index 0000000..c1fca9f --- /dev/null +++ b/attention/mlir/attention_B2_H10_SQ4096_SKV64_DH64_f8.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[2,10,4096,64],f16>, %298 : !torch.vtensor<[2,10,64,64],f16>, %301 : !torch.vtensor<[2,10,64,64],f16>) -> !torch.vtensor<[2,10,4096,64],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[2,10,4096,64],f16>, !torch.vtensor<[2,10,64,64],f16>, !torch.vtensor<[2,10,64,64],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[2,10,4096,64],f16>, !torch.vtensor<[2,10,4096], f32>) + return %282#0 : !torch.vtensor<[2,10,4096,64],f16> + } +} diff --git a/attention/mlir/attention_B2_H10_SQ4096_SKV64_DH64_fp16.mlir b/attention/mlir/attention_B2_H10_SQ4096_SKV64_DH64_fp16.mlir new file mode 100644 index 0000000..c1fca9f --- /dev/null +++ b/attention/mlir/attention_B2_H10_SQ4096_SKV64_DH64_fp16.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[2,10,4096,64],f16>, %298 : !torch.vtensor<[2,10,64,64],f16>, %301 : !torch.vtensor<[2,10,64,64],f16>) -> !torch.vtensor<[2,10,4096,64],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[2,10,4096,64],f16>, !torch.vtensor<[2,10,64,64],f16>, !torch.vtensor<[2,10,64,64],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[2,10,4096,64],f16>, !torch.vtensor<[2,10,4096], f32>) + return %282#0 : !torch.vtensor<[2,10,4096,64],f16> + } +} diff --git a/attention/mlir/attention_B2_H10_SQ4096_SKV64_DH64_fp8.mlir b/attention/mlir/attention_B2_H10_SQ4096_SKV64_DH64_fp8.mlir new file mode 100644 index 0000000..c1fca9f --- /dev/null +++ b/attention/mlir/attention_B2_H10_SQ4096_SKV64_DH64_fp8.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[2,10,4096,64],f16>, %298 : !torch.vtensor<[2,10,64,64],f16>, %301 : !torch.vtensor<[2,10,64,64],f16>) -> !torch.vtensor<[2,10,4096,64],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[2,10,4096,64],f16>, !torch.vtensor<[2,10,64,64],f16>, !torch.vtensor<[2,10,64,64],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[2,10,4096,64],f16>, !torch.vtensor<[2,10,4096], f32>) + return %282#0 : !torch.vtensor<[2,10,4096,64],f16> + } +} diff --git a/attention/mlir/attention_B2_H20_SQ1024_SKV64_DH64_f16.mlir b/attention/mlir/attention_B2_H20_SQ1024_SKV64_DH64_f16.mlir new file mode 100644 index 0000000..9b1a643 --- /dev/null +++ b/attention/mlir/attention_B2_H20_SQ1024_SKV64_DH64_f16.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[2,20,1024,64],f16>, %298 : !torch.vtensor<[2,20,64,64],f16>, %301 : !torch.vtensor<[2,20,64,64],f16>) -> !torch.vtensor<[2,20,1024,64],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[2,20,1024,64],f16>, !torch.vtensor<[2,20,64,64],f16>, !torch.vtensor<[2,20,64,64],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[2,20,1024,64],f16>, !torch.vtensor<[2,20,1024], f32>) + return %282#0 : !torch.vtensor<[2,20,1024,64],f16> + } +} diff --git a/attention/mlir/attention_B2_H20_SQ1024_SKV64_DH64_f8.mlir b/attention/mlir/attention_B2_H20_SQ1024_SKV64_DH64_f8.mlir new file mode 100644 index 0000000..9b1a643 --- /dev/null +++ b/attention/mlir/attention_B2_H20_SQ1024_SKV64_DH64_f8.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[2,20,1024,64],f16>, %298 : !torch.vtensor<[2,20,64,64],f16>, %301 : !torch.vtensor<[2,20,64,64],f16>) -> !torch.vtensor<[2,20,1024,64],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[2,20,1024,64],f16>, !torch.vtensor<[2,20,64,64],f16>, !torch.vtensor<[2,20,64,64],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[2,20,1024,64],f16>, !torch.vtensor<[2,20,1024], f32>) + return %282#0 : !torch.vtensor<[2,20,1024,64],f16> + } +} diff --git a/attention/mlir/attention_B2_H20_SQ1024_SKV64_DH64_fp16.mlir b/attention/mlir/attention_B2_H20_SQ1024_SKV64_DH64_fp16.mlir new file mode 100644 index 0000000..9b1a643 --- /dev/null +++ b/attention/mlir/attention_B2_H20_SQ1024_SKV64_DH64_fp16.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[2,20,1024,64],f16>, %298 : !torch.vtensor<[2,20,64,64],f16>, %301 : !torch.vtensor<[2,20,64,64],f16>) -> !torch.vtensor<[2,20,1024,64],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[2,20,1024,64],f16>, !torch.vtensor<[2,20,64,64],f16>, !torch.vtensor<[2,20,64,64],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[2,20,1024,64],f16>, !torch.vtensor<[2,20,1024], f32>) + return %282#0 : !torch.vtensor<[2,20,1024,64],f16> + } +} diff --git a/attention/mlir/attention_B2_H20_SQ1024_SKV64_DH64_fp8.mlir b/attention/mlir/attention_B2_H20_SQ1024_SKV64_DH64_fp8.mlir new file mode 100644 index 0000000..9b1a643 --- /dev/null +++ b/attention/mlir/attention_B2_H20_SQ1024_SKV64_DH64_fp8.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[2,20,1024,64],f16>, %298 : !torch.vtensor<[2,20,64,64],f16>, %301 : !torch.vtensor<[2,20,64,64],f16>) -> !torch.vtensor<[2,20,1024,64],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[2,20,1024,64],f16>, !torch.vtensor<[2,20,64,64],f16>, !torch.vtensor<[2,20,64,64],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[2,20,1024,64],f16>, !torch.vtensor<[2,20,1024], f32>) + return %282#0 : !torch.vtensor<[2,20,1024,64],f16> + } +} diff --git a/attention/mlir/attention_B2_H32_SQ1024_SKV1024_DH128_f16.mlir b/attention/mlir/attention_B2_H32_SQ1024_SKV1024_DH128_f16.mlir new file mode 100644 index 0000000..a09d0bc --- /dev/null +++ b/attention/mlir/attention_B2_H32_SQ1024_SKV1024_DH128_f16.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[2,32,1024,128],f16>, %298 : !torch.vtensor<[2,32,1024,128],f16>, %301 : !torch.vtensor<[2,32,1024,128],f16>) -> !torch.vtensor<[2,32,1024,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[2,32,1024,128],f16>, !torch.vtensor<[2,32,1024,128],f16>, !torch.vtensor<[2,32,1024,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[2,32,1024,128],f16>, !torch.vtensor<[2,32,1024], f32>) + return %282#0 : !torch.vtensor<[2,32,1024,128],f16> + } +} diff --git a/attention/mlir/attention_B2_H32_SQ1024_SKV1024_DH128_f8.mlir b/attention/mlir/attention_B2_H32_SQ1024_SKV1024_DH128_f8.mlir new file mode 100644 index 0000000..a09d0bc --- /dev/null +++ b/attention/mlir/attention_B2_H32_SQ1024_SKV1024_DH128_f8.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[2,32,1024,128],f16>, %298 : !torch.vtensor<[2,32,1024,128],f16>, %301 : !torch.vtensor<[2,32,1024,128],f16>) -> !torch.vtensor<[2,32,1024,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[2,32,1024,128],f16>, !torch.vtensor<[2,32,1024,128],f16>, !torch.vtensor<[2,32,1024,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[2,32,1024,128],f16>, !torch.vtensor<[2,32,1024], f32>) + return %282#0 : !torch.vtensor<[2,32,1024,128],f16> + } +} diff --git a/attention/mlir/attention_B2_H32_SQ1024_SKV1024_DH128_fp16.mlir b/attention/mlir/attention_B2_H32_SQ1024_SKV1024_DH128_fp16.mlir new file mode 100644 index 0000000..a09d0bc --- /dev/null +++ b/attention/mlir/attention_B2_H32_SQ1024_SKV1024_DH128_fp16.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[2,32,1024,128],f16>, %298 : !torch.vtensor<[2,32,1024,128],f16>, %301 : !torch.vtensor<[2,32,1024,128],f16>) -> !torch.vtensor<[2,32,1024,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[2,32,1024,128],f16>, !torch.vtensor<[2,32,1024,128],f16>, !torch.vtensor<[2,32,1024,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[2,32,1024,128],f16>, !torch.vtensor<[2,32,1024], f32>) + return %282#0 : !torch.vtensor<[2,32,1024,128],f16> + } +} diff --git a/attention/mlir/attention_B2_H32_SQ1024_SKV1024_DH128_fp8.mlir b/attention/mlir/attention_B2_H32_SQ1024_SKV1024_DH128_fp8.mlir new file mode 100644 index 0000000..a09d0bc --- /dev/null +++ b/attention/mlir/attention_B2_H32_SQ1024_SKV1024_DH128_fp8.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[2,32,1024,128],f16>, %298 : !torch.vtensor<[2,32,1024,128],f16>, %301 : !torch.vtensor<[2,32,1024,128],f16>) -> !torch.vtensor<[2,32,1024,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[2,32,1024,128],f16>, !torch.vtensor<[2,32,1024,128],f16>, !torch.vtensor<[2,32,1024,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[2,32,1024,128],f16>, !torch.vtensor<[2,32,1024], f32>) + return %282#0 : !torch.vtensor<[2,32,1024,128],f16> + } +} diff --git a/attention/mlir/attention_B2_H32_SQ1024_SKV2048_DH128_f16.mlir b/attention/mlir/attention_B2_H32_SQ1024_SKV2048_DH128_f16.mlir new file mode 100644 index 0000000..b98493a --- /dev/null +++ b/attention/mlir/attention_B2_H32_SQ1024_SKV2048_DH128_f16.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[2,32,1024,128],f16>, %298 : !torch.vtensor<[2,32,2048,128],f16>, %301 : !torch.vtensor<[2,32,2048,128],f16>) -> !torch.vtensor<[2,32,1024,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[2,32,1024,128],f16>, !torch.vtensor<[2,32,2048,128],f16>, !torch.vtensor<[2,32,2048,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[2,32,1024,128],f16>, !torch.vtensor<[2,32,1024], f32>) + return %282#0 : !torch.vtensor<[2,32,1024,128],f16> + } +} diff --git a/attention/mlir/attention_B2_H32_SQ1024_SKV2048_DH128_f8.mlir b/attention/mlir/attention_B2_H32_SQ1024_SKV2048_DH128_f8.mlir new file mode 100644 index 0000000..b98493a --- /dev/null +++ b/attention/mlir/attention_B2_H32_SQ1024_SKV2048_DH128_f8.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[2,32,1024,128],f16>, %298 : !torch.vtensor<[2,32,2048,128],f16>, %301 : !torch.vtensor<[2,32,2048,128],f16>) -> !torch.vtensor<[2,32,1024,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[2,32,1024,128],f16>, !torch.vtensor<[2,32,2048,128],f16>, !torch.vtensor<[2,32,2048,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[2,32,1024,128],f16>, !torch.vtensor<[2,32,1024], f32>) + return %282#0 : !torch.vtensor<[2,32,1024,128],f16> + } +} diff --git a/attention/mlir/attention_B2_H32_SQ1024_SKV2048_DH128_fp16.mlir b/attention/mlir/attention_B2_H32_SQ1024_SKV2048_DH128_fp16.mlir new file mode 100644 index 0000000..b98493a --- /dev/null +++ b/attention/mlir/attention_B2_H32_SQ1024_SKV2048_DH128_fp16.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[2,32,1024,128],f16>, %298 : !torch.vtensor<[2,32,2048,128],f16>, %301 : !torch.vtensor<[2,32,2048,128],f16>) -> !torch.vtensor<[2,32,1024,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[2,32,1024,128],f16>, !torch.vtensor<[2,32,2048,128],f16>, !torch.vtensor<[2,32,2048,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[2,32,1024,128],f16>, !torch.vtensor<[2,32,1024], f32>) + return %282#0 : !torch.vtensor<[2,32,1024,128],f16> + } +} diff --git a/attention/mlir/attention_B2_H32_SQ1024_SKV2048_DH128_fp8.mlir b/attention/mlir/attention_B2_H32_SQ1024_SKV2048_DH128_fp8.mlir new file mode 100644 index 0000000..b98493a --- /dev/null +++ b/attention/mlir/attention_B2_H32_SQ1024_SKV2048_DH128_fp8.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[2,32,1024,128],f16>, %298 : !torch.vtensor<[2,32,2048,128],f16>, %301 : !torch.vtensor<[2,32,2048,128],f16>) -> !torch.vtensor<[2,32,1024,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[2,32,1024,128],f16>, !torch.vtensor<[2,32,2048,128],f16>, !torch.vtensor<[2,32,2048,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[2,32,1024,128],f16>, !torch.vtensor<[2,32,1024], f32>) + return %282#0 : !torch.vtensor<[2,32,1024,128],f16> + } +} diff --git a/attention/mlir/attention_B2_H32_SQ1024_SKV4096_DH128_f16.mlir b/attention/mlir/attention_B2_H32_SQ1024_SKV4096_DH128_f16.mlir new file mode 100644 index 0000000..23b3632 --- /dev/null +++ b/attention/mlir/attention_B2_H32_SQ1024_SKV4096_DH128_f16.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[2,32,1024,128],f16>, %298 : !torch.vtensor<[2,32,4096,128],f16>, %301 : !torch.vtensor<[2,32,4096,128],f16>) -> !torch.vtensor<[2,32,1024,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[2,32,1024,128],f16>, !torch.vtensor<[2,32,4096,128],f16>, !torch.vtensor<[2,32,4096,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[2,32,1024,128],f16>, !torch.vtensor<[2,32,1024], f32>) + return %282#0 : !torch.vtensor<[2,32,1024,128],f16> + } +} diff --git a/attention/mlir/attention_B2_H32_SQ1024_SKV4096_DH128_f8.mlir b/attention/mlir/attention_B2_H32_SQ1024_SKV4096_DH128_f8.mlir new file mode 100644 index 0000000..23b3632 --- /dev/null +++ b/attention/mlir/attention_B2_H32_SQ1024_SKV4096_DH128_f8.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[2,32,1024,128],f16>, %298 : !torch.vtensor<[2,32,4096,128],f16>, %301 : !torch.vtensor<[2,32,4096,128],f16>) -> !torch.vtensor<[2,32,1024,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[2,32,1024,128],f16>, !torch.vtensor<[2,32,4096,128],f16>, !torch.vtensor<[2,32,4096,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[2,32,1024,128],f16>, !torch.vtensor<[2,32,1024], f32>) + return %282#0 : !torch.vtensor<[2,32,1024,128],f16> + } +} diff --git a/attention/mlir/attention_B2_H32_SQ1024_SKV4096_DH128_fp16.mlir b/attention/mlir/attention_B2_H32_SQ1024_SKV4096_DH128_fp16.mlir new file mode 100644 index 0000000..23b3632 --- /dev/null +++ b/attention/mlir/attention_B2_H32_SQ1024_SKV4096_DH128_fp16.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[2,32,1024,128],f16>, %298 : !torch.vtensor<[2,32,4096,128],f16>, %301 : !torch.vtensor<[2,32,4096,128],f16>) -> !torch.vtensor<[2,32,1024,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[2,32,1024,128],f16>, !torch.vtensor<[2,32,4096,128],f16>, !torch.vtensor<[2,32,4096,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[2,32,1024,128],f16>, !torch.vtensor<[2,32,1024], f32>) + return %282#0 : !torch.vtensor<[2,32,1024,128],f16> + } +} diff --git a/attention/mlir/attention_B2_H32_SQ1024_SKV4096_DH128_fp8.mlir b/attention/mlir/attention_B2_H32_SQ1024_SKV4096_DH128_fp8.mlir new file mode 100644 index 0000000..23b3632 --- /dev/null +++ b/attention/mlir/attention_B2_H32_SQ1024_SKV4096_DH128_fp8.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[2,32,1024,128],f16>, %298 : !torch.vtensor<[2,32,4096,128],f16>, %301 : !torch.vtensor<[2,32,4096,128],f16>) -> !torch.vtensor<[2,32,1024,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[2,32,1024,128],f16>, !torch.vtensor<[2,32,4096,128],f16>, !torch.vtensor<[2,32,4096,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[2,32,1024,128],f16>, !torch.vtensor<[2,32,1024], f32>) + return %282#0 : !torch.vtensor<[2,32,1024,128],f16> + } +} diff --git a/attention/mlir/attention_B2_H32_SQ2048_SKV1024_DH128_f16.mlir b/attention/mlir/attention_B2_H32_SQ2048_SKV1024_DH128_f16.mlir new file mode 100644 index 0000000..6fdc255 --- /dev/null +++ b/attention/mlir/attention_B2_H32_SQ2048_SKV1024_DH128_f16.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[2,32,2048,128],f16>, %298 : !torch.vtensor<[2,32,1024,128],f16>, %301 : !torch.vtensor<[2,32,1024,128],f16>) -> !torch.vtensor<[2,32,2048,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[2,32,2048,128],f16>, !torch.vtensor<[2,32,1024,128],f16>, !torch.vtensor<[2,32,1024,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[2,32,2048,128],f16>, !torch.vtensor<[2,32,2048], f32>) + return %282#0 : !torch.vtensor<[2,32,2048,128],f16> + } +} diff --git a/attention/mlir/attention_B2_H32_SQ2048_SKV1024_DH128_f8.mlir b/attention/mlir/attention_B2_H32_SQ2048_SKV1024_DH128_f8.mlir new file mode 100644 index 0000000..6fdc255 --- /dev/null +++ b/attention/mlir/attention_B2_H32_SQ2048_SKV1024_DH128_f8.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[2,32,2048,128],f16>, %298 : !torch.vtensor<[2,32,1024,128],f16>, %301 : !torch.vtensor<[2,32,1024,128],f16>) -> !torch.vtensor<[2,32,2048,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[2,32,2048,128],f16>, !torch.vtensor<[2,32,1024,128],f16>, !torch.vtensor<[2,32,1024,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[2,32,2048,128],f16>, !torch.vtensor<[2,32,2048], f32>) + return %282#0 : !torch.vtensor<[2,32,2048,128],f16> + } +} diff --git a/attention/mlir/attention_B2_H32_SQ2048_SKV1024_DH128_fp16.mlir b/attention/mlir/attention_B2_H32_SQ2048_SKV1024_DH128_fp16.mlir new file mode 100644 index 0000000..6fdc255 --- /dev/null +++ b/attention/mlir/attention_B2_H32_SQ2048_SKV1024_DH128_fp16.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[2,32,2048,128],f16>, %298 : !torch.vtensor<[2,32,1024,128],f16>, %301 : !torch.vtensor<[2,32,1024,128],f16>) -> !torch.vtensor<[2,32,2048,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[2,32,2048,128],f16>, !torch.vtensor<[2,32,1024,128],f16>, !torch.vtensor<[2,32,1024,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[2,32,2048,128],f16>, !torch.vtensor<[2,32,2048], f32>) + return %282#0 : !torch.vtensor<[2,32,2048,128],f16> + } +} diff --git a/attention/mlir/attention_B2_H32_SQ2048_SKV1024_DH128_fp8.mlir b/attention/mlir/attention_B2_H32_SQ2048_SKV1024_DH128_fp8.mlir new file mode 100644 index 0000000..6fdc255 --- /dev/null +++ b/attention/mlir/attention_B2_H32_SQ2048_SKV1024_DH128_fp8.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[2,32,2048,128],f16>, %298 : !torch.vtensor<[2,32,1024,128],f16>, %301 : !torch.vtensor<[2,32,1024,128],f16>) -> !torch.vtensor<[2,32,2048,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[2,32,2048,128],f16>, !torch.vtensor<[2,32,1024,128],f16>, !torch.vtensor<[2,32,1024,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[2,32,2048,128],f16>, !torch.vtensor<[2,32,2048], f32>) + return %282#0 : !torch.vtensor<[2,32,2048,128],f16> + } +} diff --git a/attention/mlir/attention_B2_H32_SQ2048_SKV2048_DH128_f16.mlir b/attention/mlir/attention_B2_H32_SQ2048_SKV2048_DH128_f16.mlir new file mode 100644 index 0000000..b5b3839 --- /dev/null +++ b/attention/mlir/attention_B2_H32_SQ2048_SKV2048_DH128_f16.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[2,32,2048,128],f16>, %298 : !torch.vtensor<[2,32,2048,128],f16>, %301 : !torch.vtensor<[2,32,2048,128],f16>) -> !torch.vtensor<[2,32,2048,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[2,32,2048,128],f16>, !torch.vtensor<[2,32,2048,128],f16>, !torch.vtensor<[2,32,2048,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[2,32,2048,128],f16>, !torch.vtensor<[2,32,2048], f32>) + return %282#0 : !torch.vtensor<[2,32,2048,128],f16> + } +} diff --git a/attention/mlir/attention_B2_H32_SQ2048_SKV2048_DH128_f8.mlir b/attention/mlir/attention_B2_H32_SQ2048_SKV2048_DH128_f8.mlir new file mode 100644 index 0000000..b5b3839 --- /dev/null +++ b/attention/mlir/attention_B2_H32_SQ2048_SKV2048_DH128_f8.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[2,32,2048,128],f16>, %298 : !torch.vtensor<[2,32,2048,128],f16>, %301 : !torch.vtensor<[2,32,2048,128],f16>) -> !torch.vtensor<[2,32,2048,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[2,32,2048,128],f16>, !torch.vtensor<[2,32,2048,128],f16>, !torch.vtensor<[2,32,2048,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[2,32,2048,128],f16>, !torch.vtensor<[2,32,2048], f32>) + return %282#0 : !torch.vtensor<[2,32,2048,128],f16> + } +} diff --git a/attention/mlir/attention_B2_H32_SQ2048_SKV2048_DH128_fp16.mlir b/attention/mlir/attention_B2_H32_SQ2048_SKV2048_DH128_fp16.mlir new file mode 100644 index 0000000..b5b3839 --- /dev/null +++ b/attention/mlir/attention_B2_H32_SQ2048_SKV2048_DH128_fp16.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[2,32,2048,128],f16>, %298 : !torch.vtensor<[2,32,2048,128],f16>, %301 : !torch.vtensor<[2,32,2048,128],f16>) -> !torch.vtensor<[2,32,2048,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[2,32,2048,128],f16>, !torch.vtensor<[2,32,2048,128],f16>, !torch.vtensor<[2,32,2048,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[2,32,2048,128],f16>, !torch.vtensor<[2,32,2048], f32>) + return %282#0 : !torch.vtensor<[2,32,2048,128],f16> + } +} diff --git a/attention/mlir/attention_B2_H32_SQ2048_SKV2048_DH128_fp8.mlir b/attention/mlir/attention_B2_H32_SQ2048_SKV2048_DH128_fp8.mlir new file mode 100644 index 0000000..b5b3839 --- /dev/null +++ b/attention/mlir/attention_B2_H32_SQ2048_SKV2048_DH128_fp8.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[2,32,2048,128],f16>, %298 : !torch.vtensor<[2,32,2048,128],f16>, %301 : !torch.vtensor<[2,32,2048,128],f16>) -> !torch.vtensor<[2,32,2048,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[2,32,2048,128],f16>, !torch.vtensor<[2,32,2048,128],f16>, !torch.vtensor<[2,32,2048,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[2,32,2048,128],f16>, !torch.vtensor<[2,32,2048], f32>) + return %282#0 : !torch.vtensor<[2,32,2048,128],f16> + } +} diff --git a/attention/mlir/attention_B2_H32_SQ2048_SKV4096_DH128_f16.mlir b/attention/mlir/attention_B2_H32_SQ2048_SKV4096_DH128_f16.mlir new file mode 100644 index 0000000..30f3a51 --- /dev/null +++ b/attention/mlir/attention_B2_H32_SQ2048_SKV4096_DH128_f16.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[2,32,2048,128],f16>, %298 : !torch.vtensor<[2,32,4096,128],f16>, %301 : !torch.vtensor<[2,32,4096,128],f16>) -> !torch.vtensor<[2,32,2048,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[2,32,2048,128],f16>, !torch.vtensor<[2,32,4096,128],f16>, !torch.vtensor<[2,32,4096,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[2,32,2048,128],f16>, !torch.vtensor<[2,32,2048], f32>) + return %282#0 : !torch.vtensor<[2,32,2048,128],f16> + } +} diff --git a/attention/mlir/attention_B2_H32_SQ2048_SKV4096_DH128_f8.mlir b/attention/mlir/attention_B2_H32_SQ2048_SKV4096_DH128_f8.mlir new file mode 100644 index 0000000..30f3a51 --- /dev/null +++ b/attention/mlir/attention_B2_H32_SQ2048_SKV4096_DH128_f8.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[2,32,2048,128],f16>, %298 : !torch.vtensor<[2,32,4096,128],f16>, %301 : !torch.vtensor<[2,32,4096,128],f16>) -> !torch.vtensor<[2,32,2048,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[2,32,2048,128],f16>, !torch.vtensor<[2,32,4096,128],f16>, !torch.vtensor<[2,32,4096,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[2,32,2048,128],f16>, !torch.vtensor<[2,32,2048], f32>) + return %282#0 : !torch.vtensor<[2,32,2048,128],f16> + } +} diff --git a/attention/mlir/attention_B2_H32_SQ2048_SKV4096_DH128_fp16.mlir b/attention/mlir/attention_B2_H32_SQ2048_SKV4096_DH128_fp16.mlir new file mode 100644 index 0000000..30f3a51 --- /dev/null +++ b/attention/mlir/attention_B2_H32_SQ2048_SKV4096_DH128_fp16.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[2,32,2048,128],f16>, %298 : !torch.vtensor<[2,32,4096,128],f16>, %301 : !torch.vtensor<[2,32,4096,128],f16>) -> !torch.vtensor<[2,32,2048,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[2,32,2048,128],f16>, !torch.vtensor<[2,32,4096,128],f16>, !torch.vtensor<[2,32,4096,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[2,32,2048,128],f16>, !torch.vtensor<[2,32,2048], f32>) + return %282#0 : !torch.vtensor<[2,32,2048,128],f16> + } +} diff --git a/attention/mlir/attention_B2_H32_SQ2048_SKV4096_DH128_fp8.mlir b/attention/mlir/attention_B2_H32_SQ2048_SKV4096_DH128_fp8.mlir new file mode 100644 index 0000000..30f3a51 --- /dev/null +++ b/attention/mlir/attention_B2_H32_SQ2048_SKV4096_DH128_fp8.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[2,32,2048,128],f16>, %298 : !torch.vtensor<[2,32,4096,128],f16>, %301 : !torch.vtensor<[2,32,4096,128],f16>) -> !torch.vtensor<[2,32,2048,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[2,32,2048,128],f16>, !torch.vtensor<[2,32,4096,128],f16>, !torch.vtensor<[2,32,4096,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[2,32,2048,128],f16>, !torch.vtensor<[2,32,2048], f32>) + return %282#0 : !torch.vtensor<[2,32,2048,128],f16> + } +} diff --git a/attention/mlir/attention_B2_H32_SQ4096_SKV1024_DH128_f16.mlir b/attention/mlir/attention_B2_H32_SQ4096_SKV1024_DH128_f16.mlir new file mode 100644 index 0000000..08ac4eb --- /dev/null +++ b/attention/mlir/attention_B2_H32_SQ4096_SKV1024_DH128_f16.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[2,32,4096,128],f16>, %298 : !torch.vtensor<[2,32,1024,128],f16>, %301 : !torch.vtensor<[2,32,1024,128],f16>) -> !torch.vtensor<[2,32,4096,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[2,32,4096,128],f16>, !torch.vtensor<[2,32,1024,128],f16>, !torch.vtensor<[2,32,1024,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[2,32,4096,128],f16>, !torch.vtensor<[2,32,4096], f32>) + return %282#0 : !torch.vtensor<[2,32,4096,128],f16> + } +} diff --git a/attention/mlir/attention_B2_H32_SQ4096_SKV1024_DH128_f8.mlir b/attention/mlir/attention_B2_H32_SQ4096_SKV1024_DH128_f8.mlir new file mode 100644 index 0000000..08ac4eb --- /dev/null +++ b/attention/mlir/attention_B2_H32_SQ4096_SKV1024_DH128_f8.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[2,32,4096,128],f16>, %298 : !torch.vtensor<[2,32,1024,128],f16>, %301 : !torch.vtensor<[2,32,1024,128],f16>) -> !torch.vtensor<[2,32,4096,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[2,32,4096,128],f16>, !torch.vtensor<[2,32,1024,128],f16>, !torch.vtensor<[2,32,1024,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[2,32,4096,128],f16>, !torch.vtensor<[2,32,4096], f32>) + return %282#0 : !torch.vtensor<[2,32,4096,128],f16> + } +} diff --git a/attention/mlir/attention_B2_H32_SQ4096_SKV1024_DH128_fp16.mlir b/attention/mlir/attention_B2_H32_SQ4096_SKV1024_DH128_fp16.mlir new file mode 100644 index 0000000..08ac4eb --- /dev/null +++ b/attention/mlir/attention_B2_H32_SQ4096_SKV1024_DH128_fp16.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[2,32,4096,128],f16>, %298 : !torch.vtensor<[2,32,1024,128],f16>, %301 : !torch.vtensor<[2,32,1024,128],f16>) -> !torch.vtensor<[2,32,4096,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[2,32,4096,128],f16>, !torch.vtensor<[2,32,1024,128],f16>, !torch.vtensor<[2,32,1024,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[2,32,4096,128],f16>, !torch.vtensor<[2,32,4096], f32>) + return %282#0 : !torch.vtensor<[2,32,4096,128],f16> + } +} diff --git a/attention/mlir/attention_B2_H32_SQ4096_SKV1024_DH128_fp8.mlir b/attention/mlir/attention_B2_H32_SQ4096_SKV1024_DH128_fp8.mlir new file mode 100644 index 0000000..08ac4eb --- /dev/null +++ b/attention/mlir/attention_B2_H32_SQ4096_SKV1024_DH128_fp8.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[2,32,4096,128],f16>, %298 : !torch.vtensor<[2,32,1024,128],f16>, %301 : !torch.vtensor<[2,32,1024,128],f16>) -> !torch.vtensor<[2,32,4096,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[2,32,4096,128],f16>, !torch.vtensor<[2,32,1024,128],f16>, !torch.vtensor<[2,32,1024,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[2,32,4096,128],f16>, !torch.vtensor<[2,32,4096], f32>) + return %282#0 : !torch.vtensor<[2,32,4096,128],f16> + } +} diff --git a/attention/mlir/attention_B2_H32_SQ4096_SKV2048_DH128_f16.mlir b/attention/mlir/attention_B2_H32_SQ4096_SKV2048_DH128_f16.mlir new file mode 100644 index 0000000..a480464 --- /dev/null +++ b/attention/mlir/attention_B2_H32_SQ4096_SKV2048_DH128_f16.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[2,32,4096,128],f16>, %298 : !torch.vtensor<[2,32,2048,128],f16>, %301 : !torch.vtensor<[2,32,2048,128],f16>) -> !torch.vtensor<[2,32,4096,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[2,32,4096,128],f16>, !torch.vtensor<[2,32,2048,128],f16>, !torch.vtensor<[2,32,2048,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[2,32,4096,128],f16>, !torch.vtensor<[2,32,4096], f32>) + return %282#0 : !torch.vtensor<[2,32,4096,128],f16> + } +} diff --git a/attention/mlir/attention_B2_H32_SQ4096_SKV2048_DH128_f8.mlir b/attention/mlir/attention_B2_H32_SQ4096_SKV2048_DH128_f8.mlir new file mode 100644 index 0000000..a480464 --- /dev/null +++ b/attention/mlir/attention_B2_H32_SQ4096_SKV2048_DH128_f8.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[2,32,4096,128],f16>, %298 : !torch.vtensor<[2,32,2048,128],f16>, %301 : !torch.vtensor<[2,32,2048,128],f16>) -> !torch.vtensor<[2,32,4096,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[2,32,4096,128],f16>, !torch.vtensor<[2,32,2048,128],f16>, !torch.vtensor<[2,32,2048,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[2,32,4096,128],f16>, !torch.vtensor<[2,32,4096], f32>) + return %282#0 : !torch.vtensor<[2,32,4096,128],f16> + } +} diff --git a/attention/mlir/attention_B2_H32_SQ4096_SKV2048_DH128_fp16.mlir b/attention/mlir/attention_B2_H32_SQ4096_SKV2048_DH128_fp16.mlir new file mode 100644 index 0000000..a480464 --- /dev/null +++ b/attention/mlir/attention_B2_H32_SQ4096_SKV2048_DH128_fp16.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[2,32,4096,128],f16>, %298 : !torch.vtensor<[2,32,2048,128],f16>, %301 : !torch.vtensor<[2,32,2048,128],f16>) -> !torch.vtensor<[2,32,4096,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[2,32,4096,128],f16>, !torch.vtensor<[2,32,2048,128],f16>, !torch.vtensor<[2,32,2048,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[2,32,4096,128],f16>, !torch.vtensor<[2,32,4096], f32>) + return %282#0 : !torch.vtensor<[2,32,4096,128],f16> + } +} diff --git a/attention/mlir/attention_B2_H32_SQ4096_SKV2048_DH128_fp8.mlir b/attention/mlir/attention_B2_H32_SQ4096_SKV2048_DH128_fp8.mlir new file mode 100644 index 0000000..a480464 --- /dev/null +++ b/attention/mlir/attention_B2_H32_SQ4096_SKV2048_DH128_fp8.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[2,32,4096,128],f16>, %298 : !torch.vtensor<[2,32,2048,128],f16>, %301 : !torch.vtensor<[2,32,2048,128],f16>) -> !torch.vtensor<[2,32,4096,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[2,32,4096,128],f16>, !torch.vtensor<[2,32,2048,128],f16>, !torch.vtensor<[2,32,2048,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[2,32,4096,128],f16>, !torch.vtensor<[2,32,4096], f32>) + return %282#0 : !torch.vtensor<[2,32,4096,128],f16> + } +} diff --git a/attention/mlir/attention_B2_H32_SQ4096_SKV4096_DH128_f16.mlir b/attention/mlir/attention_B2_H32_SQ4096_SKV4096_DH128_f16.mlir new file mode 100644 index 0000000..ca78571 --- /dev/null +++ b/attention/mlir/attention_B2_H32_SQ4096_SKV4096_DH128_f16.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[2,32,4096,128],f16>, %298 : !torch.vtensor<[2,32,4096,128],f16>, %301 : !torch.vtensor<[2,32,4096,128],f16>) -> !torch.vtensor<[2,32,4096,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[2,32,4096,128],f16>, !torch.vtensor<[2,32,4096,128],f16>, !torch.vtensor<[2,32,4096,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[2,32,4096,128],f16>, !torch.vtensor<[2,32,4096], f32>) + return %282#0 : !torch.vtensor<[2,32,4096,128],f16> + } +} diff --git a/attention/mlir/attention_B2_H32_SQ4096_SKV4096_DH128_f8.mlir b/attention/mlir/attention_B2_H32_SQ4096_SKV4096_DH128_f8.mlir new file mode 100644 index 0000000..ca78571 --- /dev/null +++ b/attention/mlir/attention_B2_H32_SQ4096_SKV4096_DH128_f8.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[2,32,4096,128],f16>, %298 : !torch.vtensor<[2,32,4096,128],f16>, %301 : !torch.vtensor<[2,32,4096,128],f16>) -> !torch.vtensor<[2,32,4096,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[2,32,4096,128],f16>, !torch.vtensor<[2,32,4096,128],f16>, !torch.vtensor<[2,32,4096,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[2,32,4096,128],f16>, !torch.vtensor<[2,32,4096], f32>) + return %282#0 : !torch.vtensor<[2,32,4096,128],f16> + } +} diff --git a/attention/mlir/attention_B2_H32_SQ4096_SKV4096_DH128_fp16.mlir b/attention/mlir/attention_B2_H32_SQ4096_SKV4096_DH128_fp16.mlir new file mode 100644 index 0000000..ca78571 --- /dev/null +++ b/attention/mlir/attention_B2_H32_SQ4096_SKV4096_DH128_fp16.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[2,32,4096,128],f16>, %298 : !torch.vtensor<[2,32,4096,128],f16>, %301 : !torch.vtensor<[2,32,4096,128],f16>) -> !torch.vtensor<[2,32,4096,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[2,32,4096,128],f16>, !torch.vtensor<[2,32,4096,128],f16>, !torch.vtensor<[2,32,4096,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[2,32,4096,128],f16>, !torch.vtensor<[2,32,4096], f32>) + return %282#0 : !torch.vtensor<[2,32,4096,128],f16> + } +} diff --git a/attention/mlir/attention_B2_H32_SQ4096_SKV4096_DH128_fp8.mlir b/attention/mlir/attention_B2_H32_SQ4096_SKV4096_DH128_fp8.mlir new file mode 100644 index 0000000..ca78571 --- /dev/null +++ b/attention/mlir/attention_B2_H32_SQ4096_SKV4096_DH128_fp8.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[2,32,4096,128],f16>, %298 : !torch.vtensor<[2,32,4096,128],f16>, %301 : !torch.vtensor<[2,32,4096,128],f16>) -> !torch.vtensor<[2,32,4096,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[2,32,4096,128],f16>, !torch.vtensor<[2,32,4096,128],f16>, !torch.vtensor<[2,32,4096,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[2,32,4096,128],f16>, !torch.vtensor<[2,32,4096], f32>) + return %282#0 : !torch.vtensor<[2,32,4096,128],f16> + } +} diff --git a/attention/mlir/attention_B2_H40_SQ1024_SKV1024_DH128_f16.mlir b/attention/mlir/attention_B2_H40_SQ1024_SKV1024_DH128_f16.mlir new file mode 100644 index 0000000..bb29a69 --- /dev/null +++ b/attention/mlir/attention_B2_H40_SQ1024_SKV1024_DH128_f16.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[2,40,1024,128],f16>, %298 : !torch.vtensor<[2,40,1024,128],f16>, %301 : !torch.vtensor<[2,40,1024,128],f16>) -> !torch.vtensor<[2,40,1024,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[2,40,1024,128],f16>, !torch.vtensor<[2,40,1024,128],f16>, !torch.vtensor<[2,40,1024,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[2,40,1024,128],f16>, !torch.vtensor<[2,40,1024], f32>) + return %282#0 : !torch.vtensor<[2,40,1024,128],f16> + } +} diff --git a/attention/mlir/attention_B2_H40_SQ1024_SKV1024_DH128_f8.mlir b/attention/mlir/attention_B2_H40_SQ1024_SKV1024_DH128_f8.mlir new file mode 100644 index 0000000..bb29a69 --- /dev/null +++ b/attention/mlir/attention_B2_H40_SQ1024_SKV1024_DH128_f8.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[2,40,1024,128],f16>, %298 : !torch.vtensor<[2,40,1024,128],f16>, %301 : !torch.vtensor<[2,40,1024,128],f16>) -> !torch.vtensor<[2,40,1024,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[2,40,1024,128],f16>, !torch.vtensor<[2,40,1024,128],f16>, !torch.vtensor<[2,40,1024,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[2,40,1024,128],f16>, !torch.vtensor<[2,40,1024], f32>) + return %282#0 : !torch.vtensor<[2,40,1024,128],f16> + } +} diff --git a/attention/mlir/attention_B2_H40_SQ1024_SKV1024_DH128_fp16.mlir b/attention/mlir/attention_B2_H40_SQ1024_SKV1024_DH128_fp16.mlir new file mode 100644 index 0000000..bb29a69 --- /dev/null +++ b/attention/mlir/attention_B2_H40_SQ1024_SKV1024_DH128_fp16.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[2,40,1024,128],f16>, %298 : !torch.vtensor<[2,40,1024,128],f16>, %301 : !torch.vtensor<[2,40,1024,128],f16>) -> !torch.vtensor<[2,40,1024,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[2,40,1024,128],f16>, !torch.vtensor<[2,40,1024,128],f16>, !torch.vtensor<[2,40,1024,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[2,40,1024,128],f16>, !torch.vtensor<[2,40,1024], f32>) + return %282#0 : !torch.vtensor<[2,40,1024,128],f16> + } +} diff --git a/attention/mlir/attention_B2_H40_SQ1024_SKV1024_DH128_fp8.mlir b/attention/mlir/attention_B2_H40_SQ1024_SKV1024_DH128_fp8.mlir new file mode 100644 index 0000000..bb29a69 --- /dev/null +++ b/attention/mlir/attention_B2_H40_SQ1024_SKV1024_DH128_fp8.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[2,40,1024,128],f16>, %298 : !torch.vtensor<[2,40,1024,128],f16>, %301 : !torch.vtensor<[2,40,1024,128],f16>) -> !torch.vtensor<[2,40,1024,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[2,40,1024,128],f16>, !torch.vtensor<[2,40,1024,128],f16>, !torch.vtensor<[2,40,1024,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[2,40,1024,128],f16>, !torch.vtensor<[2,40,1024], f32>) + return %282#0 : !torch.vtensor<[2,40,1024,128],f16> + } +} diff --git a/attention/mlir/attention_B2_H40_SQ1024_SKV2048_DH128_f16.mlir b/attention/mlir/attention_B2_H40_SQ1024_SKV2048_DH128_f16.mlir new file mode 100644 index 0000000..218078d --- /dev/null +++ b/attention/mlir/attention_B2_H40_SQ1024_SKV2048_DH128_f16.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[2,40,1024,128],f16>, %298 : !torch.vtensor<[2,40,2048,128],f16>, %301 : !torch.vtensor<[2,40,2048,128],f16>) -> !torch.vtensor<[2,40,1024,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[2,40,1024,128],f16>, !torch.vtensor<[2,40,2048,128],f16>, !torch.vtensor<[2,40,2048,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[2,40,1024,128],f16>, !torch.vtensor<[2,40,1024], f32>) + return %282#0 : !torch.vtensor<[2,40,1024,128],f16> + } +} diff --git a/attention/mlir/attention_B2_H40_SQ1024_SKV2048_DH128_f8.mlir b/attention/mlir/attention_B2_H40_SQ1024_SKV2048_DH128_f8.mlir new file mode 100644 index 0000000..218078d --- /dev/null +++ b/attention/mlir/attention_B2_H40_SQ1024_SKV2048_DH128_f8.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[2,40,1024,128],f16>, %298 : !torch.vtensor<[2,40,2048,128],f16>, %301 : !torch.vtensor<[2,40,2048,128],f16>) -> !torch.vtensor<[2,40,1024,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[2,40,1024,128],f16>, !torch.vtensor<[2,40,2048,128],f16>, !torch.vtensor<[2,40,2048,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[2,40,1024,128],f16>, !torch.vtensor<[2,40,1024], f32>) + return %282#0 : !torch.vtensor<[2,40,1024,128],f16> + } +} diff --git a/attention/mlir/attention_B2_H40_SQ1024_SKV2048_DH128_fp16.mlir b/attention/mlir/attention_B2_H40_SQ1024_SKV2048_DH128_fp16.mlir new file mode 100644 index 0000000..218078d --- /dev/null +++ b/attention/mlir/attention_B2_H40_SQ1024_SKV2048_DH128_fp16.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[2,40,1024,128],f16>, %298 : !torch.vtensor<[2,40,2048,128],f16>, %301 : !torch.vtensor<[2,40,2048,128],f16>) -> !torch.vtensor<[2,40,1024,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[2,40,1024,128],f16>, !torch.vtensor<[2,40,2048,128],f16>, !torch.vtensor<[2,40,2048,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[2,40,1024,128],f16>, !torch.vtensor<[2,40,1024], f32>) + return %282#0 : !torch.vtensor<[2,40,1024,128],f16> + } +} diff --git a/attention/mlir/attention_B2_H40_SQ1024_SKV2048_DH128_fp8.mlir b/attention/mlir/attention_B2_H40_SQ1024_SKV2048_DH128_fp8.mlir new file mode 100644 index 0000000..218078d --- /dev/null +++ b/attention/mlir/attention_B2_H40_SQ1024_SKV2048_DH128_fp8.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[2,40,1024,128],f16>, %298 : !torch.vtensor<[2,40,2048,128],f16>, %301 : !torch.vtensor<[2,40,2048,128],f16>) -> !torch.vtensor<[2,40,1024,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[2,40,1024,128],f16>, !torch.vtensor<[2,40,2048,128],f16>, !torch.vtensor<[2,40,2048,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[2,40,1024,128],f16>, !torch.vtensor<[2,40,1024], f32>) + return %282#0 : !torch.vtensor<[2,40,1024,128],f16> + } +} diff --git a/attention/mlir/attention_B2_H40_SQ1024_SKV4096_DH128_f16.mlir b/attention/mlir/attention_B2_H40_SQ1024_SKV4096_DH128_f16.mlir new file mode 100644 index 0000000..bb601e0 --- /dev/null +++ b/attention/mlir/attention_B2_H40_SQ1024_SKV4096_DH128_f16.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[2,40,1024,128],f16>, %298 : !torch.vtensor<[2,40,4096,128],f16>, %301 : !torch.vtensor<[2,40,4096,128],f16>) -> !torch.vtensor<[2,40,1024,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[2,40,1024,128],f16>, !torch.vtensor<[2,40,4096,128],f16>, !torch.vtensor<[2,40,4096,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[2,40,1024,128],f16>, !torch.vtensor<[2,40,1024], f32>) + return %282#0 : !torch.vtensor<[2,40,1024,128],f16> + } +} diff --git a/attention/mlir/attention_B2_H40_SQ1024_SKV4096_DH128_f8.mlir b/attention/mlir/attention_B2_H40_SQ1024_SKV4096_DH128_f8.mlir new file mode 100644 index 0000000..bb601e0 --- /dev/null +++ b/attention/mlir/attention_B2_H40_SQ1024_SKV4096_DH128_f8.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[2,40,1024,128],f16>, %298 : !torch.vtensor<[2,40,4096,128],f16>, %301 : !torch.vtensor<[2,40,4096,128],f16>) -> !torch.vtensor<[2,40,1024,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[2,40,1024,128],f16>, !torch.vtensor<[2,40,4096,128],f16>, !torch.vtensor<[2,40,4096,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[2,40,1024,128],f16>, !torch.vtensor<[2,40,1024], f32>) + return %282#0 : !torch.vtensor<[2,40,1024,128],f16> + } +} diff --git a/attention/mlir/attention_B2_H40_SQ1024_SKV4096_DH128_fp16.mlir b/attention/mlir/attention_B2_H40_SQ1024_SKV4096_DH128_fp16.mlir new file mode 100644 index 0000000..bb601e0 --- /dev/null +++ b/attention/mlir/attention_B2_H40_SQ1024_SKV4096_DH128_fp16.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[2,40,1024,128],f16>, %298 : !torch.vtensor<[2,40,4096,128],f16>, %301 : !torch.vtensor<[2,40,4096,128],f16>) -> !torch.vtensor<[2,40,1024,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[2,40,1024,128],f16>, !torch.vtensor<[2,40,4096,128],f16>, !torch.vtensor<[2,40,4096,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[2,40,1024,128],f16>, !torch.vtensor<[2,40,1024], f32>) + return %282#0 : !torch.vtensor<[2,40,1024,128],f16> + } +} diff --git a/attention/mlir/attention_B2_H40_SQ1024_SKV4096_DH128_fp8.mlir b/attention/mlir/attention_B2_H40_SQ1024_SKV4096_DH128_fp8.mlir new file mode 100644 index 0000000..bb601e0 --- /dev/null +++ b/attention/mlir/attention_B2_H40_SQ1024_SKV4096_DH128_fp8.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[2,40,1024,128],f16>, %298 : !torch.vtensor<[2,40,4096,128],f16>, %301 : !torch.vtensor<[2,40,4096,128],f16>) -> !torch.vtensor<[2,40,1024,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[2,40,1024,128],f16>, !torch.vtensor<[2,40,4096,128],f16>, !torch.vtensor<[2,40,4096,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[2,40,1024,128],f16>, !torch.vtensor<[2,40,1024], f32>) + return %282#0 : !torch.vtensor<[2,40,1024,128],f16> + } +} diff --git a/attention/mlir/attention_B2_H40_SQ2048_SKV1024_DH128_f16.mlir b/attention/mlir/attention_B2_H40_SQ2048_SKV1024_DH128_f16.mlir new file mode 100644 index 0000000..31fffb1 --- /dev/null +++ b/attention/mlir/attention_B2_H40_SQ2048_SKV1024_DH128_f16.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[2,40,2048,128],f16>, %298 : !torch.vtensor<[2,40,1024,128],f16>, %301 : !torch.vtensor<[2,40,1024,128],f16>) -> !torch.vtensor<[2,40,2048,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[2,40,2048,128],f16>, !torch.vtensor<[2,40,1024,128],f16>, !torch.vtensor<[2,40,1024,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[2,40,2048,128],f16>, !torch.vtensor<[2,40,2048], f32>) + return %282#0 : !torch.vtensor<[2,40,2048,128],f16> + } +} diff --git a/attention/mlir/attention_B2_H40_SQ2048_SKV1024_DH128_f8.mlir b/attention/mlir/attention_B2_H40_SQ2048_SKV1024_DH128_f8.mlir new file mode 100644 index 0000000..31fffb1 --- /dev/null +++ b/attention/mlir/attention_B2_H40_SQ2048_SKV1024_DH128_f8.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[2,40,2048,128],f16>, %298 : !torch.vtensor<[2,40,1024,128],f16>, %301 : !torch.vtensor<[2,40,1024,128],f16>) -> !torch.vtensor<[2,40,2048,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[2,40,2048,128],f16>, !torch.vtensor<[2,40,1024,128],f16>, !torch.vtensor<[2,40,1024,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[2,40,2048,128],f16>, !torch.vtensor<[2,40,2048], f32>) + return %282#0 : !torch.vtensor<[2,40,2048,128],f16> + } +} diff --git a/attention/mlir/attention_B2_H40_SQ2048_SKV1024_DH128_fp16.mlir b/attention/mlir/attention_B2_H40_SQ2048_SKV1024_DH128_fp16.mlir new file mode 100644 index 0000000..31fffb1 --- /dev/null +++ b/attention/mlir/attention_B2_H40_SQ2048_SKV1024_DH128_fp16.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[2,40,2048,128],f16>, %298 : !torch.vtensor<[2,40,1024,128],f16>, %301 : !torch.vtensor<[2,40,1024,128],f16>) -> !torch.vtensor<[2,40,2048,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[2,40,2048,128],f16>, !torch.vtensor<[2,40,1024,128],f16>, !torch.vtensor<[2,40,1024,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[2,40,2048,128],f16>, !torch.vtensor<[2,40,2048], f32>) + return %282#0 : !torch.vtensor<[2,40,2048,128],f16> + } +} diff --git a/attention/mlir/attention_B2_H40_SQ2048_SKV1024_DH128_fp8.mlir b/attention/mlir/attention_B2_H40_SQ2048_SKV1024_DH128_fp8.mlir new file mode 100644 index 0000000..31fffb1 --- /dev/null +++ b/attention/mlir/attention_B2_H40_SQ2048_SKV1024_DH128_fp8.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[2,40,2048,128],f16>, %298 : !torch.vtensor<[2,40,1024,128],f16>, %301 : !torch.vtensor<[2,40,1024,128],f16>) -> !torch.vtensor<[2,40,2048,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[2,40,2048,128],f16>, !torch.vtensor<[2,40,1024,128],f16>, !torch.vtensor<[2,40,1024,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[2,40,2048,128],f16>, !torch.vtensor<[2,40,2048], f32>) + return %282#0 : !torch.vtensor<[2,40,2048,128],f16> + } +} diff --git a/attention/mlir/attention_B2_H40_SQ2048_SKV2048_DH128_f16.mlir b/attention/mlir/attention_B2_H40_SQ2048_SKV2048_DH128_f16.mlir new file mode 100644 index 0000000..b0cef8f --- /dev/null +++ b/attention/mlir/attention_B2_H40_SQ2048_SKV2048_DH128_f16.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[2,40,2048,128],f16>, %298 : !torch.vtensor<[2,40,2048,128],f16>, %301 : !torch.vtensor<[2,40,2048,128],f16>) -> !torch.vtensor<[2,40,2048,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[2,40,2048,128],f16>, !torch.vtensor<[2,40,2048,128],f16>, !torch.vtensor<[2,40,2048,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[2,40,2048,128],f16>, !torch.vtensor<[2,40,2048], f32>) + return %282#0 : !torch.vtensor<[2,40,2048,128],f16> + } +} diff --git a/attention/mlir/attention_B2_H40_SQ2048_SKV2048_DH128_f8.mlir b/attention/mlir/attention_B2_H40_SQ2048_SKV2048_DH128_f8.mlir new file mode 100644 index 0000000..b0cef8f --- /dev/null +++ b/attention/mlir/attention_B2_H40_SQ2048_SKV2048_DH128_f8.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[2,40,2048,128],f16>, %298 : !torch.vtensor<[2,40,2048,128],f16>, %301 : !torch.vtensor<[2,40,2048,128],f16>) -> !torch.vtensor<[2,40,2048,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[2,40,2048,128],f16>, !torch.vtensor<[2,40,2048,128],f16>, !torch.vtensor<[2,40,2048,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[2,40,2048,128],f16>, !torch.vtensor<[2,40,2048], f32>) + return %282#0 : !torch.vtensor<[2,40,2048,128],f16> + } +} diff --git a/attention/mlir/attention_B2_H40_SQ2048_SKV2048_DH128_fp16.mlir b/attention/mlir/attention_B2_H40_SQ2048_SKV2048_DH128_fp16.mlir new file mode 100644 index 0000000..b0cef8f --- /dev/null +++ b/attention/mlir/attention_B2_H40_SQ2048_SKV2048_DH128_fp16.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[2,40,2048,128],f16>, %298 : !torch.vtensor<[2,40,2048,128],f16>, %301 : !torch.vtensor<[2,40,2048,128],f16>) -> !torch.vtensor<[2,40,2048,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[2,40,2048,128],f16>, !torch.vtensor<[2,40,2048,128],f16>, !torch.vtensor<[2,40,2048,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[2,40,2048,128],f16>, !torch.vtensor<[2,40,2048], f32>) + return %282#0 : !torch.vtensor<[2,40,2048,128],f16> + } +} diff --git a/attention/mlir/attention_B2_H40_SQ2048_SKV2048_DH128_fp8.mlir b/attention/mlir/attention_B2_H40_SQ2048_SKV2048_DH128_fp8.mlir new file mode 100644 index 0000000..b0cef8f --- /dev/null +++ b/attention/mlir/attention_B2_H40_SQ2048_SKV2048_DH128_fp8.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[2,40,2048,128],f16>, %298 : !torch.vtensor<[2,40,2048,128],f16>, %301 : !torch.vtensor<[2,40,2048,128],f16>) -> !torch.vtensor<[2,40,2048,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[2,40,2048,128],f16>, !torch.vtensor<[2,40,2048,128],f16>, !torch.vtensor<[2,40,2048,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[2,40,2048,128],f16>, !torch.vtensor<[2,40,2048], f32>) + return %282#0 : !torch.vtensor<[2,40,2048,128],f16> + } +} diff --git a/attention/mlir/attention_B2_H40_SQ2048_SKV4096_DH128_f16.mlir b/attention/mlir/attention_B2_H40_SQ2048_SKV4096_DH128_f16.mlir new file mode 100644 index 0000000..7f1b976 --- /dev/null +++ b/attention/mlir/attention_B2_H40_SQ2048_SKV4096_DH128_f16.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[2,40,2048,128],f16>, %298 : !torch.vtensor<[2,40,4096,128],f16>, %301 : !torch.vtensor<[2,40,4096,128],f16>) -> !torch.vtensor<[2,40,2048,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[2,40,2048,128],f16>, !torch.vtensor<[2,40,4096,128],f16>, !torch.vtensor<[2,40,4096,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[2,40,2048,128],f16>, !torch.vtensor<[2,40,2048], f32>) + return %282#0 : !torch.vtensor<[2,40,2048,128],f16> + } +} diff --git a/attention/mlir/attention_B2_H40_SQ2048_SKV4096_DH128_f8.mlir b/attention/mlir/attention_B2_H40_SQ2048_SKV4096_DH128_f8.mlir new file mode 100644 index 0000000..7f1b976 --- /dev/null +++ b/attention/mlir/attention_B2_H40_SQ2048_SKV4096_DH128_f8.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[2,40,2048,128],f16>, %298 : !torch.vtensor<[2,40,4096,128],f16>, %301 : !torch.vtensor<[2,40,4096,128],f16>) -> !torch.vtensor<[2,40,2048,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[2,40,2048,128],f16>, !torch.vtensor<[2,40,4096,128],f16>, !torch.vtensor<[2,40,4096,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[2,40,2048,128],f16>, !torch.vtensor<[2,40,2048], f32>) + return %282#0 : !torch.vtensor<[2,40,2048,128],f16> + } +} diff --git a/attention/mlir/attention_B2_H40_SQ2048_SKV4096_DH128_fp16.mlir b/attention/mlir/attention_B2_H40_SQ2048_SKV4096_DH128_fp16.mlir new file mode 100644 index 0000000..7f1b976 --- /dev/null +++ b/attention/mlir/attention_B2_H40_SQ2048_SKV4096_DH128_fp16.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[2,40,2048,128],f16>, %298 : !torch.vtensor<[2,40,4096,128],f16>, %301 : !torch.vtensor<[2,40,4096,128],f16>) -> !torch.vtensor<[2,40,2048,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[2,40,2048,128],f16>, !torch.vtensor<[2,40,4096,128],f16>, !torch.vtensor<[2,40,4096,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[2,40,2048,128],f16>, !torch.vtensor<[2,40,2048], f32>) + return %282#0 : !torch.vtensor<[2,40,2048,128],f16> + } +} diff --git a/attention/mlir/attention_B2_H40_SQ2048_SKV4096_DH128_fp8.mlir b/attention/mlir/attention_B2_H40_SQ2048_SKV4096_DH128_fp8.mlir new file mode 100644 index 0000000..7f1b976 --- /dev/null +++ b/attention/mlir/attention_B2_H40_SQ2048_SKV4096_DH128_fp8.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[2,40,2048,128],f16>, %298 : !torch.vtensor<[2,40,4096,128],f16>, %301 : !torch.vtensor<[2,40,4096,128],f16>) -> !torch.vtensor<[2,40,2048,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[2,40,2048,128],f16>, !torch.vtensor<[2,40,4096,128],f16>, !torch.vtensor<[2,40,4096,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[2,40,2048,128],f16>, !torch.vtensor<[2,40,2048], f32>) + return %282#0 : !torch.vtensor<[2,40,2048,128],f16> + } +} diff --git a/attention/mlir/attention_B2_H40_SQ4096_SKV1024_DH128_f16.mlir b/attention/mlir/attention_B2_H40_SQ4096_SKV1024_DH128_f16.mlir new file mode 100644 index 0000000..2597a3e --- /dev/null +++ b/attention/mlir/attention_B2_H40_SQ4096_SKV1024_DH128_f16.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[2,40,4096,128],f16>, %298 : !torch.vtensor<[2,40,1024,128],f16>, %301 : !torch.vtensor<[2,40,1024,128],f16>) -> !torch.vtensor<[2,40,4096,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[2,40,4096,128],f16>, !torch.vtensor<[2,40,1024,128],f16>, !torch.vtensor<[2,40,1024,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[2,40,4096,128],f16>, !torch.vtensor<[2,40,4096], f32>) + return %282#0 : !torch.vtensor<[2,40,4096,128],f16> + } +} diff --git a/attention/mlir/attention_B2_H40_SQ4096_SKV1024_DH128_f8.mlir b/attention/mlir/attention_B2_H40_SQ4096_SKV1024_DH128_f8.mlir new file mode 100644 index 0000000..2597a3e --- /dev/null +++ b/attention/mlir/attention_B2_H40_SQ4096_SKV1024_DH128_f8.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[2,40,4096,128],f16>, %298 : !torch.vtensor<[2,40,1024,128],f16>, %301 : !torch.vtensor<[2,40,1024,128],f16>) -> !torch.vtensor<[2,40,4096,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[2,40,4096,128],f16>, !torch.vtensor<[2,40,1024,128],f16>, !torch.vtensor<[2,40,1024,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[2,40,4096,128],f16>, !torch.vtensor<[2,40,4096], f32>) + return %282#0 : !torch.vtensor<[2,40,4096,128],f16> + } +} diff --git a/attention/mlir/attention_B2_H40_SQ4096_SKV1024_DH128_fp16.mlir b/attention/mlir/attention_B2_H40_SQ4096_SKV1024_DH128_fp16.mlir new file mode 100644 index 0000000..2597a3e --- /dev/null +++ b/attention/mlir/attention_B2_H40_SQ4096_SKV1024_DH128_fp16.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[2,40,4096,128],f16>, %298 : !torch.vtensor<[2,40,1024,128],f16>, %301 : !torch.vtensor<[2,40,1024,128],f16>) -> !torch.vtensor<[2,40,4096,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[2,40,4096,128],f16>, !torch.vtensor<[2,40,1024,128],f16>, !torch.vtensor<[2,40,1024,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[2,40,4096,128],f16>, !torch.vtensor<[2,40,4096], f32>) + return %282#0 : !torch.vtensor<[2,40,4096,128],f16> + } +} diff --git a/attention/mlir/attention_B2_H40_SQ4096_SKV1024_DH128_fp8.mlir b/attention/mlir/attention_B2_H40_SQ4096_SKV1024_DH128_fp8.mlir new file mode 100644 index 0000000..2597a3e --- /dev/null +++ b/attention/mlir/attention_B2_H40_SQ4096_SKV1024_DH128_fp8.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[2,40,4096,128],f16>, %298 : !torch.vtensor<[2,40,1024,128],f16>, %301 : !torch.vtensor<[2,40,1024,128],f16>) -> !torch.vtensor<[2,40,4096,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[2,40,4096,128],f16>, !torch.vtensor<[2,40,1024,128],f16>, !torch.vtensor<[2,40,1024,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[2,40,4096,128],f16>, !torch.vtensor<[2,40,4096], f32>) + return %282#0 : !torch.vtensor<[2,40,4096,128],f16> + } +} diff --git a/attention/mlir/attention_B2_H40_SQ4096_SKV2048_DH128_f16.mlir b/attention/mlir/attention_B2_H40_SQ4096_SKV2048_DH128_f16.mlir new file mode 100644 index 0000000..4159851 --- /dev/null +++ b/attention/mlir/attention_B2_H40_SQ4096_SKV2048_DH128_f16.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[2,40,4096,128],f16>, %298 : !torch.vtensor<[2,40,2048,128],f16>, %301 : !torch.vtensor<[2,40,2048,128],f16>) -> !torch.vtensor<[2,40,4096,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[2,40,4096,128],f16>, !torch.vtensor<[2,40,2048,128],f16>, !torch.vtensor<[2,40,2048,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[2,40,4096,128],f16>, !torch.vtensor<[2,40,4096], f32>) + return %282#0 : !torch.vtensor<[2,40,4096,128],f16> + } +} diff --git a/attention/mlir/attention_B2_H40_SQ4096_SKV2048_DH128_f8.mlir b/attention/mlir/attention_B2_H40_SQ4096_SKV2048_DH128_f8.mlir new file mode 100644 index 0000000..4159851 --- /dev/null +++ b/attention/mlir/attention_B2_H40_SQ4096_SKV2048_DH128_f8.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[2,40,4096,128],f16>, %298 : !torch.vtensor<[2,40,2048,128],f16>, %301 : !torch.vtensor<[2,40,2048,128],f16>) -> !torch.vtensor<[2,40,4096,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[2,40,4096,128],f16>, !torch.vtensor<[2,40,2048,128],f16>, !torch.vtensor<[2,40,2048,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[2,40,4096,128],f16>, !torch.vtensor<[2,40,4096], f32>) + return %282#0 : !torch.vtensor<[2,40,4096,128],f16> + } +} diff --git a/attention/mlir/attention_B2_H40_SQ4096_SKV2048_DH128_fp16.mlir b/attention/mlir/attention_B2_H40_SQ4096_SKV2048_DH128_fp16.mlir new file mode 100644 index 0000000..4159851 --- /dev/null +++ b/attention/mlir/attention_B2_H40_SQ4096_SKV2048_DH128_fp16.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[2,40,4096,128],f16>, %298 : !torch.vtensor<[2,40,2048,128],f16>, %301 : !torch.vtensor<[2,40,2048,128],f16>) -> !torch.vtensor<[2,40,4096,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[2,40,4096,128],f16>, !torch.vtensor<[2,40,2048,128],f16>, !torch.vtensor<[2,40,2048,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[2,40,4096,128],f16>, !torch.vtensor<[2,40,4096], f32>) + return %282#0 : !torch.vtensor<[2,40,4096,128],f16> + } +} diff --git a/attention/mlir/attention_B2_H40_SQ4096_SKV2048_DH128_fp8.mlir b/attention/mlir/attention_B2_H40_SQ4096_SKV2048_DH128_fp8.mlir new file mode 100644 index 0000000..4159851 --- /dev/null +++ b/attention/mlir/attention_B2_H40_SQ4096_SKV2048_DH128_fp8.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[2,40,4096,128],f16>, %298 : !torch.vtensor<[2,40,2048,128],f16>, %301 : !torch.vtensor<[2,40,2048,128],f16>) -> !torch.vtensor<[2,40,4096,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[2,40,4096,128],f16>, !torch.vtensor<[2,40,2048,128],f16>, !torch.vtensor<[2,40,2048,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[2,40,4096,128],f16>, !torch.vtensor<[2,40,4096], f32>) + return %282#0 : !torch.vtensor<[2,40,4096,128],f16> + } +} diff --git a/attention/mlir/attention_B2_H40_SQ4096_SKV4096_DH128_f16.mlir b/attention/mlir/attention_B2_H40_SQ4096_SKV4096_DH128_f16.mlir new file mode 100644 index 0000000..07273f8 --- /dev/null +++ b/attention/mlir/attention_B2_H40_SQ4096_SKV4096_DH128_f16.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[2,40,4096,128],f16>, %298 : !torch.vtensor<[2,40,4096,128],f16>, %301 : !torch.vtensor<[2,40,4096,128],f16>) -> !torch.vtensor<[2,40,4096,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[2,40,4096,128],f16>, !torch.vtensor<[2,40,4096,128],f16>, !torch.vtensor<[2,40,4096,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[2,40,4096,128],f16>, !torch.vtensor<[2,40,4096], f32>) + return %282#0 : !torch.vtensor<[2,40,4096,128],f16> + } +} diff --git a/attention/mlir/attention_B2_H40_SQ4096_SKV4096_DH128_f8.mlir b/attention/mlir/attention_B2_H40_SQ4096_SKV4096_DH128_f8.mlir new file mode 100644 index 0000000..07273f8 --- /dev/null +++ b/attention/mlir/attention_B2_H40_SQ4096_SKV4096_DH128_f8.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[2,40,4096,128],f16>, %298 : !torch.vtensor<[2,40,4096,128],f16>, %301 : !torch.vtensor<[2,40,4096,128],f16>) -> !torch.vtensor<[2,40,4096,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[2,40,4096,128],f16>, !torch.vtensor<[2,40,4096,128],f16>, !torch.vtensor<[2,40,4096,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[2,40,4096,128],f16>, !torch.vtensor<[2,40,4096], f32>) + return %282#0 : !torch.vtensor<[2,40,4096,128],f16> + } +} diff --git a/attention/mlir/attention_B2_H40_SQ4096_SKV4096_DH128_fp16.mlir b/attention/mlir/attention_B2_H40_SQ4096_SKV4096_DH128_fp16.mlir new file mode 100644 index 0000000..07273f8 --- /dev/null +++ b/attention/mlir/attention_B2_H40_SQ4096_SKV4096_DH128_fp16.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[2,40,4096,128],f16>, %298 : !torch.vtensor<[2,40,4096,128],f16>, %301 : !torch.vtensor<[2,40,4096,128],f16>) -> !torch.vtensor<[2,40,4096,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[2,40,4096,128],f16>, !torch.vtensor<[2,40,4096,128],f16>, !torch.vtensor<[2,40,4096,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[2,40,4096,128],f16>, !torch.vtensor<[2,40,4096], f32>) + return %282#0 : !torch.vtensor<[2,40,4096,128],f16> + } +} diff --git a/attention/mlir/attention_B2_H40_SQ4096_SKV4096_DH128_fp8.mlir b/attention/mlir/attention_B2_H40_SQ4096_SKV4096_DH128_fp8.mlir new file mode 100644 index 0000000..07273f8 --- /dev/null +++ b/attention/mlir/attention_B2_H40_SQ4096_SKV4096_DH128_fp8.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[2,40,4096,128],f16>, %298 : !torch.vtensor<[2,40,4096,128],f16>, %301 : !torch.vtensor<[2,40,4096,128],f16>) -> !torch.vtensor<[2,40,4096,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[2,40,4096,128],f16>, !torch.vtensor<[2,40,4096,128],f16>, !torch.vtensor<[2,40,4096,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[2,40,4096,128],f16>, !torch.vtensor<[2,40,4096], f32>) + return %282#0 : !torch.vtensor<[2,40,4096,128],f16> + } +} diff --git a/attention/mlir/attention_B2_H64_SQ1024_SKV1024_DH128_f16.mlir b/attention/mlir/attention_B2_H64_SQ1024_SKV1024_DH128_f16.mlir new file mode 100644 index 0000000..7386143 --- /dev/null +++ b/attention/mlir/attention_B2_H64_SQ1024_SKV1024_DH128_f16.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[2,64,1024,128],f16>, %298 : !torch.vtensor<[2,64,1024,128],f16>, %301 : !torch.vtensor<[2,64,1024,128],f16>) -> !torch.vtensor<[2,64,1024,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[2,64,1024,128],f16>, !torch.vtensor<[2,64,1024,128],f16>, !torch.vtensor<[2,64,1024,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[2,64,1024,128],f16>, !torch.vtensor<[2,64,1024], f32>) + return %282#0 : !torch.vtensor<[2,64,1024,128],f16> + } +} diff --git a/attention/mlir/attention_B2_H64_SQ1024_SKV1024_DH128_f8.mlir b/attention/mlir/attention_B2_H64_SQ1024_SKV1024_DH128_f8.mlir new file mode 100644 index 0000000..7386143 --- /dev/null +++ b/attention/mlir/attention_B2_H64_SQ1024_SKV1024_DH128_f8.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[2,64,1024,128],f16>, %298 : !torch.vtensor<[2,64,1024,128],f16>, %301 : !torch.vtensor<[2,64,1024,128],f16>) -> !torch.vtensor<[2,64,1024,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[2,64,1024,128],f16>, !torch.vtensor<[2,64,1024,128],f16>, !torch.vtensor<[2,64,1024,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[2,64,1024,128],f16>, !torch.vtensor<[2,64,1024], f32>) + return %282#0 : !torch.vtensor<[2,64,1024,128],f16> + } +} diff --git a/attention/mlir/attention_B2_H64_SQ1024_SKV1024_DH128_fp16.mlir b/attention/mlir/attention_B2_H64_SQ1024_SKV1024_DH128_fp16.mlir new file mode 100644 index 0000000..7386143 --- /dev/null +++ b/attention/mlir/attention_B2_H64_SQ1024_SKV1024_DH128_fp16.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[2,64,1024,128],f16>, %298 : !torch.vtensor<[2,64,1024,128],f16>, %301 : !torch.vtensor<[2,64,1024,128],f16>) -> !torch.vtensor<[2,64,1024,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[2,64,1024,128],f16>, !torch.vtensor<[2,64,1024,128],f16>, !torch.vtensor<[2,64,1024,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[2,64,1024,128],f16>, !torch.vtensor<[2,64,1024], f32>) + return %282#0 : !torch.vtensor<[2,64,1024,128],f16> + } +} diff --git a/attention/mlir/attention_B2_H64_SQ1024_SKV1024_DH128_fp8.mlir b/attention/mlir/attention_B2_H64_SQ1024_SKV1024_DH128_fp8.mlir new file mode 100644 index 0000000..7386143 --- /dev/null +++ b/attention/mlir/attention_B2_H64_SQ1024_SKV1024_DH128_fp8.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[2,64,1024,128],f16>, %298 : !torch.vtensor<[2,64,1024,128],f16>, %301 : !torch.vtensor<[2,64,1024,128],f16>) -> !torch.vtensor<[2,64,1024,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[2,64,1024,128],f16>, !torch.vtensor<[2,64,1024,128],f16>, !torch.vtensor<[2,64,1024,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[2,64,1024,128],f16>, !torch.vtensor<[2,64,1024], f32>) + return %282#0 : !torch.vtensor<[2,64,1024,128],f16> + } +} diff --git a/attention/mlir/attention_B2_H64_SQ1024_SKV2048_DH128_f16.mlir b/attention/mlir/attention_B2_H64_SQ1024_SKV2048_DH128_f16.mlir new file mode 100644 index 0000000..85be1ae --- /dev/null +++ b/attention/mlir/attention_B2_H64_SQ1024_SKV2048_DH128_f16.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[2,64,1024,128],f16>, %298 : !torch.vtensor<[2,64,2048,128],f16>, %301 : !torch.vtensor<[2,64,2048,128],f16>) -> !torch.vtensor<[2,64,1024,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[2,64,1024,128],f16>, !torch.vtensor<[2,64,2048,128],f16>, !torch.vtensor<[2,64,2048,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[2,64,1024,128],f16>, !torch.vtensor<[2,64,1024], f32>) + return %282#0 : !torch.vtensor<[2,64,1024,128],f16> + } +} diff --git a/attention/mlir/attention_B2_H64_SQ1024_SKV2048_DH128_f8.mlir b/attention/mlir/attention_B2_H64_SQ1024_SKV2048_DH128_f8.mlir new file mode 100644 index 0000000..85be1ae --- /dev/null +++ b/attention/mlir/attention_B2_H64_SQ1024_SKV2048_DH128_f8.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[2,64,1024,128],f16>, %298 : !torch.vtensor<[2,64,2048,128],f16>, %301 : !torch.vtensor<[2,64,2048,128],f16>) -> !torch.vtensor<[2,64,1024,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[2,64,1024,128],f16>, !torch.vtensor<[2,64,2048,128],f16>, !torch.vtensor<[2,64,2048,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[2,64,1024,128],f16>, !torch.vtensor<[2,64,1024], f32>) + return %282#0 : !torch.vtensor<[2,64,1024,128],f16> + } +} diff --git a/attention/mlir/attention_B2_H64_SQ1024_SKV2048_DH128_fp16.mlir b/attention/mlir/attention_B2_H64_SQ1024_SKV2048_DH128_fp16.mlir new file mode 100644 index 0000000..85be1ae --- /dev/null +++ b/attention/mlir/attention_B2_H64_SQ1024_SKV2048_DH128_fp16.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[2,64,1024,128],f16>, %298 : !torch.vtensor<[2,64,2048,128],f16>, %301 : !torch.vtensor<[2,64,2048,128],f16>) -> !torch.vtensor<[2,64,1024,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[2,64,1024,128],f16>, !torch.vtensor<[2,64,2048,128],f16>, !torch.vtensor<[2,64,2048,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[2,64,1024,128],f16>, !torch.vtensor<[2,64,1024], f32>) + return %282#0 : !torch.vtensor<[2,64,1024,128],f16> + } +} diff --git a/attention/mlir/attention_B2_H64_SQ1024_SKV2048_DH128_fp8.mlir b/attention/mlir/attention_B2_H64_SQ1024_SKV2048_DH128_fp8.mlir new file mode 100644 index 0000000..85be1ae --- /dev/null +++ b/attention/mlir/attention_B2_H64_SQ1024_SKV2048_DH128_fp8.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[2,64,1024,128],f16>, %298 : !torch.vtensor<[2,64,2048,128],f16>, %301 : !torch.vtensor<[2,64,2048,128],f16>) -> !torch.vtensor<[2,64,1024,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[2,64,1024,128],f16>, !torch.vtensor<[2,64,2048,128],f16>, !torch.vtensor<[2,64,2048,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[2,64,1024,128],f16>, !torch.vtensor<[2,64,1024], f32>) + return %282#0 : !torch.vtensor<[2,64,1024,128],f16> + } +} diff --git a/attention/mlir/attention_B2_H64_SQ1024_SKV4096_DH128_f16.mlir b/attention/mlir/attention_B2_H64_SQ1024_SKV4096_DH128_f16.mlir new file mode 100644 index 0000000..0ba180e --- /dev/null +++ b/attention/mlir/attention_B2_H64_SQ1024_SKV4096_DH128_f16.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[2,64,1024,128],f16>, %298 : !torch.vtensor<[2,64,4096,128],f16>, %301 : !torch.vtensor<[2,64,4096,128],f16>) -> !torch.vtensor<[2,64,1024,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[2,64,1024,128],f16>, !torch.vtensor<[2,64,4096,128],f16>, !torch.vtensor<[2,64,4096,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[2,64,1024,128],f16>, !torch.vtensor<[2,64,1024], f32>) + return %282#0 : !torch.vtensor<[2,64,1024,128],f16> + } +} diff --git a/attention/mlir/attention_B2_H64_SQ1024_SKV4096_DH128_f8.mlir b/attention/mlir/attention_B2_H64_SQ1024_SKV4096_DH128_f8.mlir new file mode 100644 index 0000000..0ba180e --- /dev/null +++ b/attention/mlir/attention_B2_H64_SQ1024_SKV4096_DH128_f8.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[2,64,1024,128],f16>, %298 : !torch.vtensor<[2,64,4096,128],f16>, %301 : !torch.vtensor<[2,64,4096,128],f16>) -> !torch.vtensor<[2,64,1024,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[2,64,1024,128],f16>, !torch.vtensor<[2,64,4096,128],f16>, !torch.vtensor<[2,64,4096,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[2,64,1024,128],f16>, !torch.vtensor<[2,64,1024], f32>) + return %282#0 : !torch.vtensor<[2,64,1024,128],f16> + } +} diff --git a/attention/mlir/attention_B2_H64_SQ1024_SKV4096_DH128_fp16.mlir b/attention/mlir/attention_B2_H64_SQ1024_SKV4096_DH128_fp16.mlir new file mode 100644 index 0000000..0ba180e --- /dev/null +++ b/attention/mlir/attention_B2_H64_SQ1024_SKV4096_DH128_fp16.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[2,64,1024,128],f16>, %298 : !torch.vtensor<[2,64,4096,128],f16>, %301 : !torch.vtensor<[2,64,4096,128],f16>) -> !torch.vtensor<[2,64,1024,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[2,64,1024,128],f16>, !torch.vtensor<[2,64,4096,128],f16>, !torch.vtensor<[2,64,4096,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[2,64,1024,128],f16>, !torch.vtensor<[2,64,1024], f32>) + return %282#0 : !torch.vtensor<[2,64,1024,128],f16> + } +} diff --git a/attention/mlir/attention_B2_H64_SQ1024_SKV4096_DH128_fp8.mlir b/attention/mlir/attention_B2_H64_SQ1024_SKV4096_DH128_fp8.mlir new file mode 100644 index 0000000..0ba180e --- /dev/null +++ b/attention/mlir/attention_B2_H64_SQ1024_SKV4096_DH128_fp8.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[2,64,1024,128],f16>, %298 : !torch.vtensor<[2,64,4096,128],f16>, %301 : !torch.vtensor<[2,64,4096,128],f16>) -> !torch.vtensor<[2,64,1024,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[2,64,1024,128],f16>, !torch.vtensor<[2,64,4096,128],f16>, !torch.vtensor<[2,64,4096,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[2,64,1024,128],f16>, !torch.vtensor<[2,64,1024], f32>) + return %282#0 : !torch.vtensor<[2,64,1024,128],f16> + } +} diff --git a/attention/mlir/attention_B2_H64_SQ2048_SKV1024_DH128_f16.mlir b/attention/mlir/attention_B2_H64_SQ2048_SKV1024_DH128_f16.mlir new file mode 100644 index 0000000..03981e6 --- /dev/null +++ b/attention/mlir/attention_B2_H64_SQ2048_SKV1024_DH128_f16.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[2,64,2048,128],f16>, %298 : !torch.vtensor<[2,64,1024,128],f16>, %301 : !torch.vtensor<[2,64,1024,128],f16>) -> !torch.vtensor<[2,64,2048,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[2,64,2048,128],f16>, !torch.vtensor<[2,64,1024,128],f16>, !torch.vtensor<[2,64,1024,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[2,64,2048,128],f16>, !torch.vtensor<[2,64,2048], f32>) + return %282#0 : !torch.vtensor<[2,64,2048,128],f16> + } +} diff --git a/attention/mlir/attention_B2_H64_SQ2048_SKV1024_DH128_f8.mlir b/attention/mlir/attention_B2_H64_SQ2048_SKV1024_DH128_f8.mlir new file mode 100644 index 0000000..03981e6 --- /dev/null +++ b/attention/mlir/attention_B2_H64_SQ2048_SKV1024_DH128_f8.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[2,64,2048,128],f16>, %298 : !torch.vtensor<[2,64,1024,128],f16>, %301 : !torch.vtensor<[2,64,1024,128],f16>) -> !torch.vtensor<[2,64,2048,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[2,64,2048,128],f16>, !torch.vtensor<[2,64,1024,128],f16>, !torch.vtensor<[2,64,1024,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[2,64,2048,128],f16>, !torch.vtensor<[2,64,2048], f32>) + return %282#0 : !torch.vtensor<[2,64,2048,128],f16> + } +} diff --git a/attention/mlir/attention_B2_H64_SQ2048_SKV1024_DH128_fp16.mlir b/attention/mlir/attention_B2_H64_SQ2048_SKV1024_DH128_fp16.mlir new file mode 100644 index 0000000..03981e6 --- /dev/null +++ b/attention/mlir/attention_B2_H64_SQ2048_SKV1024_DH128_fp16.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[2,64,2048,128],f16>, %298 : !torch.vtensor<[2,64,1024,128],f16>, %301 : !torch.vtensor<[2,64,1024,128],f16>) -> !torch.vtensor<[2,64,2048,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[2,64,2048,128],f16>, !torch.vtensor<[2,64,1024,128],f16>, !torch.vtensor<[2,64,1024,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[2,64,2048,128],f16>, !torch.vtensor<[2,64,2048], f32>) + return %282#0 : !torch.vtensor<[2,64,2048,128],f16> + } +} diff --git a/attention/mlir/attention_B2_H64_SQ2048_SKV1024_DH128_fp8.mlir b/attention/mlir/attention_B2_H64_SQ2048_SKV1024_DH128_fp8.mlir new file mode 100644 index 0000000..03981e6 --- /dev/null +++ b/attention/mlir/attention_B2_H64_SQ2048_SKV1024_DH128_fp8.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[2,64,2048,128],f16>, %298 : !torch.vtensor<[2,64,1024,128],f16>, %301 : !torch.vtensor<[2,64,1024,128],f16>) -> !torch.vtensor<[2,64,2048,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[2,64,2048,128],f16>, !torch.vtensor<[2,64,1024,128],f16>, !torch.vtensor<[2,64,1024,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[2,64,2048,128],f16>, !torch.vtensor<[2,64,2048], f32>) + return %282#0 : !torch.vtensor<[2,64,2048,128],f16> + } +} diff --git a/attention/mlir/attention_B2_H64_SQ2048_SKV2048_DH128_f16.mlir b/attention/mlir/attention_B2_H64_SQ2048_SKV2048_DH128_f16.mlir new file mode 100644 index 0000000..fd0ad8f --- /dev/null +++ b/attention/mlir/attention_B2_H64_SQ2048_SKV2048_DH128_f16.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[2,64,2048,128],f16>, %298 : !torch.vtensor<[2,64,2048,128],f16>, %301 : !torch.vtensor<[2,64,2048,128],f16>) -> !torch.vtensor<[2,64,2048,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[2,64,2048,128],f16>, !torch.vtensor<[2,64,2048,128],f16>, !torch.vtensor<[2,64,2048,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[2,64,2048,128],f16>, !torch.vtensor<[2,64,2048], f32>) + return %282#0 : !torch.vtensor<[2,64,2048,128],f16> + } +} diff --git a/attention/mlir/attention_B2_H64_SQ2048_SKV2048_DH128_f8.mlir b/attention/mlir/attention_B2_H64_SQ2048_SKV2048_DH128_f8.mlir new file mode 100644 index 0000000..fd0ad8f --- /dev/null +++ b/attention/mlir/attention_B2_H64_SQ2048_SKV2048_DH128_f8.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[2,64,2048,128],f16>, %298 : !torch.vtensor<[2,64,2048,128],f16>, %301 : !torch.vtensor<[2,64,2048,128],f16>) -> !torch.vtensor<[2,64,2048,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[2,64,2048,128],f16>, !torch.vtensor<[2,64,2048,128],f16>, !torch.vtensor<[2,64,2048,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[2,64,2048,128],f16>, !torch.vtensor<[2,64,2048], f32>) + return %282#0 : !torch.vtensor<[2,64,2048,128],f16> + } +} diff --git a/attention/mlir/attention_B2_H64_SQ2048_SKV2048_DH128_fp16.mlir b/attention/mlir/attention_B2_H64_SQ2048_SKV2048_DH128_fp16.mlir new file mode 100644 index 0000000..fd0ad8f --- /dev/null +++ b/attention/mlir/attention_B2_H64_SQ2048_SKV2048_DH128_fp16.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[2,64,2048,128],f16>, %298 : !torch.vtensor<[2,64,2048,128],f16>, %301 : !torch.vtensor<[2,64,2048,128],f16>) -> !torch.vtensor<[2,64,2048,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[2,64,2048,128],f16>, !torch.vtensor<[2,64,2048,128],f16>, !torch.vtensor<[2,64,2048,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[2,64,2048,128],f16>, !torch.vtensor<[2,64,2048], f32>) + return %282#0 : !torch.vtensor<[2,64,2048,128],f16> + } +} diff --git a/attention/mlir/attention_B2_H64_SQ2048_SKV2048_DH128_fp8.mlir b/attention/mlir/attention_B2_H64_SQ2048_SKV2048_DH128_fp8.mlir new file mode 100644 index 0000000..fd0ad8f --- /dev/null +++ b/attention/mlir/attention_B2_H64_SQ2048_SKV2048_DH128_fp8.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[2,64,2048,128],f16>, %298 : !torch.vtensor<[2,64,2048,128],f16>, %301 : !torch.vtensor<[2,64,2048,128],f16>) -> !torch.vtensor<[2,64,2048,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[2,64,2048,128],f16>, !torch.vtensor<[2,64,2048,128],f16>, !torch.vtensor<[2,64,2048,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[2,64,2048,128],f16>, !torch.vtensor<[2,64,2048], f32>) + return %282#0 : !torch.vtensor<[2,64,2048,128],f16> + } +} diff --git a/attention/mlir/attention_B2_H64_SQ2048_SKV4096_DH128_f16.mlir b/attention/mlir/attention_B2_H64_SQ2048_SKV4096_DH128_f16.mlir new file mode 100644 index 0000000..2f3efa1 --- /dev/null +++ b/attention/mlir/attention_B2_H64_SQ2048_SKV4096_DH128_f16.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[2,64,2048,128],f16>, %298 : !torch.vtensor<[2,64,4096,128],f16>, %301 : !torch.vtensor<[2,64,4096,128],f16>) -> !torch.vtensor<[2,64,2048,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[2,64,2048,128],f16>, !torch.vtensor<[2,64,4096,128],f16>, !torch.vtensor<[2,64,4096,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[2,64,2048,128],f16>, !torch.vtensor<[2,64,2048], f32>) + return %282#0 : !torch.vtensor<[2,64,2048,128],f16> + } +} diff --git a/attention/mlir/attention_B2_H64_SQ2048_SKV4096_DH128_f8.mlir b/attention/mlir/attention_B2_H64_SQ2048_SKV4096_DH128_f8.mlir new file mode 100644 index 0000000..2f3efa1 --- /dev/null +++ b/attention/mlir/attention_B2_H64_SQ2048_SKV4096_DH128_f8.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[2,64,2048,128],f16>, %298 : !torch.vtensor<[2,64,4096,128],f16>, %301 : !torch.vtensor<[2,64,4096,128],f16>) -> !torch.vtensor<[2,64,2048,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[2,64,2048,128],f16>, !torch.vtensor<[2,64,4096,128],f16>, !torch.vtensor<[2,64,4096,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[2,64,2048,128],f16>, !torch.vtensor<[2,64,2048], f32>) + return %282#0 : !torch.vtensor<[2,64,2048,128],f16> + } +} diff --git a/attention/mlir/attention_B2_H64_SQ2048_SKV4096_DH128_fp16.mlir b/attention/mlir/attention_B2_H64_SQ2048_SKV4096_DH128_fp16.mlir new file mode 100644 index 0000000..2f3efa1 --- /dev/null +++ b/attention/mlir/attention_B2_H64_SQ2048_SKV4096_DH128_fp16.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[2,64,2048,128],f16>, %298 : !torch.vtensor<[2,64,4096,128],f16>, %301 : !torch.vtensor<[2,64,4096,128],f16>) -> !torch.vtensor<[2,64,2048,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[2,64,2048,128],f16>, !torch.vtensor<[2,64,4096,128],f16>, !torch.vtensor<[2,64,4096,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[2,64,2048,128],f16>, !torch.vtensor<[2,64,2048], f32>) + return %282#0 : !torch.vtensor<[2,64,2048,128],f16> + } +} diff --git a/attention/mlir/attention_B2_H64_SQ2048_SKV4096_DH128_fp8.mlir b/attention/mlir/attention_B2_H64_SQ2048_SKV4096_DH128_fp8.mlir new file mode 100644 index 0000000..2f3efa1 --- /dev/null +++ b/attention/mlir/attention_B2_H64_SQ2048_SKV4096_DH128_fp8.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[2,64,2048,128],f16>, %298 : !torch.vtensor<[2,64,4096,128],f16>, %301 : !torch.vtensor<[2,64,4096,128],f16>) -> !torch.vtensor<[2,64,2048,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[2,64,2048,128],f16>, !torch.vtensor<[2,64,4096,128],f16>, !torch.vtensor<[2,64,4096,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[2,64,2048,128],f16>, !torch.vtensor<[2,64,2048], f32>) + return %282#0 : !torch.vtensor<[2,64,2048,128],f16> + } +} diff --git a/attention/mlir/attention_B2_H64_SQ4096_SKV1024_DH128_f16.mlir b/attention/mlir/attention_B2_H64_SQ4096_SKV1024_DH128_f16.mlir new file mode 100644 index 0000000..3e56679 --- /dev/null +++ b/attention/mlir/attention_B2_H64_SQ4096_SKV1024_DH128_f16.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[2,64,4096,128],f16>, %298 : !torch.vtensor<[2,64,1024,128],f16>, %301 : !torch.vtensor<[2,64,1024,128],f16>) -> !torch.vtensor<[2,64,4096,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[2,64,4096,128],f16>, !torch.vtensor<[2,64,1024,128],f16>, !torch.vtensor<[2,64,1024,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[2,64,4096,128],f16>, !torch.vtensor<[2,64,4096], f32>) + return %282#0 : !torch.vtensor<[2,64,4096,128],f16> + } +} diff --git a/attention/mlir/attention_B2_H64_SQ4096_SKV1024_DH128_f8.mlir b/attention/mlir/attention_B2_H64_SQ4096_SKV1024_DH128_f8.mlir new file mode 100644 index 0000000..3e56679 --- /dev/null +++ b/attention/mlir/attention_B2_H64_SQ4096_SKV1024_DH128_f8.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[2,64,4096,128],f16>, %298 : !torch.vtensor<[2,64,1024,128],f16>, %301 : !torch.vtensor<[2,64,1024,128],f16>) -> !torch.vtensor<[2,64,4096,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[2,64,4096,128],f16>, !torch.vtensor<[2,64,1024,128],f16>, !torch.vtensor<[2,64,1024,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[2,64,4096,128],f16>, !torch.vtensor<[2,64,4096], f32>) + return %282#0 : !torch.vtensor<[2,64,4096,128],f16> + } +} diff --git a/attention/mlir/attention_B2_H64_SQ4096_SKV1024_DH128_fp16.mlir b/attention/mlir/attention_B2_H64_SQ4096_SKV1024_DH128_fp16.mlir new file mode 100644 index 0000000..3e56679 --- /dev/null +++ b/attention/mlir/attention_B2_H64_SQ4096_SKV1024_DH128_fp16.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[2,64,4096,128],f16>, %298 : !torch.vtensor<[2,64,1024,128],f16>, %301 : !torch.vtensor<[2,64,1024,128],f16>) -> !torch.vtensor<[2,64,4096,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[2,64,4096,128],f16>, !torch.vtensor<[2,64,1024,128],f16>, !torch.vtensor<[2,64,1024,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[2,64,4096,128],f16>, !torch.vtensor<[2,64,4096], f32>) + return %282#0 : !torch.vtensor<[2,64,4096,128],f16> + } +} diff --git a/attention/mlir/attention_B2_H64_SQ4096_SKV1024_DH128_fp8.mlir b/attention/mlir/attention_B2_H64_SQ4096_SKV1024_DH128_fp8.mlir new file mode 100644 index 0000000..3e56679 --- /dev/null +++ b/attention/mlir/attention_B2_H64_SQ4096_SKV1024_DH128_fp8.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[2,64,4096,128],f16>, %298 : !torch.vtensor<[2,64,1024,128],f16>, %301 : !torch.vtensor<[2,64,1024,128],f16>) -> !torch.vtensor<[2,64,4096,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[2,64,4096,128],f16>, !torch.vtensor<[2,64,1024,128],f16>, !torch.vtensor<[2,64,1024,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[2,64,4096,128],f16>, !torch.vtensor<[2,64,4096], f32>) + return %282#0 : !torch.vtensor<[2,64,4096,128],f16> + } +} diff --git a/attention/mlir/attention_B2_H64_SQ4096_SKV2048_DH128_f16.mlir b/attention/mlir/attention_B2_H64_SQ4096_SKV2048_DH128_f16.mlir new file mode 100644 index 0000000..61acf25 --- /dev/null +++ b/attention/mlir/attention_B2_H64_SQ4096_SKV2048_DH128_f16.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[2,64,4096,128],f16>, %298 : !torch.vtensor<[2,64,2048,128],f16>, %301 : !torch.vtensor<[2,64,2048,128],f16>) -> !torch.vtensor<[2,64,4096,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[2,64,4096,128],f16>, !torch.vtensor<[2,64,2048,128],f16>, !torch.vtensor<[2,64,2048,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[2,64,4096,128],f16>, !torch.vtensor<[2,64,4096], f32>) + return %282#0 : !torch.vtensor<[2,64,4096,128],f16> + } +} diff --git a/attention/mlir/attention_B2_H64_SQ4096_SKV2048_DH128_f8.mlir b/attention/mlir/attention_B2_H64_SQ4096_SKV2048_DH128_f8.mlir new file mode 100644 index 0000000..61acf25 --- /dev/null +++ b/attention/mlir/attention_B2_H64_SQ4096_SKV2048_DH128_f8.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[2,64,4096,128],f16>, %298 : !torch.vtensor<[2,64,2048,128],f16>, %301 : !torch.vtensor<[2,64,2048,128],f16>) -> !torch.vtensor<[2,64,4096,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[2,64,4096,128],f16>, !torch.vtensor<[2,64,2048,128],f16>, !torch.vtensor<[2,64,2048,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[2,64,4096,128],f16>, !torch.vtensor<[2,64,4096], f32>) + return %282#0 : !torch.vtensor<[2,64,4096,128],f16> + } +} diff --git a/attention/mlir/attention_B2_H64_SQ4096_SKV2048_DH128_fp16.mlir b/attention/mlir/attention_B2_H64_SQ4096_SKV2048_DH128_fp16.mlir new file mode 100644 index 0000000..61acf25 --- /dev/null +++ b/attention/mlir/attention_B2_H64_SQ4096_SKV2048_DH128_fp16.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[2,64,4096,128],f16>, %298 : !torch.vtensor<[2,64,2048,128],f16>, %301 : !torch.vtensor<[2,64,2048,128],f16>) -> !torch.vtensor<[2,64,4096,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[2,64,4096,128],f16>, !torch.vtensor<[2,64,2048,128],f16>, !torch.vtensor<[2,64,2048,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[2,64,4096,128],f16>, !torch.vtensor<[2,64,4096], f32>) + return %282#0 : !torch.vtensor<[2,64,4096,128],f16> + } +} diff --git a/attention/mlir/attention_B2_H64_SQ4096_SKV2048_DH128_fp8.mlir b/attention/mlir/attention_B2_H64_SQ4096_SKV2048_DH128_fp8.mlir new file mode 100644 index 0000000..61acf25 --- /dev/null +++ b/attention/mlir/attention_B2_H64_SQ4096_SKV2048_DH128_fp8.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[2,64,4096,128],f16>, %298 : !torch.vtensor<[2,64,2048,128],f16>, %301 : !torch.vtensor<[2,64,2048,128],f16>) -> !torch.vtensor<[2,64,4096,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[2,64,4096,128],f16>, !torch.vtensor<[2,64,2048,128],f16>, !torch.vtensor<[2,64,2048,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[2,64,4096,128],f16>, !torch.vtensor<[2,64,4096], f32>) + return %282#0 : !torch.vtensor<[2,64,4096,128],f16> + } +} diff --git a/attention/mlir/attention_B2_H64_SQ4096_SKV4096_DH128_f16.mlir b/attention/mlir/attention_B2_H64_SQ4096_SKV4096_DH128_f16.mlir new file mode 100644 index 0000000..e88c031 --- /dev/null +++ b/attention/mlir/attention_B2_H64_SQ4096_SKV4096_DH128_f16.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[2,64,4096,128],f16>, %298 : !torch.vtensor<[2,64,4096,128],f16>, %301 : !torch.vtensor<[2,64,4096,128],f16>) -> !torch.vtensor<[2,64,4096,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[2,64,4096,128],f16>, !torch.vtensor<[2,64,4096,128],f16>, !torch.vtensor<[2,64,4096,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[2,64,4096,128],f16>, !torch.vtensor<[2,64,4096], f32>) + return %282#0 : !torch.vtensor<[2,64,4096,128],f16> + } +} diff --git a/attention/mlir/attention_B2_H64_SQ4096_SKV4096_DH128_f8.mlir b/attention/mlir/attention_B2_H64_SQ4096_SKV4096_DH128_f8.mlir new file mode 100644 index 0000000..e88c031 --- /dev/null +++ b/attention/mlir/attention_B2_H64_SQ4096_SKV4096_DH128_f8.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[2,64,4096,128],f16>, %298 : !torch.vtensor<[2,64,4096,128],f16>, %301 : !torch.vtensor<[2,64,4096,128],f16>) -> !torch.vtensor<[2,64,4096,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[2,64,4096,128],f16>, !torch.vtensor<[2,64,4096,128],f16>, !torch.vtensor<[2,64,4096,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[2,64,4096,128],f16>, !torch.vtensor<[2,64,4096], f32>) + return %282#0 : !torch.vtensor<[2,64,4096,128],f16> + } +} diff --git a/attention/mlir/attention_B2_H64_SQ4096_SKV4096_DH128_fp16.mlir b/attention/mlir/attention_B2_H64_SQ4096_SKV4096_DH128_fp16.mlir new file mode 100644 index 0000000..e88c031 --- /dev/null +++ b/attention/mlir/attention_B2_H64_SQ4096_SKV4096_DH128_fp16.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[2,64,4096,128],f16>, %298 : !torch.vtensor<[2,64,4096,128],f16>, %301 : !torch.vtensor<[2,64,4096,128],f16>) -> !torch.vtensor<[2,64,4096,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[2,64,4096,128],f16>, !torch.vtensor<[2,64,4096,128],f16>, !torch.vtensor<[2,64,4096,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[2,64,4096,128],f16>, !torch.vtensor<[2,64,4096], f32>) + return %282#0 : !torch.vtensor<[2,64,4096,128],f16> + } +} diff --git a/attention/mlir/attention_B2_H64_SQ4096_SKV4096_DH128_fp8.mlir b/attention/mlir/attention_B2_H64_SQ4096_SKV4096_DH128_fp8.mlir new file mode 100644 index 0000000..e88c031 --- /dev/null +++ b/attention/mlir/attention_B2_H64_SQ4096_SKV4096_DH128_fp8.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[2,64,4096,128],f16>, %298 : !torch.vtensor<[2,64,4096,128],f16>, %301 : !torch.vtensor<[2,64,4096,128],f16>) -> !torch.vtensor<[2,64,4096,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[2,64,4096,128],f16>, !torch.vtensor<[2,64,4096,128],f16>, !torch.vtensor<[2,64,4096,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[2,64,4096,128],f16>, !torch.vtensor<[2,64,4096], f32>) + return %282#0 : !torch.vtensor<[2,64,4096,128],f16> + } +} diff --git a/attention/mlir/attention_B4_H32_SQ1024_SKV1024_DH128_f16.mlir b/attention/mlir/attention_B4_H32_SQ1024_SKV1024_DH128_f16.mlir new file mode 100644 index 0000000..59bfdf8 --- /dev/null +++ b/attention/mlir/attention_B4_H32_SQ1024_SKV1024_DH128_f16.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[4,32,1024,128],f16>, %298 : !torch.vtensor<[4,32,1024,128],f16>, %301 : !torch.vtensor<[4,32,1024,128],f16>) -> !torch.vtensor<[4,32,1024,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[4,32,1024,128],f16>, !torch.vtensor<[4,32,1024,128],f16>, !torch.vtensor<[4,32,1024,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[4,32,1024,128],f16>, !torch.vtensor<[4,32,1024], f32>) + return %282#0 : !torch.vtensor<[4,32,1024,128],f16> + } +} diff --git a/attention/mlir/attention_B4_H32_SQ1024_SKV1024_DH128_f8.mlir b/attention/mlir/attention_B4_H32_SQ1024_SKV1024_DH128_f8.mlir new file mode 100644 index 0000000..59bfdf8 --- /dev/null +++ b/attention/mlir/attention_B4_H32_SQ1024_SKV1024_DH128_f8.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[4,32,1024,128],f16>, %298 : !torch.vtensor<[4,32,1024,128],f16>, %301 : !torch.vtensor<[4,32,1024,128],f16>) -> !torch.vtensor<[4,32,1024,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[4,32,1024,128],f16>, !torch.vtensor<[4,32,1024,128],f16>, !torch.vtensor<[4,32,1024,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[4,32,1024,128],f16>, !torch.vtensor<[4,32,1024], f32>) + return %282#0 : !torch.vtensor<[4,32,1024,128],f16> + } +} diff --git a/attention/mlir/attention_B4_H32_SQ1024_SKV1024_DH128_fp16.mlir b/attention/mlir/attention_B4_H32_SQ1024_SKV1024_DH128_fp16.mlir new file mode 100644 index 0000000..59bfdf8 --- /dev/null +++ b/attention/mlir/attention_B4_H32_SQ1024_SKV1024_DH128_fp16.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[4,32,1024,128],f16>, %298 : !torch.vtensor<[4,32,1024,128],f16>, %301 : !torch.vtensor<[4,32,1024,128],f16>) -> !torch.vtensor<[4,32,1024,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[4,32,1024,128],f16>, !torch.vtensor<[4,32,1024,128],f16>, !torch.vtensor<[4,32,1024,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[4,32,1024,128],f16>, !torch.vtensor<[4,32,1024], f32>) + return %282#0 : !torch.vtensor<[4,32,1024,128],f16> + } +} diff --git a/attention/mlir/attention_B4_H32_SQ1024_SKV1024_DH128_fp8.mlir b/attention/mlir/attention_B4_H32_SQ1024_SKV1024_DH128_fp8.mlir new file mode 100644 index 0000000..59bfdf8 --- /dev/null +++ b/attention/mlir/attention_B4_H32_SQ1024_SKV1024_DH128_fp8.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[4,32,1024,128],f16>, %298 : !torch.vtensor<[4,32,1024,128],f16>, %301 : !torch.vtensor<[4,32,1024,128],f16>) -> !torch.vtensor<[4,32,1024,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[4,32,1024,128],f16>, !torch.vtensor<[4,32,1024,128],f16>, !torch.vtensor<[4,32,1024,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[4,32,1024,128],f16>, !torch.vtensor<[4,32,1024], f32>) + return %282#0 : !torch.vtensor<[4,32,1024,128],f16> + } +} diff --git a/attention/mlir/attention_B4_H32_SQ1024_SKV2048_DH128_f16.mlir b/attention/mlir/attention_B4_H32_SQ1024_SKV2048_DH128_f16.mlir new file mode 100644 index 0000000..bd72204 --- /dev/null +++ b/attention/mlir/attention_B4_H32_SQ1024_SKV2048_DH128_f16.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[4,32,1024,128],f16>, %298 : !torch.vtensor<[4,32,2048,128],f16>, %301 : !torch.vtensor<[4,32,2048,128],f16>) -> !torch.vtensor<[4,32,1024,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[4,32,1024,128],f16>, !torch.vtensor<[4,32,2048,128],f16>, !torch.vtensor<[4,32,2048,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[4,32,1024,128],f16>, !torch.vtensor<[4,32,1024], f32>) + return %282#0 : !torch.vtensor<[4,32,1024,128],f16> + } +} diff --git a/attention/mlir/attention_B4_H32_SQ1024_SKV2048_DH128_f8.mlir b/attention/mlir/attention_B4_H32_SQ1024_SKV2048_DH128_f8.mlir new file mode 100644 index 0000000..bd72204 --- /dev/null +++ b/attention/mlir/attention_B4_H32_SQ1024_SKV2048_DH128_f8.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[4,32,1024,128],f16>, %298 : !torch.vtensor<[4,32,2048,128],f16>, %301 : !torch.vtensor<[4,32,2048,128],f16>) -> !torch.vtensor<[4,32,1024,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[4,32,1024,128],f16>, !torch.vtensor<[4,32,2048,128],f16>, !torch.vtensor<[4,32,2048,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[4,32,1024,128],f16>, !torch.vtensor<[4,32,1024], f32>) + return %282#0 : !torch.vtensor<[4,32,1024,128],f16> + } +} diff --git a/attention/mlir/attention_B4_H32_SQ1024_SKV2048_DH128_fp16.mlir b/attention/mlir/attention_B4_H32_SQ1024_SKV2048_DH128_fp16.mlir new file mode 100644 index 0000000..bd72204 --- /dev/null +++ b/attention/mlir/attention_B4_H32_SQ1024_SKV2048_DH128_fp16.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[4,32,1024,128],f16>, %298 : !torch.vtensor<[4,32,2048,128],f16>, %301 : !torch.vtensor<[4,32,2048,128],f16>) -> !torch.vtensor<[4,32,1024,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[4,32,1024,128],f16>, !torch.vtensor<[4,32,2048,128],f16>, !torch.vtensor<[4,32,2048,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[4,32,1024,128],f16>, !torch.vtensor<[4,32,1024], f32>) + return %282#0 : !torch.vtensor<[4,32,1024,128],f16> + } +} diff --git a/attention/mlir/attention_B4_H32_SQ1024_SKV2048_DH128_fp8.mlir b/attention/mlir/attention_B4_H32_SQ1024_SKV2048_DH128_fp8.mlir new file mode 100644 index 0000000..bd72204 --- /dev/null +++ b/attention/mlir/attention_B4_H32_SQ1024_SKV2048_DH128_fp8.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[4,32,1024,128],f16>, %298 : !torch.vtensor<[4,32,2048,128],f16>, %301 : !torch.vtensor<[4,32,2048,128],f16>) -> !torch.vtensor<[4,32,1024,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[4,32,1024,128],f16>, !torch.vtensor<[4,32,2048,128],f16>, !torch.vtensor<[4,32,2048,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[4,32,1024,128],f16>, !torch.vtensor<[4,32,1024], f32>) + return %282#0 : !torch.vtensor<[4,32,1024,128],f16> + } +} diff --git a/attention/mlir/attention_B4_H32_SQ1024_SKV4096_DH128_f16.mlir b/attention/mlir/attention_B4_H32_SQ1024_SKV4096_DH128_f16.mlir new file mode 100644 index 0000000..74bd33e --- /dev/null +++ b/attention/mlir/attention_B4_H32_SQ1024_SKV4096_DH128_f16.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[4,32,1024,128],f16>, %298 : !torch.vtensor<[4,32,4096,128],f16>, %301 : !torch.vtensor<[4,32,4096,128],f16>) -> !torch.vtensor<[4,32,1024,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[4,32,1024,128],f16>, !torch.vtensor<[4,32,4096,128],f16>, !torch.vtensor<[4,32,4096,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[4,32,1024,128],f16>, !torch.vtensor<[4,32,1024], f32>) + return %282#0 : !torch.vtensor<[4,32,1024,128],f16> + } +} diff --git a/attention/mlir/attention_B4_H32_SQ1024_SKV4096_DH128_f8.mlir b/attention/mlir/attention_B4_H32_SQ1024_SKV4096_DH128_f8.mlir new file mode 100644 index 0000000..74bd33e --- /dev/null +++ b/attention/mlir/attention_B4_H32_SQ1024_SKV4096_DH128_f8.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[4,32,1024,128],f16>, %298 : !torch.vtensor<[4,32,4096,128],f16>, %301 : !torch.vtensor<[4,32,4096,128],f16>) -> !torch.vtensor<[4,32,1024,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[4,32,1024,128],f16>, !torch.vtensor<[4,32,4096,128],f16>, !torch.vtensor<[4,32,4096,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[4,32,1024,128],f16>, !torch.vtensor<[4,32,1024], f32>) + return %282#0 : !torch.vtensor<[4,32,1024,128],f16> + } +} diff --git a/attention/mlir/attention_B4_H32_SQ1024_SKV4096_DH128_fp16.mlir b/attention/mlir/attention_B4_H32_SQ1024_SKV4096_DH128_fp16.mlir new file mode 100644 index 0000000..74bd33e --- /dev/null +++ b/attention/mlir/attention_B4_H32_SQ1024_SKV4096_DH128_fp16.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[4,32,1024,128],f16>, %298 : !torch.vtensor<[4,32,4096,128],f16>, %301 : !torch.vtensor<[4,32,4096,128],f16>) -> !torch.vtensor<[4,32,1024,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[4,32,1024,128],f16>, !torch.vtensor<[4,32,4096,128],f16>, !torch.vtensor<[4,32,4096,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[4,32,1024,128],f16>, !torch.vtensor<[4,32,1024], f32>) + return %282#0 : !torch.vtensor<[4,32,1024,128],f16> + } +} diff --git a/attention/mlir/attention_B4_H32_SQ1024_SKV4096_DH128_fp8.mlir b/attention/mlir/attention_B4_H32_SQ1024_SKV4096_DH128_fp8.mlir new file mode 100644 index 0000000..74bd33e --- /dev/null +++ b/attention/mlir/attention_B4_H32_SQ1024_SKV4096_DH128_fp8.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[4,32,1024,128],f16>, %298 : !torch.vtensor<[4,32,4096,128],f16>, %301 : !torch.vtensor<[4,32,4096,128],f16>) -> !torch.vtensor<[4,32,1024,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[4,32,1024,128],f16>, !torch.vtensor<[4,32,4096,128],f16>, !torch.vtensor<[4,32,4096,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[4,32,1024,128],f16>, !torch.vtensor<[4,32,1024], f32>) + return %282#0 : !torch.vtensor<[4,32,1024,128],f16> + } +} diff --git a/attention/mlir/attention_B4_H32_SQ2048_SKV1024_DH128_f16.mlir b/attention/mlir/attention_B4_H32_SQ2048_SKV1024_DH128_f16.mlir new file mode 100644 index 0000000..6f99074 --- /dev/null +++ b/attention/mlir/attention_B4_H32_SQ2048_SKV1024_DH128_f16.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[4,32,2048,128],f16>, %298 : !torch.vtensor<[4,32,1024,128],f16>, %301 : !torch.vtensor<[4,32,1024,128],f16>) -> !torch.vtensor<[4,32,2048,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[4,32,2048,128],f16>, !torch.vtensor<[4,32,1024,128],f16>, !torch.vtensor<[4,32,1024,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[4,32,2048,128],f16>, !torch.vtensor<[4,32,2048], f32>) + return %282#0 : !torch.vtensor<[4,32,2048,128],f16> + } +} diff --git a/attention/mlir/attention_B4_H32_SQ2048_SKV1024_DH128_f8.mlir b/attention/mlir/attention_B4_H32_SQ2048_SKV1024_DH128_f8.mlir new file mode 100644 index 0000000..6f99074 --- /dev/null +++ b/attention/mlir/attention_B4_H32_SQ2048_SKV1024_DH128_f8.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[4,32,2048,128],f16>, %298 : !torch.vtensor<[4,32,1024,128],f16>, %301 : !torch.vtensor<[4,32,1024,128],f16>) -> !torch.vtensor<[4,32,2048,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[4,32,2048,128],f16>, !torch.vtensor<[4,32,1024,128],f16>, !torch.vtensor<[4,32,1024,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[4,32,2048,128],f16>, !torch.vtensor<[4,32,2048], f32>) + return %282#0 : !torch.vtensor<[4,32,2048,128],f16> + } +} diff --git a/attention/mlir/attention_B4_H32_SQ2048_SKV1024_DH128_fp16.mlir b/attention/mlir/attention_B4_H32_SQ2048_SKV1024_DH128_fp16.mlir new file mode 100644 index 0000000..6f99074 --- /dev/null +++ b/attention/mlir/attention_B4_H32_SQ2048_SKV1024_DH128_fp16.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[4,32,2048,128],f16>, %298 : !torch.vtensor<[4,32,1024,128],f16>, %301 : !torch.vtensor<[4,32,1024,128],f16>) -> !torch.vtensor<[4,32,2048,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[4,32,2048,128],f16>, !torch.vtensor<[4,32,1024,128],f16>, !torch.vtensor<[4,32,1024,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[4,32,2048,128],f16>, !torch.vtensor<[4,32,2048], f32>) + return %282#0 : !torch.vtensor<[4,32,2048,128],f16> + } +} diff --git a/attention/mlir/attention_B4_H32_SQ2048_SKV1024_DH128_fp8.mlir b/attention/mlir/attention_B4_H32_SQ2048_SKV1024_DH128_fp8.mlir new file mode 100644 index 0000000..6f99074 --- /dev/null +++ b/attention/mlir/attention_B4_H32_SQ2048_SKV1024_DH128_fp8.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[4,32,2048,128],f16>, %298 : !torch.vtensor<[4,32,1024,128],f16>, %301 : !torch.vtensor<[4,32,1024,128],f16>) -> !torch.vtensor<[4,32,2048,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[4,32,2048,128],f16>, !torch.vtensor<[4,32,1024,128],f16>, !torch.vtensor<[4,32,1024,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[4,32,2048,128],f16>, !torch.vtensor<[4,32,2048], f32>) + return %282#0 : !torch.vtensor<[4,32,2048,128],f16> + } +} diff --git a/attention/mlir/attention_B4_H32_SQ2048_SKV2048_DH128_f16.mlir b/attention/mlir/attention_B4_H32_SQ2048_SKV2048_DH128_f16.mlir new file mode 100644 index 0000000..e769176 --- /dev/null +++ b/attention/mlir/attention_B4_H32_SQ2048_SKV2048_DH128_f16.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[4,32,2048,128],f16>, %298 : !torch.vtensor<[4,32,2048,128],f16>, %301 : !torch.vtensor<[4,32,2048,128],f16>) -> !torch.vtensor<[4,32,2048,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[4,32,2048,128],f16>, !torch.vtensor<[4,32,2048,128],f16>, !torch.vtensor<[4,32,2048,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[4,32,2048,128],f16>, !torch.vtensor<[4,32,2048], f32>) + return %282#0 : !torch.vtensor<[4,32,2048,128],f16> + } +} diff --git a/attention/mlir/attention_B4_H32_SQ2048_SKV2048_DH128_f8.mlir b/attention/mlir/attention_B4_H32_SQ2048_SKV2048_DH128_f8.mlir new file mode 100644 index 0000000..e769176 --- /dev/null +++ b/attention/mlir/attention_B4_H32_SQ2048_SKV2048_DH128_f8.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[4,32,2048,128],f16>, %298 : !torch.vtensor<[4,32,2048,128],f16>, %301 : !torch.vtensor<[4,32,2048,128],f16>) -> !torch.vtensor<[4,32,2048,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[4,32,2048,128],f16>, !torch.vtensor<[4,32,2048,128],f16>, !torch.vtensor<[4,32,2048,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[4,32,2048,128],f16>, !torch.vtensor<[4,32,2048], f32>) + return %282#0 : !torch.vtensor<[4,32,2048,128],f16> + } +} diff --git a/attention/mlir/attention_B4_H32_SQ2048_SKV2048_DH128_fp16.mlir b/attention/mlir/attention_B4_H32_SQ2048_SKV2048_DH128_fp16.mlir new file mode 100644 index 0000000..e769176 --- /dev/null +++ b/attention/mlir/attention_B4_H32_SQ2048_SKV2048_DH128_fp16.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[4,32,2048,128],f16>, %298 : !torch.vtensor<[4,32,2048,128],f16>, %301 : !torch.vtensor<[4,32,2048,128],f16>) -> !torch.vtensor<[4,32,2048,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[4,32,2048,128],f16>, !torch.vtensor<[4,32,2048,128],f16>, !torch.vtensor<[4,32,2048,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[4,32,2048,128],f16>, !torch.vtensor<[4,32,2048], f32>) + return %282#0 : !torch.vtensor<[4,32,2048,128],f16> + } +} diff --git a/attention/mlir/attention_B4_H32_SQ2048_SKV2048_DH128_fp8.mlir b/attention/mlir/attention_B4_H32_SQ2048_SKV2048_DH128_fp8.mlir new file mode 100644 index 0000000..e769176 --- /dev/null +++ b/attention/mlir/attention_B4_H32_SQ2048_SKV2048_DH128_fp8.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[4,32,2048,128],f16>, %298 : !torch.vtensor<[4,32,2048,128],f16>, %301 : !torch.vtensor<[4,32,2048,128],f16>) -> !torch.vtensor<[4,32,2048,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[4,32,2048,128],f16>, !torch.vtensor<[4,32,2048,128],f16>, !torch.vtensor<[4,32,2048,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[4,32,2048,128],f16>, !torch.vtensor<[4,32,2048], f32>) + return %282#0 : !torch.vtensor<[4,32,2048,128],f16> + } +} diff --git a/attention/mlir/attention_B4_H32_SQ2048_SKV4096_DH128_f16.mlir b/attention/mlir/attention_B4_H32_SQ2048_SKV4096_DH128_f16.mlir new file mode 100644 index 0000000..141949f --- /dev/null +++ b/attention/mlir/attention_B4_H32_SQ2048_SKV4096_DH128_f16.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[4,32,2048,128],f16>, %298 : !torch.vtensor<[4,32,4096,128],f16>, %301 : !torch.vtensor<[4,32,4096,128],f16>) -> !torch.vtensor<[4,32,2048,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[4,32,2048,128],f16>, !torch.vtensor<[4,32,4096,128],f16>, !torch.vtensor<[4,32,4096,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[4,32,2048,128],f16>, !torch.vtensor<[4,32,2048], f32>) + return %282#0 : !torch.vtensor<[4,32,2048,128],f16> + } +} diff --git a/attention/mlir/attention_B4_H32_SQ2048_SKV4096_DH128_f8.mlir b/attention/mlir/attention_B4_H32_SQ2048_SKV4096_DH128_f8.mlir new file mode 100644 index 0000000..141949f --- /dev/null +++ b/attention/mlir/attention_B4_H32_SQ2048_SKV4096_DH128_f8.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[4,32,2048,128],f16>, %298 : !torch.vtensor<[4,32,4096,128],f16>, %301 : !torch.vtensor<[4,32,4096,128],f16>) -> !torch.vtensor<[4,32,2048,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[4,32,2048,128],f16>, !torch.vtensor<[4,32,4096,128],f16>, !torch.vtensor<[4,32,4096,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[4,32,2048,128],f16>, !torch.vtensor<[4,32,2048], f32>) + return %282#0 : !torch.vtensor<[4,32,2048,128],f16> + } +} diff --git a/attention/mlir/attention_B4_H32_SQ2048_SKV4096_DH128_fp16.mlir b/attention/mlir/attention_B4_H32_SQ2048_SKV4096_DH128_fp16.mlir new file mode 100644 index 0000000..141949f --- /dev/null +++ b/attention/mlir/attention_B4_H32_SQ2048_SKV4096_DH128_fp16.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[4,32,2048,128],f16>, %298 : !torch.vtensor<[4,32,4096,128],f16>, %301 : !torch.vtensor<[4,32,4096,128],f16>) -> !torch.vtensor<[4,32,2048,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[4,32,2048,128],f16>, !torch.vtensor<[4,32,4096,128],f16>, !torch.vtensor<[4,32,4096,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[4,32,2048,128],f16>, !torch.vtensor<[4,32,2048], f32>) + return %282#0 : !torch.vtensor<[4,32,2048,128],f16> + } +} diff --git a/attention/mlir/attention_B4_H32_SQ2048_SKV4096_DH128_fp8.mlir b/attention/mlir/attention_B4_H32_SQ2048_SKV4096_DH128_fp8.mlir new file mode 100644 index 0000000..141949f --- /dev/null +++ b/attention/mlir/attention_B4_H32_SQ2048_SKV4096_DH128_fp8.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[4,32,2048,128],f16>, %298 : !torch.vtensor<[4,32,4096,128],f16>, %301 : !torch.vtensor<[4,32,4096,128],f16>) -> !torch.vtensor<[4,32,2048,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[4,32,2048,128],f16>, !torch.vtensor<[4,32,4096,128],f16>, !torch.vtensor<[4,32,4096,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[4,32,2048,128],f16>, !torch.vtensor<[4,32,2048], f32>) + return %282#0 : !torch.vtensor<[4,32,2048,128],f16> + } +} diff --git a/attention/mlir/attention_B4_H32_SQ4096_SKV1024_DH128_f16.mlir b/attention/mlir/attention_B4_H32_SQ4096_SKV1024_DH128_f16.mlir new file mode 100644 index 0000000..7b96aef --- /dev/null +++ b/attention/mlir/attention_B4_H32_SQ4096_SKV1024_DH128_f16.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[4,32,4096,128],f16>, %298 : !torch.vtensor<[4,32,1024,128],f16>, %301 : !torch.vtensor<[4,32,1024,128],f16>) -> !torch.vtensor<[4,32,4096,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[4,32,4096,128],f16>, !torch.vtensor<[4,32,1024,128],f16>, !torch.vtensor<[4,32,1024,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[4,32,4096,128],f16>, !torch.vtensor<[4,32,4096], f32>) + return %282#0 : !torch.vtensor<[4,32,4096,128],f16> + } +} diff --git a/attention/mlir/attention_B4_H32_SQ4096_SKV1024_DH128_f8.mlir b/attention/mlir/attention_B4_H32_SQ4096_SKV1024_DH128_f8.mlir new file mode 100644 index 0000000..7b96aef --- /dev/null +++ b/attention/mlir/attention_B4_H32_SQ4096_SKV1024_DH128_f8.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[4,32,4096,128],f16>, %298 : !torch.vtensor<[4,32,1024,128],f16>, %301 : !torch.vtensor<[4,32,1024,128],f16>) -> !torch.vtensor<[4,32,4096,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[4,32,4096,128],f16>, !torch.vtensor<[4,32,1024,128],f16>, !torch.vtensor<[4,32,1024,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[4,32,4096,128],f16>, !torch.vtensor<[4,32,4096], f32>) + return %282#0 : !torch.vtensor<[4,32,4096,128],f16> + } +} diff --git a/attention/mlir/attention_B4_H32_SQ4096_SKV1024_DH128_fp16.mlir b/attention/mlir/attention_B4_H32_SQ4096_SKV1024_DH128_fp16.mlir new file mode 100644 index 0000000..7b96aef --- /dev/null +++ b/attention/mlir/attention_B4_H32_SQ4096_SKV1024_DH128_fp16.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[4,32,4096,128],f16>, %298 : !torch.vtensor<[4,32,1024,128],f16>, %301 : !torch.vtensor<[4,32,1024,128],f16>) -> !torch.vtensor<[4,32,4096,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[4,32,4096,128],f16>, !torch.vtensor<[4,32,1024,128],f16>, !torch.vtensor<[4,32,1024,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[4,32,4096,128],f16>, !torch.vtensor<[4,32,4096], f32>) + return %282#0 : !torch.vtensor<[4,32,4096,128],f16> + } +} diff --git a/attention/mlir/attention_B4_H32_SQ4096_SKV1024_DH128_fp8.mlir b/attention/mlir/attention_B4_H32_SQ4096_SKV1024_DH128_fp8.mlir new file mode 100644 index 0000000..7b96aef --- /dev/null +++ b/attention/mlir/attention_B4_H32_SQ4096_SKV1024_DH128_fp8.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[4,32,4096,128],f16>, %298 : !torch.vtensor<[4,32,1024,128],f16>, %301 : !torch.vtensor<[4,32,1024,128],f16>) -> !torch.vtensor<[4,32,4096,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[4,32,4096,128],f16>, !torch.vtensor<[4,32,1024,128],f16>, !torch.vtensor<[4,32,1024,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[4,32,4096,128],f16>, !torch.vtensor<[4,32,4096], f32>) + return %282#0 : !torch.vtensor<[4,32,4096,128],f16> + } +} diff --git a/attention/mlir/attention_B4_H32_SQ4096_SKV2048_DH128_f16.mlir b/attention/mlir/attention_B4_H32_SQ4096_SKV2048_DH128_f16.mlir new file mode 100644 index 0000000..3914188 --- /dev/null +++ b/attention/mlir/attention_B4_H32_SQ4096_SKV2048_DH128_f16.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[4,32,4096,128],f16>, %298 : !torch.vtensor<[4,32,2048,128],f16>, %301 : !torch.vtensor<[4,32,2048,128],f16>) -> !torch.vtensor<[4,32,4096,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[4,32,4096,128],f16>, !torch.vtensor<[4,32,2048,128],f16>, !torch.vtensor<[4,32,2048,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[4,32,4096,128],f16>, !torch.vtensor<[4,32,4096], f32>) + return %282#0 : !torch.vtensor<[4,32,4096,128],f16> + } +} diff --git a/attention/mlir/attention_B4_H32_SQ4096_SKV2048_DH128_f8.mlir b/attention/mlir/attention_B4_H32_SQ4096_SKV2048_DH128_f8.mlir new file mode 100644 index 0000000..3914188 --- /dev/null +++ b/attention/mlir/attention_B4_H32_SQ4096_SKV2048_DH128_f8.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[4,32,4096,128],f16>, %298 : !torch.vtensor<[4,32,2048,128],f16>, %301 : !torch.vtensor<[4,32,2048,128],f16>) -> !torch.vtensor<[4,32,4096,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[4,32,4096,128],f16>, !torch.vtensor<[4,32,2048,128],f16>, !torch.vtensor<[4,32,2048,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[4,32,4096,128],f16>, !torch.vtensor<[4,32,4096], f32>) + return %282#0 : !torch.vtensor<[4,32,4096,128],f16> + } +} diff --git a/attention/mlir/attention_B4_H32_SQ4096_SKV2048_DH128_fp16.mlir b/attention/mlir/attention_B4_H32_SQ4096_SKV2048_DH128_fp16.mlir new file mode 100644 index 0000000..3914188 --- /dev/null +++ b/attention/mlir/attention_B4_H32_SQ4096_SKV2048_DH128_fp16.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[4,32,4096,128],f16>, %298 : !torch.vtensor<[4,32,2048,128],f16>, %301 : !torch.vtensor<[4,32,2048,128],f16>) -> !torch.vtensor<[4,32,4096,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[4,32,4096,128],f16>, !torch.vtensor<[4,32,2048,128],f16>, !torch.vtensor<[4,32,2048,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[4,32,4096,128],f16>, !torch.vtensor<[4,32,4096], f32>) + return %282#0 : !torch.vtensor<[4,32,4096,128],f16> + } +} diff --git a/attention/mlir/attention_B4_H32_SQ4096_SKV2048_DH128_fp8.mlir b/attention/mlir/attention_B4_H32_SQ4096_SKV2048_DH128_fp8.mlir new file mode 100644 index 0000000..3914188 --- /dev/null +++ b/attention/mlir/attention_B4_H32_SQ4096_SKV2048_DH128_fp8.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[4,32,4096,128],f16>, %298 : !torch.vtensor<[4,32,2048,128],f16>, %301 : !torch.vtensor<[4,32,2048,128],f16>) -> !torch.vtensor<[4,32,4096,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[4,32,4096,128],f16>, !torch.vtensor<[4,32,2048,128],f16>, !torch.vtensor<[4,32,2048,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[4,32,4096,128],f16>, !torch.vtensor<[4,32,4096], f32>) + return %282#0 : !torch.vtensor<[4,32,4096,128],f16> + } +} diff --git a/attention/mlir/attention_B4_H32_SQ4096_SKV4096_DH128_f16.mlir b/attention/mlir/attention_B4_H32_SQ4096_SKV4096_DH128_f16.mlir new file mode 100644 index 0000000..7030eb2 --- /dev/null +++ b/attention/mlir/attention_B4_H32_SQ4096_SKV4096_DH128_f16.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[4,32,4096,128],f16>, %298 : !torch.vtensor<[4,32,4096,128],f16>, %301 : !torch.vtensor<[4,32,4096,128],f16>) -> !torch.vtensor<[4,32,4096,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[4,32,4096,128],f16>, !torch.vtensor<[4,32,4096,128],f16>, !torch.vtensor<[4,32,4096,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[4,32,4096,128],f16>, !torch.vtensor<[4,32,4096], f32>) + return %282#0 : !torch.vtensor<[4,32,4096,128],f16> + } +} diff --git a/attention/mlir/attention_B4_H32_SQ4096_SKV4096_DH128_f8.mlir b/attention/mlir/attention_B4_H32_SQ4096_SKV4096_DH128_f8.mlir new file mode 100644 index 0000000..7030eb2 --- /dev/null +++ b/attention/mlir/attention_B4_H32_SQ4096_SKV4096_DH128_f8.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[4,32,4096,128],f16>, %298 : !torch.vtensor<[4,32,4096,128],f16>, %301 : !torch.vtensor<[4,32,4096,128],f16>) -> !torch.vtensor<[4,32,4096,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[4,32,4096,128],f16>, !torch.vtensor<[4,32,4096,128],f16>, !torch.vtensor<[4,32,4096,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[4,32,4096,128],f16>, !torch.vtensor<[4,32,4096], f32>) + return %282#0 : !torch.vtensor<[4,32,4096,128],f16> + } +} diff --git a/attention/mlir/attention_B4_H32_SQ4096_SKV4096_DH128_fp16.mlir b/attention/mlir/attention_B4_H32_SQ4096_SKV4096_DH128_fp16.mlir new file mode 100644 index 0000000..7030eb2 --- /dev/null +++ b/attention/mlir/attention_B4_H32_SQ4096_SKV4096_DH128_fp16.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[4,32,4096,128],f16>, %298 : !torch.vtensor<[4,32,4096,128],f16>, %301 : !torch.vtensor<[4,32,4096,128],f16>) -> !torch.vtensor<[4,32,4096,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[4,32,4096,128],f16>, !torch.vtensor<[4,32,4096,128],f16>, !torch.vtensor<[4,32,4096,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[4,32,4096,128],f16>, !torch.vtensor<[4,32,4096], f32>) + return %282#0 : !torch.vtensor<[4,32,4096,128],f16> + } +} diff --git a/attention/mlir/attention_B4_H32_SQ4096_SKV4096_DH128_fp8.mlir b/attention/mlir/attention_B4_H32_SQ4096_SKV4096_DH128_fp8.mlir new file mode 100644 index 0000000..7030eb2 --- /dev/null +++ b/attention/mlir/attention_B4_H32_SQ4096_SKV4096_DH128_fp8.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[4,32,4096,128],f16>, %298 : !torch.vtensor<[4,32,4096,128],f16>, %301 : !torch.vtensor<[4,32,4096,128],f16>) -> !torch.vtensor<[4,32,4096,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[4,32,4096,128],f16>, !torch.vtensor<[4,32,4096,128],f16>, !torch.vtensor<[4,32,4096,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[4,32,4096,128],f16>, !torch.vtensor<[4,32,4096], f32>) + return %282#0 : !torch.vtensor<[4,32,4096,128],f16> + } +} diff --git a/attention/mlir/attention_B4_H40_SQ1024_SKV1024_DH128_f16.mlir b/attention/mlir/attention_B4_H40_SQ1024_SKV1024_DH128_f16.mlir new file mode 100644 index 0000000..6d67b0a --- /dev/null +++ b/attention/mlir/attention_B4_H40_SQ1024_SKV1024_DH128_f16.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[4,40,1024,128],f16>, %298 : !torch.vtensor<[4,40,1024,128],f16>, %301 : !torch.vtensor<[4,40,1024,128],f16>) -> !torch.vtensor<[4,40,1024,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[4,40,1024,128],f16>, !torch.vtensor<[4,40,1024,128],f16>, !torch.vtensor<[4,40,1024,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[4,40,1024,128],f16>, !torch.vtensor<[4,40,1024], f32>) + return %282#0 : !torch.vtensor<[4,40,1024,128],f16> + } +} diff --git a/attention/mlir/attention_B4_H40_SQ1024_SKV1024_DH128_f8.mlir b/attention/mlir/attention_B4_H40_SQ1024_SKV1024_DH128_f8.mlir new file mode 100644 index 0000000..6d67b0a --- /dev/null +++ b/attention/mlir/attention_B4_H40_SQ1024_SKV1024_DH128_f8.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[4,40,1024,128],f16>, %298 : !torch.vtensor<[4,40,1024,128],f16>, %301 : !torch.vtensor<[4,40,1024,128],f16>) -> !torch.vtensor<[4,40,1024,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[4,40,1024,128],f16>, !torch.vtensor<[4,40,1024,128],f16>, !torch.vtensor<[4,40,1024,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[4,40,1024,128],f16>, !torch.vtensor<[4,40,1024], f32>) + return %282#0 : !torch.vtensor<[4,40,1024,128],f16> + } +} diff --git a/attention/mlir/attention_B4_H40_SQ1024_SKV1024_DH128_fp16.mlir b/attention/mlir/attention_B4_H40_SQ1024_SKV1024_DH128_fp16.mlir new file mode 100644 index 0000000..6d67b0a --- /dev/null +++ b/attention/mlir/attention_B4_H40_SQ1024_SKV1024_DH128_fp16.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[4,40,1024,128],f16>, %298 : !torch.vtensor<[4,40,1024,128],f16>, %301 : !torch.vtensor<[4,40,1024,128],f16>) -> !torch.vtensor<[4,40,1024,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[4,40,1024,128],f16>, !torch.vtensor<[4,40,1024,128],f16>, !torch.vtensor<[4,40,1024,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[4,40,1024,128],f16>, !torch.vtensor<[4,40,1024], f32>) + return %282#0 : !torch.vtensor<[4,40,1024,128],f16> + } +} diff --git a/attention/mlir/attention_B4_H40_SQ1024_SKV1024_DH128_fp8.mlir b/attention/mlir/attention_B4_H40_SQ1024_SKV1024_DH128_fp8.mlir new file mode 100644 index 0000000..6d67b0a --- /dev/null +++ b/attention/mlir/attention_B4_H40_SQ1024_SKV1024_DH128_fp8.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[4,40,1024,128],f16>, %298 : !torch.vtensor<[4,40,1024,128],f16>, %301 : !torch.vtensor<[4,40,1024,128],f16>) -> !torch.vtensor<[4,40,1024,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[4,40,1024,128],f16>, !torch.vtensor<[4,40,1024,128],f16>, !torch.vtensor<[4,40,1024,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[4,40,1024,128],f16>, !torch.vtensor<[4,40,1024], f32>) + return %282#0 : !torch.vtensor<[4,40,1024,128],f16> + } +} diff --git a/attention/mlir/attention_B4_H40_SQ1024_SKV2048_DH128_f16.mlir b/attention/mlir/attention_B4_H40_SQ1024_SKV2048_DH128_f16.mlir new file mode 100644 index 0000000..6a2bb64 --- /dev/null +++ b/attention/mlir/attention_B4_H40_SQ1024_SKV2048_DH128_f16.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[4,40,1024,128],f16>, %298 : !torch.vtensor<[4,40,2048,128],f16>, %301 : !torch.vtensor<[4,40,2048,128],f16>) -> !torch.vtensor<[4,40,1024,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[4,40,1024,128],f16>, !torch.vtensor<[4,40,2048,128],f16>, !torch.vtensor<[4,40,2048,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[4,40,1024,128],f16>, !torch.vtensor<[4,40,1024], f32>) + return %282#0 : !torch.vtensor<[4,40,1024,128],f16> + } +} diff --git a/attention/mlir/attention_B4_H40_SQ1024_SKV2048_DH128_f8.mlir b/attention/mlir/attention_B4_H40_SQ1024_SKV2048_DH128_f8.mlir new file mode 100644 index 0000000..6a2bb64 --- /dev/null +++ b/attention/mlir/attention_B4_H40_SQ1024_SKV2048_DH128_f8.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[4,40,1024,128],f16>, %298 : !torch.vtensor<[4,40,2048,128],f16>, %301 : !torch.vtensor<[4,40,2048,128],f16>) -> !torch.vtensor<[4,40,1024,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[4,40,1024,128],f16>, !torch.vtensor<[4,40,2048,128],f16>, !torch.vtensor<[4,40,2048,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[4,40,1024,128],f16>, !torch.vtensor<[4,40,1024], f32>) + return %282#0 : !torch.vtensor<[4,40,1024,128],f16> + } +} diff --git a/attention/mlir/attention_B4_H40_SQ1024_SKV2048_DH128_fp16.mlir b/attention/mlir/attention_B4_H40_SQ1024_SKV2048_DH128_fp16.mlir new file mode 100644 index 0000000..6a2bb64 --- /dev/null +++ b/attention/mlir/attention_B4_H40_SQ1024_SKV2048_DH128_fp16.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[4,40,1024,128],f16>, %298 : !torch.vtensor<[4,40,2048,128],f16>, %301 : !torch.vtensor<[4,40,2048,128],f16>) -> !torch.vtensor<[4,40,1024,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[4,40,1024,128],f16>, !torch.vtensor<[4,40,2048,128],f16>, !torch.vtensor<[4,40,2048,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[4,40,1024,128],f16>, !torch.vtensor<[4,40,1024], f32>) + return %282#0 : !torch.vtensor<[4,40,1024,128],f16> + } +} diff --git a/attention/mlir/attention_B4_H40_SQ1024_SKV2048_DH128_fp8.mlir b/attention/mlir/attention_B4_H40_SQ1024_SKV2048_DH128_fp8.mlir new file mode 100644 index 0000000..6a2bb64 --- /dev/null +++ b/attention/mlir/attention_B4_H40_SQ1024_SKV2048_DH128_fp8.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[4,40,1024,128],f16>, %298 : !torch.vtensor<[4,40,2048,128],f16>, %301 : !torch.vtensor<[4,40,2048,128],f16>) -> !torch.vtensor<[4,40,1024,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[4,40,1024,128],f16>, !torch.vtensor<[4,40,2048,128],f16>, !torch.vtensor<[4,40,2048,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[4,40,1024,128],f16>, !torch.vtensor<[4,40,1024], f32>) + return %282#0 : !torch.vtensor<[4,40,1024,128],f16> + } +} diff --git a/attention/mlir/attention_B4_H40_SQ1024_SKV4096_DH128_f16.mlir b/attention/mlir/attention_B4_H40_SQ1024_SKV4096_DH128_f16.mlir new file mode 100644 index 0000000..060dbc3 --- /dev/null +++ b/attention/mlir/attention_B4_H40_SQ1024_SKV4096_DH128_f16.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[4,40,1024,128],f16>, %298 : !torch.vtensor<[4,40,4096,128],f16>, %301 : !torch.vtensor<[4,40,4096,128],f16>) -> !torch.vtensor<[4,40,1024,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[4,40,1024,128],f16>, !torch.vtensor<[4,40,4096,128],f16>, !torch.vtensor<[4,40,4096,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[4,40,1024,128],f16>, !torch.vtensor<[4,40,1024], f32>) + return %282#0 : !torch.vtensor<[4,40,1024,128],f16> + } +} diff --git a/attention/mlir/attention_B4_H40_SQ1024_SKV4096_DH128_f8.mlir b/attention/mlir/attention_B4_H40_SQ1024_SKV4096_DH128_f8.mlir new file mode 100644 index 0000000..060dbc3 --- /dev/null +++ b/attention/mlir/attention_B4_H40_SQ1024_SKV4096_DH128_f8.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[4,40,1024,128],f16>, %298 : !torch.vtensor<[4,40,4096,128],f16>, %301 : !torch.vtensor<[4,40,4096,128],f16>) -> !torch.vtensor<[4,40,1024,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[4,40,1024,128],f16>, !torch.vtensor<[4,40,4096,128],f16>, !torch.vtensor<[4,40,4096,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[4,40,1024,128],f16>, !torch.vtensor<[4,40,1024], f32>) + return %282#0 : !torch.vtensor<[4,40,1024,128],f16> + } +} diff --git a/attention/mlir/attention_B4_H40_SQ1024_SKV4096_DH128_fp16.mlir b/attention/mlir/attention_B4_H40_SQ1024_SKV4096_DH128_fp16.mlir new file mode 100644 index 0000000..060dbc3 --- /dev/null +++ b/attention/mlir/attention_B4_H40_SQ1024_SKV4096_DH128_fp16.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[4,40,1024,128],f16>, %298 : !torch.vtensor<[4,40,4096,128],f16>, %301 : !torch.vtensor<[4,40,4096,128],f16>) -> !torch.vtensor<[4,40,1024,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[4,40,1024,128],f16>, !torch.vtensor<[4,40,4096,128],f16>, !torch.vtensor<[4,40,4096,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[4,40,1024,128],f16>, !torch.vtensor<[4,40,1024], f32>) + return %282#0 : !torch.vtensor<[4,40,1024,128],f16> + } +} diff --git a/attention/mlir/attention_B4_H40_SQ1024_SKV4096_DH128_fp8.mlir b/attention/mlir/attention_B4_H40_SQ1024_SKV4096_DH128_fp8.mlir new file mode 100644 index 0000000..060dbc3 --- /dev/null +++ b/attention/mlir/attention_B4_H40_SQ1024_SKV4096_DH128_fp8.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[4,40,1024,128],f16>, %298 : !torch.vtensor<[4,40,4096,128],f16>, %301 : !torch.vtensor<[4,40,4096,128],f16>) -> !torch.vtensor<[4,40,1024,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[4,40,1024,128],f16>, !torch.vtensor<[4,40,4096,128],f16>, !torch.vtensor<[4,40,4096,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[4,40,1024,128],f16>, !torch.vtensor<[4,40,1024], f32>) + return %282#0 : !torch.vtensor<[4,40,1024,128],f16> + } +} diff --git a/attention/mlir/attention_B4_H40_SQ2048_SKV1024_DH128_f16.mlir b/attention/mlir/attention_B4_H40_SQ2048_SKV1024_DH128_f16.mlir new file mode 100644 index 0000000..5ff4592 --- /dev/null +++ b/attention/mlir/attention_B4_H40_SQ2048_SKV1024_DH128_f16.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[4,40,2048,128],f16>, %298 : !torch.vtensor<[4,40,1024,128],f16>, %301 : !torch.vtensor<[4,40,1024,128],f16>) -> !torch.vtensor<[4,40,2048,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[4,40,2048,128],f16>, !torch.vtensor<[4,40,1024,128],f16>, !torch.vtensor<[4,40,1024,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[4,40,2048,128],f16>, !torch.vtensor<[4,40,2048], f32>) + return %282#0 : !torch.vtensor<[4,40,2048,128],f16> + } +} diff --git a/attention/mlir/attention_B4_H40_SQ2048_SKV1024_DH128_f8.mlir b/attention/mlir/attention_B4_H40_SQ2048_SKV1024_DH128_f8.mlir new file mode 100644 index 0000000..5ff4592 --- /dev/null +++ b/attention/mlir/attention_B4_H40_SQ2048_SKV1024_DH128_f8.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[4,40,2048,128],f16>, %298 : !torch.vtensor<[4,40,1024,128],f16>, %301 : !torch.vtensor<[4,40,1024,128],f16>) -> !torch.vtensor<[4,40,2048,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[4,40,2048,128],f16>, !torch.vtensor<[4,40,1024,128],f16>, !torch.vtensor<[4,40,1024,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[4,40,2048,128],f16>, !torch.vtensor<[4,40,2048], f32>) + return %282#0 : !torch.vtensor<[4,40,2048,128],f16> + } +} diff --git a/attention/mlir/attention_B4_H40_SQ2048_SKV1024_DH128_fp16.mlir b/attention/mlir/attention_B4_H40_SQ2048_SKV1024_DH128_fp16.mlir new file mode 100644 index 0000000..5ff4592 --- /dev/null +++ b/attention/mlir/attention_B4_H40_SQ2048_SKV1024_DH128_fp16.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[4,40,2048,128],f16>, %298 : !torch.vtensor<[4,40,1024,128],f16>, %301 : !torch.vtensor<[4,40,1024,128],f16>) -> !torch.vtensor<[4,40,2048,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[4,40,2048,128],f16>, !torch.vtensor<[4,40,1024,128],f16>, !torch.vtensor<[4,40,1024,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[4,40,2048,128],f16>, !torch.vtensor<[4,40,2048], f32>) + return %282#0 : !torch.vtensor<[4,40,2048,128],f16> + } +} diff --git a/attention/mlir/attention_B4_H40_SQ2048_SKV1024_DH128_fp8.mlir b/attention/mlir/attention_B4_H40_SQ2048_SKV1024_DH128_fp8.mlir new file mode 100644 index 0000000..5ff4592 --- /dev/null +++ b/attention/mlir/attention_B4_H40_SQ2048_SKV1024_DH128_fp8.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[4,40,2048,128],f16>, %298 : !torch.vtensor<[4,40,1024,128],f16>, %301 : !torch.vtensor<[4,40,1024,128],f16>) -> !torch.vtensor<[4,40,2048,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[4,40,2048,128],f16>, !torch.vtensor<[4,40,1024,128],f16>, !torch.vtensor<[4,40,1024,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[4,40,2048,128],f16>, !torch.vtensor<[4,40,2048], f32>) + return %282#0 : !torch.vtensor<[4,40,2048,128],f16> + } +} diff --git a/attention/mlir/attention_B4_H40_SQ2048_SKV2048_DH128_f16.mlir b/attention/mlir/attention_B4_H40_SQ2048_SKV2048_DH128_f16.mlir new file mode 100644 index 0000000..f73d8ee --- /dev/null +++ b/attention/mlir/attention_B4_H40_SQ2048_SKV2048_DH128_f16.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[4,40,2048,128],f16>, %298 : !torch.vtensor<[4,40,2048,128],f16>, %301 : !torch.vtensor<[4,40,2048,128],f16>) -> !torch.vtensor<[4,40,2048,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[4,40,2048,128],f16>, !torch.vtensor<[4,40,2048,128],f16>, !torch.vtensor<[4,40,2048,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[4,40,2048,128],f16>, !torch.vtensor<[4,40,2048], f32>) + return %282#0 : !torch.vtensor<[4,40,2048,128],f16> + } +} diff --git a/attention/mlir/attention_B4_H40_SQ2048_SKV2048_DH128_f8.mlir b/attention/mlir/attention_B4_H40_SQ2048_SKV2048_DH128_f8.mlir new file mode 100644 index 0000000..f73d8ee --- /dev/null +++ b/attention/mlir/attention_B4_H40_SQ2048_SKV2048_DH128_f8.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[4,40,2048,128],f16>, %298 : !torch.vtensor<[4,40,2048,128],f16>, %301 : !torch.vtensor<[4,40,2048,128],f16>) -> !torch.vtensor<[4,40,2048,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[4,40,2048,128],f16>, !torch.vtensor<[4,40,2048,128],f16>, !torch.vtensor<[4,40,2048,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[4,40,2048,128],f16>, !torch.vtensor<[4,40,2048], f32>) + return %282#0 : !torch.vtensor<[4,40,2048,128],f16> + } +} diff --git a/attention/mlir/attention_B4_H40_SQ2048_SKV2048_DH128_fp16.mlir b/attention/mlir/attention_B4_H40_SQ2048_SKV2048_DH128_fp16.mlir new file mode 100644 index 0000000..f73d8ee --- /dev/null +++ b/attention/mlir/attention_B4_H40_SQ2048_SKV2048_DH128_fp16.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[4,40,2048,128],f16>, %298 : !torch.vtensor<[4,40,2048,128],f16>, %301 : !torch.vtensor<[4,40,2048,128],f16>) -> !torch.vtensor<[4,40,2048,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[4,40,2048,128],f16>, !torch.vtensor<[4,40,2048,128],f16>, !torch.vtensor<[4,40,2048,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[4,40,2048,128],f16>, !torch.vtensor<[4,40,2048], f32>) + return %282#0 : !torch.vtensor<[4,40,2048,128],f16> + } +} diff --git a/attention/mlir/attention_B4_H40_SQ2048_SKV2048_DH128_fp8.mlir b/attention/mlir/attention_B4_H40_SQ2048_SKV2048_DH128_fp8.mlir new file mode 100644 index 0000000..f73d8ee --- /dev/null +++ b/attention/mlir/attention_B4_H40_SQ2048_SKV2048_DH128_fp8.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[4,40,2048,128],f16>, %298 : !torch.vtensor<[4,40,2048,128],f16>, %301 : !torch.vtensor<[4,40,2048,128],f16>) -> !torch.vtensor<[4,40,2048,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[4,40,2048,128],f16>, !torch.vtensor<[4,40,2048,128],f16>, !torch.vtensor<[4,40,2048,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[4,40,2048,128],f16>, !torch.vtensor<[4,40,2048], f32>) + return %282#0 : !torch.vtensor<[4,40,2048,128],f16> + } +} diff --git a/attention/mlir/attention_B4_H40_SQ2048_SKV4096_DH128_f16.mlir b/attention/mlir/attention_B4_H40_SQ2048_SKV4096_DH128_f16.mlir new file mode 100644 index 0000000..e98abf9 --- /dev/null +++ b/attention/mlir/attention_B4_H40_SQ2048_SKV4096_DH128_f16.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[4,40,2048,128],f16>, %298 : !torch.vtensor<[4,40,4096,128],f16>, %301 : !torch.vtensor<[4,40,4096,128],f16>) -> !torch.vtensor<[4,40,2048,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[4,40,2048,128],f16>, !torch.vtensor<[4,40,4096,128],f16>, !torch.vtensor<[4,40,4096,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[4,40,2048,128],f16>, !torch.vtensor<[4,40,2048], f32>) + return %282#0 : !torch.vtensor<[4,40,2048,128],f16> + } +} diff --git a/attention/mlir/attention_B4_H40_SQ2048_SKV4096_DH128_f8.mlir b/attention/mlir/attention_B4_H40_SQ2048_SKV4096_DH128_f8.mlir new file mode 100644 index 0000000..e98abf9 --- /dev/null +++ b/attention/mlir/attention_B4_H40_SQ2048_SKV4096_DH128_f8.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[4,40,2048,128],f16>, %298 : !torch.vtensor<[4,40,4096,128],f16>, %301 : !torch.vtensor<[4,40,4096,128],f16>) -> !torch.vtensor<[4,40,2048,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[4,40,2048,128],f16>, !torch.vtensor<[4,40,4096,128],f16>, !torch.vtensor<[4,40,4096,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[4,40,2048,128],f16>, !torch.vtensor<[4,40,2048], f32>) + return %282#0 : !torch.vtensor<[4,40,2048,128],f16> + } +} diff --git a/attention/mlir/attention_B4_H40_SQ2048_SKV4096_DH128_fp16.mlir b/attention/mlir/attention_B4_H40_SQ2048_SKV4096_DH128_fp16.mlir new file mode 100644 index 0000000..e98abf9 --- /dev/null +++ b/attention/mlir/attention_B4_H40_SQ2048_SKV4096_DH128_fp16.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[4,40,2048,128],f16>, %298 : !torch.vtensor<[4,40,4096,128],f16>, %301 : !torch.vtensor<[4,40,4096,128],f16>) -> !torch.vtensor<[4,40,2048,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[4,40,2048,128],f16>, !torch.vtensor<[4,40,4096,128],f16>, !torch.vtensor<[4,40,4096,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[4,40,2048,128],f16>, !torch.vtensor<[4,40,2048], f32>) + return %282#0 : !torch.vtensor<[4,40,2048,128],f16> + } +} diff --git a/attention/mlir/attention_B4_H40_SQ2048_SKV4096_DH128_fp8.mlir b/attention/mlir/attention_B4_H40_SQ2048_SKV4096_DH128_fp8.mlir new file mode 100644 index 0000000..e98abf9 --- /dev/null +++ b/attention/mlir/attention_B4_H40_SQ2048_SKV4096_DH128_fp8.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[4,40,2048,128],f16>, %298 : !torch.vtensor<[4,40,4096,128],f16>, %301 : !torch.vtensor<[4,40,4096,128],f16>) -> !torch.vtensor<[4,40,2048,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[4,40,2048,128],f16>, !torch.vtensor<[4,40,4096,128],f16>, !torch.vtensor<[4,40,4096,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[4,40,2048,128],f16>, !torch.vtensor<[4,40,2048], f32>) + return %282#0 : !torch.vtensor<[4,40,2048,128],f16> + } +} diff --git a/attention/mlir/attention_B4_H40_SQ4096_SKV1024_DH128_f16.mlir b/attention/mlir/attention_B4_H40_SQ4096_SKV1024_DH128_f16.mlir new file mode 100644 index 0000000..850e45e --- /dev/null +++ b/attention/mlir/attention_B4_H40_SQ4096_SKV1024_DH128_f16.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[4,40,4096,128],f16>, %298 : !torch.vtensor<[4,40,1024,128],f16>, %301 : !torch.vtensor<[4,40,1024,128],f16>) -> !torch.vtensor<[4,40,4096,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[4,40,4096,128],f16>, !torch.vtensor<[4,40,1024,128],f16>, !torch.vtensor<[4,40,1024,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[4,40,4096,128],f16>, !torch.vtensor<[4,40,4096], f32>) + return %282#0 : !torch.vtensor<[4,40,4096,128],f16> + } +} diff --git a/attention/mlir/attention_B4_H40_SQ4096_SKV1024_DH128_f8.mlir b/attention/mlir/attention_B4_H40_SQ4096_SKV1024_DH128_f8.mlir new file mode 100644 index 0000000..850e45e --- /dev/null +++ b/attention/mlir/attention_B4_H40_SQ4096_SKV1024_DH128_f8.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[4,40,4096,128],f16>, %298 : !torch.vtensor<[4,40,1024,128],f16>, %301 : !torch.vtensor<[4,40,1024,128],f16>) -> !torch.vtensor<[4,40,4096,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[4,40,4096,128],f16>, !torch.vtensor<[4,40,1024,128],f16>, !torch.vtensor<[4,40,1024,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[4,40,4096,128],f16>, !torch.vtensor<[4,40,4096], f32>) + return %282#0 : !torch.vtensor<[4,40,4096,128],f16> + } +} diff --git a/attention/mlir/attention_B4_H40_SQ4096_SKV1024_DH128_fp16.mlir b/attention/mlir/attention_B4_H40_SQ4096_SKV1024_DH128_fp16.mlir new file mode 100644 index 0000000..850e45e --- /dev/null +++ b/attention/mlir/attention_B4_H40_SQ4096_SKV1024_DH128_fp16.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[4,40,4096,128],f16>, %298 : !torch.vtensor<[4,40,1024,128],f16>, %301 : !torch.vtensor<[4,40,1024,128],f16>) -> !torch.vtensor<[4,40,4096,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[4,40,4096,128],f16>, !torch.vtensor<[4,40,1024,128],f16>, !torch.vtensor<[4,40,1024,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[4,40,4096,128],f16>, !torch.vtensor<[4,40,4096], f32>) + return %282#0 : !torch.vtensor<[4,40,4096,128],f16> + } +} diff --git a/attention/mlir/attention_B4_H40_SQ4096_SKV1024_DH128_fp8.mlir b/attention/mlir/attention_B4_H40_SQ4096_SKV1024_DH128_fp8.mlir new file mode 100644 index 0000000..850e45e --- /dev/null +++ b/attention/mlir/attention_B4_H40_SQ4096_SKV1024_DH128_fp8.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[4,40,4096,128],f16>, %298 : !torch.vtensor<[4,40,1024,128],f16>, %301 : !torch.vtensor<[4,40,1024,128],f16>) -> !torch.vtensor<[4,40,4096,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[4,40,4096,128],f16>, !torch.vtensor<[4,40,1024,128],f16>, !torch.vtensor<[4,40,1024,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[4,40,4096,128],f16>, !torch.vtensor<[4,40,4096], f32>) + return %282#0 : !torch.vtensor<[4,40,4096,128],f16> + } +} diff --git a/attention/mlir/attention_B4_H40_SQ4096_SKV2048_DH128_f16.mlir b/attention/mlir/attention_B4_H40_SQ4096_SKV2048_DH128_f16.mlir new file mode 100644 index 0000000..b4eb836 --- /dev/null +++ b/attention/mlir/attention_B4_H40_SQ4096_SKV2048_DH128_f16.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[4,40,4096,128],f16>, %298 : !torch.vtensor<[4,40,2048,128],f16>, %301 : !torch.vtensor<[4,40,2048,128],f16>) -> !torch.vtensor<[4,40,4096,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[4,40,4096,128],f16>, !torch.vtensor<[4,40,2048,128],f16>, !torch.vtensor<[4,40,2048,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[4,40,4096,128],f16>, !torch.vtensor<[4,40,4096], f32>) + return %282#0 : !torch.vtensor<[4,40,4096,128],f16> + } +} diff --git a/attention/mlir/attention_B4_H40_SQ4096_SKV2048_DH128_f8.mlir b/attention/mlir/attention_B4_H40_SQ4096_SKV2048_DH128_f8.mlir new file mode 100644 index 0000000..b4eb836 --- /dev/null +++ b/attention/mlir/attention_B4_H40_SQ4096_SKV2048_DH128_f8.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[4,40,4096,128],f16>, %298 : !torch.vtensor<[4,40,2048,128],f16>, %301 : !torch.vtensor<[4,40,2048,128],f16>) -> !torch.vtensor<[4,40,4096,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[4,40,4096,128],f16>, !torch.vtensor<[4,40,2048,128],f16>, !torch.vtensor<[4,40,2048,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[4,40,4096,128],f16>, !torch.vtensor<[4,40,4096], f32>) + return %282#0 : !torch.vtensor<[4,40,4096,128],f16> + } +} diff --git a/attention/mlir/attention_B4_H40_SQ4096_SKV2048_DH128_fp16.mlir b/attention/mlir/attention_B4_H40_SQ4096_SKV2048_DH128_fp16.mlir new file mode 100644 index 0000000..b4eb836 --- /dev/null +++ b/attention/mlir/attention_B4_H40_SQ4096_SKV2048_DH128_fp16.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[4,40,4096,128],f16>, %298 : !torch.vtensor<[4,40,2048,128],f16>, %301 : !torch.vtensor<[4,40,2048,128],f16>) -> !torch.vtensor<[4,40,4096,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[4,40,4096,128],f16>, !torch.vtensor<[4,40,2048,128],f16>, !torch.vtensor<[4,40,2048,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[4,40,4096,128],f16>, !torch.vtensor<[4,40,4096], f32>) + return %282#0 : !torch.vtensor<[4,40,4096,128],f16> + } +} diff --git a/attention/mlir/attention_B4_H40_SQ4096_SKV2048_DH128_fp8.mlir b/attention/mlir/attention_B4_H40_SQ4096_SKV2048_DH128_fp8.mlir new file mode 100644 index 0000000..b4eb836 --- /dev/null +++ b/attention/mlir/attention_B4_H40_SQ4096_SKV2048_DH128_fp8.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[4,40,4096,128],f16>, %298 : !torch.vtensor<[4,40,2048,128],f16>, %301 : !torch.vtensor<[4,40,2048,128],f16>) -> !torch.vtensor<[4,40,4096,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[4,40,4096,128],f16>, !torch.vtensor<[4,40,2048,128],f16>, !torch.vtensor<[4,40,2048,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[4,40,4096,128],f16>, !torch.vtensor<[4,40,4096], f32>) + return %282#0 : !torch.vtensor<[4,40,4096,128],f16> + } +} diff --git a/attention/mlir/attention_B4_H40_SQ4096_SKV4096_DH128_f16.mlir b/attention/mlir/attention_B4_H40_SQ4096_SKV4096_DH128_f16.mlir new file mode 100644 index 0000000..6b38a12 --- /dev/null +++ b/attention/mlir/attention_B4_H40_SQ4096_SKV4096_DH128_f16.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[4,40,4096,128],f16>, %298 : !torch.vtensor<[4,40,4096,128],f16>, %301 : !torch.vtensor<[4,40,4096,128],f16>) -> !torch.vtensor<[4,40,4096,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[4,40,4096,128],f16>, !torch.vtensor<[4,40,4096,128],f16>, !torch.vtensor<[4,40,4096,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[4,40,4096,128],f16>, !torch.vtensor<[4,40,4096], f32>) + return %282#0 : !torch.vtensor<[4,40,4096,128],f16> + } +} diff --git a/attention/mlir/attention_B4_H40_SQ4096_SKV4096_DH128_f8.mlir b/attention/mlir/attention_B4_H40_SQ4096_SKV4096_DH128_f8.mlir new file mode 100644 index 0000000..6b38a12 --- /dev/null +++ b/attention/mlir/attention_B4_H40_SQ4096_SKV4096_DH128_f8.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[4,40,4096,128],f16>, %298 : !torch.vtensor<[4,40,4096,128],f16>, %301 : !torch.vtensor<[4,40,4096,128],f16>) -> !torch.vtensor<[4,40,4096,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[4,40,4096,128],f16>, !torch.vtensor<[4,40,4096,128],f16>, !torch.vtensor<[4,40,4096,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[4,40,4096,128],f16>, !torch.vtensor<[4,40,4096], f32>) + return %282#0 : !torch.vtensor<[4,40,4096,128],f16> + } +} diff --git a/attention/mlir/attention_B4_H40_SQ4096_SKV4096_DH128_fp16.mlir b/attention/mlir/attention_B4_H40_SQ4096_SKV4096_DH128_fp16.mlir new file mode 100644 index 0000000..6b38a12 --- /dev/null +++ b/attention/mlir/attention_B4_H40_SQ4096_SKV4096_DH128_fp16.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[4,40,4096,128],f16>, %298 : !torch.vtensor<[4,40,4096,128],f16>, %301 : !torch.vtensor<[4,40,4096,128],f16>) -> !torch.vtensor<[4,40,4096,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[4,40,4096,128],f16>, !torch.vtensor<[4,40,4096,128],f16>, !torch.vtensor<[4,40,4096,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[4,40,4096,128],f16>, !torch.vtensor<[4,40,4096], f32>) + return %282#0 : !torch.vtensor<[4,40,4096,128],f16> + } +} diff --git a/attention/mlir/attention_B4_H40_SQ4096_SKV4096_DH128_fp8.mlir b/attention/mlir/attention_B4_H40_SQ4096_SKV4096_DH128_fp8.mlir new file mode 100644 index 0000000..6b38a12 --- /dev/null +++ b/attention/mlir/attention_B4_H40_SQ4096_SKV4096_DH128_fp8.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[4,40,4096,128],f16>, %298 : !torch.vtensor<[4,40,4096,128],f16>, %301 : !torch.vtensor<[4,40,4096,128],f16>) -> !torch.vtensor<[4,40,4096,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[4,40,4096,128],f16>, !torch.vtensor<[4,40,4096,128],f16>, !torch.vtensor<[4,40,4096,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[4,40,4096,128],f16>, !torch.vtensor<[4,40,4096], f32>) + return %282#0 : !torch.vtensor<[4,40,4096,128],f16> + } +} diff --git a/attention/mlir/attention_B4_H64_SQ1024_SKV1024_DH128_f16.mlir b/attention/mlir/attention_B4_H64_SQ1024_SKV1024_DH128_f16.mlir new file mode 100644 index 0000000..379b222 --- /dev/null +++ b/attention/mlir/attention_B4_H64_SQ1024_SKV1024_DH128_f16.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[4,64,1024,128],f16>, %298 : !torch.vtensor<[4,64,1024,128],f16>, %301 : !torch.vtensor<[4,64,1024,128],f16>) -> !torch.vtensor<[4,64,1024,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[4,64,1024,128],f16>, !torch.vtensor<[4,64,1024,128],f16>, !torch.vtensor<[4,64,1024,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[4,64,1024,128],f16>, !torch.vtensor<[4,64,1024], f32>) + return %282#0 : !torch.vtensor<[4,64,1024,128],f16> + } +} diff --git a/attention/mlir/attention_B4_H64_SQ1024_SKV1024_DH128_f8.mlir b/attention/mlir/attention_B4_H64_SQ1024_SKV1024_DH128_f8.mlir new file mode 100644 index 0000000..379b222 --- /dev/null +++ b/attention/mlir/attention_B4_H64_SQ1024_SKV1024_DH128_f8.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[4,64,1024,128],f16>, %298 : !torch.vtensor<[4,64,1024,128],f16>, %301 : !torch.vtensor<[4,64,1024,128],f16>) -> !torch.vtensor<[4,64,1024,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[4,64,1024,128],f16>, !torch.vtensor<[4,64,1024,128],f16>, !torch.vtensor<[4,64,1024,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[4,64,1024,128],f16>, !torch.vtensor<[4,64,1024], f32>) + return %282#0 : !torch.vtensor<[4,64,1024,128],f16> + } +} diff --git a/attention/mlir/attention_B4_H64_SQ1024_SKV1024_DH128_fp16.mlir b/attention/mlir/attention_B4_H64_SQ1024_SKV1024_DH128_fp16.mlir new file mode 100644 index 0000000..379b222 --- /dev/null +++ b/attention/mlir/attention_B4_H64_SQ1024_SKV1024_DH128_fp16.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[4,64,1024,128],f16>, %298 : !torch.vtensor<[4,64,1024,128],f16>, %301 : !torch.vtensor<[4,64,1024,128],f16>) -> !torch.vtensor<[4,64,1024,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[4,64,1024,128],f16>, !torch.vtensor<[4,64,1024,128],f16>, !torch.vtensor<[4,64,1024,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[4,64,1024,128],f16>, !torch.vtensor<[4,64,1024], f32>) + return %282#0 : !torch.vtensor<[4,64,1024,128],f16> + } +} diff --git a/attention/mlir/attention_B4_H64_SQ1024_SKV1024_DH128_fp8.mlir b/attention/mlir/attention_B4_H64_SQ1024_SKV1024_DH128_fp8.mlir new file mode 100644 index 0000000..379b222 --- /dev/null +++ b/attention/mlir/attention_B4_H64_SQ1024_SKV1024_DH128_fp8.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[4,64,1024,128],f16>, %298 : !torch.vtensor<[4,64,1024,128],f16>, %301 : !torch.vtensor<[4,64,1024,128],f16>) -> !torch.vtensor<[4,64,1024,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[4,64,1024,128],f16>, !torch.vtensor<[4,64,1024,128],f16>, !torch.vtensor<[4,64,1024,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[4,64,1024,128],f16>, !torch.vtensor<[4,64,1024], f32>) + return %282#0 : !torch.vtensor<[4,64,1024,128],f16> + } +} diff --git a/attention/mlir/attention_B4_H64_SQ1024_SKV2048_DH128_f16.mlir b/attention/mlir/attention_B4_H64_SQ1024_SKV2048_DH128_f16.mlir new file mode 100644 index 0000000..58513cc --- /dev/null +++ b/attention/mlir/attention_B4_H64_SQ1024_SKV2048_DH128_f16.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[4,64,1024,128],f16>, %298 : !torch.vtensor<[4,64,2048,128],f16>, %301 : !torch.vtensor<[4,64,2048,128],f16>) -> !torch.vtensor<[4,64,1024,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[4,64,1024,128],f16>, !torch.vtensor<[4,64,2048,128],f16>, !torch.vtensor<[4,64,2048,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[4,64,1024,128],f16>, !torch.vtensor<[4,64,1024], f32>) + return %282#0 : !torch.vtensor<[4,64,1024,128],f16> + } +} diff --git a/attention/mlir/attention_B4_H64_SQ1024_SKV2048_DH128_f8.mlir b/attention/mlir/attention_B4_H64_SQ1024_SKV2048_DH128_f8.mlir new file mode 100644 index 0000000..58513cc --- /dev/null +++ b/attention/mlir/attention_B4_H64_SQ1024_SKV2048_DH128_f8.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[4,64,1024,128],f16>, %298 : !torch.vtensor<[4,64,2048,128],f16>, %301 : !torch.vtensor<[4,64,2048,128],f16>) -> !torch.vtensor<[4,64,1024,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[4,64,1024,128],f16>, !torch.vtensor<[4,64,2048,128],f16>, !torch.vtensor<[4,64,2048,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[4,64,1024,128],f16>, !torch.vtensor<[4,64,1024], f32>) + return %282#0 : !torch.vtensor<[4,64,1024,128],f16> + } +} diff --git a/attention/mlir/attention_B4_H64_SQ1024_SKV2048_DH128_fp16.mlir b/attention/mlir/attention_B4_H64_SQ1024_SKV2048_DH128_fp16.mlir new file mode 100644 index 0000000..58513cc --- /dev/null +++ b/attention/mlir/attention_B4_H64_SQ1024_SKV2048_DH128_fp16.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[4,64,1024,128],f16>, %298 : !torch.vtensor<[4,64,2048,128],f16>, %301 : !torch.vtensor<[4,64,2048,128],f16>) -> !torch.vtensor<[4,64,1024,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[4,64,1024,128],f16>, !torch.vtensor<[4,64,2048,128],f16>, !torch.vtensor<[4,64,2048,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[4,64,1024,128],f16>, !torch.vtensor<[4,64,1024], f32>) + return %282#0 : !torch.vtensor<[4,64,1024,128],f16> + } +} diff --git a/attention/mlir/attention_B4_H64_SQ1024_SKV2048_DH128_fp8.mlir b/attention/mlir/attention_B4_H64_SQ1024_SKV2048_DH128_fp8.mlir new file mode 100644 index 0000000..58513cc --- /dev/null +++ b/attention/mlir/attention_B4_H64_SQ1024_SKV2048_DH128_fp8.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[4,64,1024,128],f16>, %298 : !torch.vtensor<[4,64,2048,128],f16>, %301 : !torch.vtensor<[4,64,2048,128],f16>) -> !torch.vtensor<[4,64,1024,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[4,64,1024,128],f16>, !torch.vtensor<[4,64,2048,128],f16>, !torch.vtensor<[4,64,2048,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[4,64,1024,128],f16>, !torch.vtensor<[4,64,1024], f32>) + return %282#0 : !torch.vtensor<[4,64,1024,128],f16> + } +} diff --git a/attention/mlir/attention_B4_H64_SQ1024_SKV4096_DH128_f16.mlir b/attention/mlir/attention_B4_H64_SQ1024_SKV4096_DH128_f16.mlir new file mode 100644 index 0000000..d8ee6c5 --- /dev/null +++ b/attention/mlir/attention_B4_H64_SQ1024_SKV4096_DH128_f16.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[4,64,1024,128],f16>, %298 : !torch.vtensor<[4,64,4096,128],f16>, %301 : !torch.vtensor<[4,64,4096,128],f16>) -> !torch.vtensor<[4,64,1024,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[4,64,1024,128],f16>, !torch.vtensor<[4,64,4096,128],f16>, !torch.vtensor<[4,64,4096,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[4,64,1024,128],f16>, !torch.vtensor<[4,64,1024], f32>) + return %282#0 : !torch.vtensor<[4,64,1024,128],f16> + } +} diff --git a/attention/mlir/attention_B4_H64_SQ1024_SKV4096_DH128_f8.mlir b/attention/mlir/attention_B4_H64_SQ1024_SKV4096_DH128_f8.mlir new file mode 100644 index 0000000..d8ee6c5 --- /dev/null +++ b/attention/mlir/attention_B4_H64_SQ1024_SKV4096_DH128_f8.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[4,64,1024,128],f16>, %298 : !torch.vtensor<[4,64,4096,128],f16>, %301 : !torch.vtensor<[4,64,4096,128],f16>) -> !torch.vtensor<[4,64,1024,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[4,64,1024,128],f16>, !torch.vtensor<[4,64,4096,128],f16>, !torch.vtensor<[4,64,4096,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[4,64,1024,128],f16>, !torch.vtensor<[4,64,1024], f32>) + return %282#0 : !torch.vtensor<[4,64,1024,128],f16> + } +} diff --git a/attention/mlir/attention_B4_H64_SQ1024_SKV4096_DH128_fp16.mlir b/attention/mlir/attention_B4_H64_SQ1024_SKV4096_DH128_fp16.mlir new file mode 100644 index 0000000..d8ee6c5 --- /dev/null +++ b/attention/mlir/attention_B4_H64_SQ1024_SKV4096_DH128_fp16.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[4,64,1024,128],f16>, %298 : !torch.vtensor<[4,64,4096,128],f16>, %301 : !torch.vtensor<[4,64,4096,128],f16>) -> !torch.vtensor<[4,64,1024,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[4,64,1024,128],f16>, !torch.vtensor<[4,64,4096,128],f16>, !torch.vtensor<[4,64,4096,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[4,64,1024,128],f16>, !torch.vtensor<[4,64,1024], f32>) + return %282#0 : !torch.vtensor<[4,64,1024,128],f16> + } +} diff --git a/attention/mlir/attention_B4_H64_SQ1024_SKV4096_DH128_fp8.mlir b/attention/mlir/attention_B4_H64_SQ1024_SKV4096_DH128_fp8.mlir new file mode 100644 index 0000000..d8ee6c5 --- /dev/null +++ b/attention/mlir/attention_B4_H64_SQ1024_SKV4096_DH128_fp8.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[4,64,1024,128],f16>, %298 : !torch.vtensor<[4,64,4096,128],f16>, %301 : !torch.vtensor<[4,64,4096,128],f16>) -> !torch.vtensor<[4,64,1024,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[4,64,1024,128],f16>, !torch.vtensor<[4,64,4096,128],f16>, !torch.vtensor<[4,64,4096,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[4,64,1024,128],f16>, !torch.vtensor<[4,64,1024], f32>) + return %282#0 : !torch.vtensor<[4,64,1024,128],f16> + } +} diff --git a/attention/mlir/attention_B4_H64_SQ2048_SKV1024_DH128_f16.mlir b/attention/mlir/attention_B4_H64_SQ2048_SKV1024_DH128_f16.mlir new file mode 100644 index 0000000..57dfd93 --- /dev/null +++ b/attention/mlir/attention_B4_H64_SQ2048_SKV1024_DH128_f16.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[4,64,2048,128],f16>, %298 : !torch.vtensor<[4,64,1024,128],f16>, %301 : !torch.vtensor<[4,64,1024,128],f16>) -> !torch.vtensor<[4,64,2048,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[4,64,2048,128],f16>, !torch.vtensor<[4,64,1024,128],f16>, !torch.vtensor<[4,64,1024,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[4,64,2048,128],f16>, !torch.vtensor<[4,64,2048], f32>) + return %282#0 : !torch.vtensor<[4,64,2048,128],f16> + } +} diff --git a/attention/mlir/attention_B4_H64_SQ2048_SKV1024_DH128_f8.mlir b/attention/mlir/attention_B4_H64_SQ2048_SKV1024_DH128_f8.mlir new file mode 100644 index 0000000..57dfd93 --- /dev/null +++ b/attention/mlir/attention_B4_H64_SQ2048_SKV1024_DH128_f8.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[4,64,2048,128],f16>, %298 : !torch.vtensor<[4,64,1024,128],f16>, %301 : !torch.vtensor<[4,64,1024,128],f16>) -> !torch.vtensor<[4,64,2048,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[4,64,2048,128],f16>, !torch.vtensor<[4,64,1024,128],f16>, !torch.vtensor<[4,64,1024,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[4,64,2048,128],f16>, !torch.vtensor<[4,64,2048], f32>) + return %282#0 : !torch.vtensor<[4,64,2048,128],f16> + } +} diff --git a/attention/mlir/attention_B4_H64_SQ2048_SKV1024_DH128_fp16.mlir b/attention/mlir/attention_B4_H64_SQ2048_SKV1024_DH128_fp16.mlir new file mode 100644 index 0000000..57dfd93 --- /dev/null +++ b/attention/mlir/attention_B4_H64_SQ2048_SKV1024_DH128_fp16.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[4,64,2048,128],f16>, %298 : !torch.vtensor<[4,64,1024,128],f16>, %301 : !torch.vtensor<[4,64,1024,128],f16>) -> !torch.vtensor<[4,64,2048,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[4,64,2048,128],f16>, !torch.vtensor<[4,64,1024,128],f16>, !torch.vtensor<[4,64,1024,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[4,64,2048,128],f16>, !torch.vtensor<[4,64,2048], f32>) + return %282#0 : !torch.vtensor<[4,64,2048,128],f16> + } +} diff --git a/attention/mlir/attention_B4_H64_SQ2048_SKV1024_DH128_fp8.mlir b/attention/mlir/attention_B4_H64_SQ2048_SKV1024_DH128_fp8.mlir new file mode 100644 index 0000000..57dfd93 --- /dev/null +++ b/attention/mlir/attention_B4_H64_SQ2048_SKV1024_DH128_fp8.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[4,64,2048,128],f16>, %298 : !torch.vtensor<[4,64,1024,128],f16>, %301 : !torch.vtensor<[4,64,1024,128],f16>) -> !torch.vtensor<[4,64,2048,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[4,64,2048,128],f16>, !torch.vtensor<[4,64,1024,128],f16>, !torch.vtensor<[4,64,1024,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[4,64,2048,128],f16>, !torch.vtensor<[4,64,2048], f32>) + return %282#0 : !torch.vtensor<[4,64,2048,128],f16> + } +} diff --git a/attention/mlir/attention_B4_H64_SQ2048_SKV2048_DH128_f16.mlir b/attention/mlir/attention_B4_H64_SQ2048_SKV2048_DH128_f16.mlir new file mode 100644 index 0000000..8378b3d --- /dev/null +++ b/attention/mlir/attention_B4_H64_SQ2048_SKV2048_DH128_f16.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[4,64,2048,128],f16>, %298 : !torch.vtensor<[4,64,2048,128],f16>, %301 : !torch.vtensor<[4,64,2048,128],f16>) -> !torch.vtensor<[4,64,2048,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[4,64,2048,128],f16>, !torch.vtensor<[4,64,2048,128],f16>, !torch.vtensor<[4,64,2048,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[4,64,2048,128],f16>, !torch.vtensor<[4,64,2048], f32>) + return %282#0 : !torch.vtensor<[4,64,2048,128],f16> + } +} diff --git a/attention/mlir/attention_B4_H64_SQ2048_SKV2048_DH128_f8.mlir b/attention/mlir/attention_B4_H64_SQ2048_SKV2048_DH128_f8.mlir new file mode 100644 index 0000000..8378b3d --- /dev/null +++ b/attention/mlir/attention_B4_H64_SQ2048_SKV2048_DH128_f8.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[4,64,2048,128],f16>, %298 : !torch.vtensor<[4,64,2048,128],f16>, %301 : !torch.vtensor<[4,64,2048,128],f16>) -> !torch.vtensor<[4,64,2048,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[4,64,2048,128],f16>, !torch.vtensor<[4,64,2048,128],f16>, !torch.vtensor<[4,64,2048,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[4,64,2048,128],f16>, !torch.vtensor<[4,64,2048], f32>) + return %282#0 : !torch.vtensor<[4,64,2048,128],f16> + } +} diff --git a/attention/mlir/attention_B4_H64_SQ2048_SKV2048_DH128_fp16.mlir b/attention/mlir/attention_B4_H64_SQ2048_SKV2048_DH128_fp16.mlir new file mode 100644 index 0000000..8378b3d --- /dev/null +++ b/attention/mlir/attention_B4_H64_SQ2048_SKV2048_DH128_fp16.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[4,64,2048,128],f16>, %298 : !torch.vtensor<[4,64,2048,128],f16>, %301 : !torch.vtensor<[4,64,2048,128],f16>) -> !torch.vtensor<[4,64,2048,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[4,64,2048,128],f16>, !torch.vtensor<[4,64,2048,128],f16>, !torch.vtensor<[4,64,2048,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[4,64,2048,128],f16>, !torch.vtensor<[4,64,2048], f32>) + return %282#0 : !torch.vtensor<[4,64,2048,128],f16> + } +} diff --git a/attention/mlir/attention_B4_H64_SQ2048_SKV2048_DH128_fp8.mlir b/attention/mlir/attention_B4_H64_SQ2048_SKV2048_DH128_fp8.mlir new file mode 100644 index 0000000..8378b3d --- /dev/null +++ b/attention/mlir/attention_B4_H64_SQ2048_SKV2048_DH128_fp8.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[4,64,2048,128],f16>, %298 : !torch.vtensor<[4,64,2048,128],f16>, %301 : !torch.vtensor<[4,64,2048,128],f16>) -> !torch.vtensor<[4,64,2048,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[4,64,2048,128],f16>, !torch.vtensor<[4,64,2048,128],f16>, !torch.vtensor<[4,64,2048,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[4,64,2048,128],f16>, !torch.vtensor<[4,64,2048], f32>) + return %282#0 : !torch.vtensor<[4,64,2048,128],f16> + } +} diff --git a/attention/mlir/attention_B4_H64_SQ2048_SKV4096_DH128_f16.mlir b/attention/mlir/attention_B4_H64_SQ2048_SKV4096_DH128_f16.mlir new file mode 100644 index 0000000..863607d --- /dev/null +++ b/attention/mlir/attention_B4_H64_SQ2048_SKV4096_DH128_f16.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[4,64,2048,128],f16>, %298 : !torch.vtensor<[4,64,4096,128],f16>, %301 : !torch.vtensor<[4,64,4096,128],f16>) -> !torch.vtensor<[4,64,2048,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[4,64,2048,128],f16>, !torch.vtensor<[4,64,4096,128],f16>, !torch.vtensor<[4,64,4096,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[4,64,2048,128],f16>, !torch.vtensor<[4,64,2048], f32>) + return %282#0 : !torch.vtensor<[4,64,2048,128],f16> + } +} diff --git a/attention/mlir/attention_B4_H64_SQ2048_SKV4096_DH128_f8.mlir b/attention/mlir/attention_B4_H64_SQ2048_SKV4096_DH128_f8.mlir new file mode 100644 index 0000000..863607d --- /dev/null +++ b/attention/mlir/attention_B4_H64_SQ2048_SKV4096_DH128_f8.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[4,64,2048,128],f16>, %298 : !torch.vtensor<[4,64,4096,128],f16>, %301 : !torch.vtensor<[4,64,4096,128],f16>) -> !torch.vtensor<[4,64,2048,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[4,64,2048,128],f16>, !torch.vtensor<[4,64,4096,128],f16>, !torch.vtensor<[4,64,4096,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[4,64,2048,128],f16>, !torch.vtensor<[4,64,2048], f32>) + return %282#0 : !torch.vtensor<[4,64,2048,128],f16> + } +} diff --git a/attention/mlir/attention_B4_H64_SQ2048_SKV4096_DH128_fp16.mlir b/attention/mlir/attention_B4_H64_SQ2048_SKV4096_DH128_fp16.mlir new file mode 100644 index 0000000..863607d --- /dev/null +++ b/attention/mlir/attention_B4_H64_SQ2048_SKV4096_DH128_fp16.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[4,64,2048,128],f16>, %298 : !torch.vtensor<[4,64,4096,128],f16>, %301 : !torch.vtensor<[4,64,4096,128],f16>) -> !torch.vtensor<[4,64,2048,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[4,64,2048,128],f16>, !torch.vtensor<[4,64,4096,128],f16>, !torch.vtensor<[4,64,4096,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[4,64,2048,128],f16>, !torch.vtensor<[4,64,2048], f32>) + return %282#0 : !torch.vtensor<[4,64,2048,128],f16> + } +} diff --git a/attention/mlir/attention_B4_H64_SQ2048_SKV4096_DH128_fp8.mlir b/attention/mlir/attention_B4_H64_SQ2048_SKV4096_DH128_fp8.mlir new file mode 100644 index 0000000..863607d --- /dev/null +++ b/attention/mlir/attention_B4_H64_SQ2048_SKV4096_DH128_fp8.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[4,64,2048,128],f16>, %298 : !torch.vtensor<[4,64,4096,128],f16>, %301 : !torch.vtensor<[4,64,4096,128],f16>) -> !torch.vtensor<[4,64,2048,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[4,64,2048,128],f16>, !torch.vtensor<[4,64,4096,128],f16>, !torch.vtensor<[4,64,4096,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[4,64,2048,128],f16>, !torch.vtensor<[4,64,2048], f32>) + return %282#0 : !torch.vtensor<[4,64,2048,128],f16> + } +} diff --git a/attention/mlir/attention_B4_H64_SQ4096_SKV1024_DH128_f16.mlir b/attention/mlir/attention_B4_H64_SQ4096_SKV1024_DH128_f16.mlir new file mode 100644 index 0000000..90756b2 --- /dev/null +++ b/attention/mlir/attention_B4_H64_SQ4096_SKV1024_DH128_f16.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[4,64,4096,128],f16>, %298 : !torch.vtensor<[4,64,1024,128],f16>, %301 : !torch.vtensor<[4,64,1024,128],f16>) -> !torch.vtensor<[4,64,4096,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[4,64,4096,128],f16>, !torch.vtensor<[4,64,1024,128],f16>, !torch.vtensor<[4,64,1024,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[4,64,4096,128],f16>, !torch.vtensor<[4,64,4096], f32>) + return %282#0 : !torch.vtensor<[4,64,4096,128],f16> + } +} diff --git a/attention/mlir/attention_B4_H64_SQ4096_SKV1024_DH128_f8.mlir b/attention/mlir/attention_B4_H64_SQ4096_SKV1024_DH128_f8.mlir new file mode 100644 index 0000000..90756b2 --- /dev/null +++ b/attention/mlir/attention_B4_H64_SQ4096_SKV1024_DH128_f8.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[4,64,4096,128],f16>, %298 : !torch.vtensor<[4,64,1024,128],f16>, %301 : !torch.vtensor<[4,64,1024,128],f16>) -> !torch.vtensor<[4,64,4096,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[4,64,4096,128],f16>, !torch.vtensor<[4,64,1024,128],f16>, !torch.vtensor<[4,64,1024,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[4,64,4096,128],f16>, !torch.vtensor<[4,64,4096], f32>) + return %282#0 : !torch.vtensor<[4,64,4096,128],f16> + } +} diff --git a/attention/mlir/attention_B4_H64_SQ4096_SKV1024_DH128_fp16.mlir b/attention/mlir/attention_B4_H64_SQ4096_SKV1024_DH128_fp16.mlir new file mode 100644 index 0000000..90756b2 --- /dev/null +++ b/attention/mlir/attention_B4_H64_SQ4096_SKV1024_DH128_fp16.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[4,64,4096,128],f16>, %298 : !torch.vtensor<[4,64,1024,128],f16>, %301 : !torch.vtensor<[4,64,1024,128],f16>) -> !torch.vtensor<[4,64,4096,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[4,64,4096,128],f16>, !torch.vtensor<[4,64,1024,128],f16>, !torch.vtensor<[4,64,1024,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[4,64,4096,128],f16>, !torch.vtensor<[4,64,4096], f32>) + return %282#0 : !torch.vtensor<[4,64,4096,128],f16> + } +} diff --git a/attention/mlir/attention_B4_H64_SQ4096_SKV1024_DH128_fp8.mlir b/attention/mlir/attention_B4_H64_SQ4096_SKV1024_DH128_fp8.mlir new file mode 100644 index 0000000..90756b2 --- /dev/null +++ b/attention/mlir/attention_B4_H64_SQ4096_SKV1024_DH128_fp8.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[4,64,4096,128],f16>, %298 : !torch.vtensor<[4,64,1024,128],f16>, %301 : !torch.vtensor<[4,64,1024,128],f16>) -> !torch.vtensor<[4,64,4096,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[4,64,4096,128],f16>, !torch.vtensor<[4,64,1024,128],f16>, !torch.vtensor<[4,64,1024,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[4,64,4096,128],f16>, !torch.vtensor<[4,64,4096], f32>) + return %282#0 : !torch.vtensor<[4,64,4096,128],f16> + } +} diff --git a/attention/mlir/attention_B4_H64_SQ4096_SKV2048_DH128_f16.mlir b/attention/mlir/attention_B4_H64_SQ4096_SKV2048_DH128_f16.mlir new file mode 100644 index 0000000..d51f954 --- /dev/null +++ b/attention/mlir/attention_B4_H64_SQ4096_SKV2048_DH128_f16.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[4,64,4096,128],f16>, %298 : !torch.vtensor<[4,64,2048,128],f16>, %301 : !torch.vtensor<[4,64,2048,128],f16>) -> !torch.vtensor<[4,64,4096,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[4,64,4096,128],f16>, !torch.vtensor<[4,64,2048,128],f16>, !torch.vtensor<[4,64,2048,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[4,64,4096,128],f16>, !torch.vtensor<[4,64,4096], f32>) + return %282#0 : !torch.vtensor<[4,64,4096,128],f16> + } +} diff --git a/attention/mlir/attention_B4_H64_SQ4096_SKV2048_DH128_f8.mlir b/attention/mlir/attention_B4_H64_SQ4096_SKV2048_DH128_f8.mlir new file mode 100644 index 0000000..d51f954 --- /dev/null +++ b/attention/mlir/attention_B4_H64_SQ4096_SKV2048_DH128_f8.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[4,64,4096,128],f16>, %298 : !torch.vtensor<[4,64,2048,128],f16>, %301 : !torch.vtensor<[4,64,2048,128],f16>) -> !torch.vtensor<[4,64,4096,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[4,64,4096,128],f16>, !torch.vtensor<[4,64,2048,128],f16>, !torch.vtensor<[4,64,2048,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[4,64,4096,128],f16>, !torch.vtensor<[4,64,4096], f32>) + return %282#0 : !torch.vtensor<[4,64,4096,128],f16> + } +} diff --git a/attention/mlir/attention_B4_H64_SQ4096_SKV2048_DH128_fp16.mlir b/attention/mlir/attention_B4_H64_SQ4096_SKV2048_DH128_fp16.mlir new file mode 100644 index 0000000..d51f954 --- /dev/null +++ b/attention/mlir/attention_B4_H64_SQ4096_SKV2048_DH128_fp16.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[4,64,4096,128],f16>, %298 : !torch.vtensor<[4,64,2048,128],f16>, %301 : !torch.vtensor<[4,64,2048,128],f16>) -> !torch.vtensor<[4,64,4096,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[4,64,4096,128],f16>, !torch.vtensor<[4,64,2048,128],f16>, !torch.vtensor<[4,64,2048,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[4,64,4096,128],f16>, !torch.vtensor<[4,64,4096], f32>) + return %282#0 : !torch.vtensor<[4,64,4096,128],f16> + } +} diff --git a/attention/mlir/attention_B4_H64_SQ4096_SKV2048_DH128_fp8.mlir b/attention/mlir/attention_B4_H64_SQ4096_SKV2048_DH128_fp8.mlir new file mode 100644 index 0000000..d51f954 --- /dev/null +++ b/attention/mlir/attention_B4_H64_SQ4096_SKV2048_DH128_fp8.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[4,64,4096,128],f16>, %298 : !torch.vtensor<[4,64,2048,128],f16>, %301 : !torch.vtensor<[4,64,2048,128],f16>) -> !torch.vtensor<[4,64,4096,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[4,64,4096,128],f16>, !torch.vtensor<[4,64,2048,128],f16>, !torch.vtensor<[4,64,2048,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[4,64,4096,128],f16>, !torch.vtensor<[4,64,4096], f32>) + return %282#0 : !torch.vtensor<[4,64,4096,128],f16> + } +} diff --git a/attention/mlir/attention_B4_H64_SQ4096_SKV4096_DH128_f16.mlir b/attention/mlir/attention_B4_H64_SQ4096_SKV4096_DH128_f16.mlir new file mode 100644 index 0000000..dedd980 --- /dev/null +++ b/attention/mlir/attention_B4_H64_SQ4096_SKV4096_DH128_f16.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[4,64,4096,128],f16>, %298 : !torch.vtensor<[4,64,4096,128],f16>, %301 : !torch.vtensor<[4,64,4096,128],f16>) -> !torch.vtensor<[4,64,4096,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[4,64,4096,128],f16>, !torch.vtensor<[4,64,4096,128],f16>, !torch.vtensor<[4,64,4096,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[4,64,4096,128],f16>, !torch.vtensor<[4,64,4096], f32>) + return %282#0 : !torch.vtensor<[4,64,4096,128],f16> + } +} diff --git a/attention/mlir/attention_B4_H64_SQ4096_SKV4096_DH128_f8.mlir b/attention/mlir/attention_B4_H64_SQ4096_SKV4096_DH128_f8.mlir new file mode 100644 index 0000000..dedd980 --- /dev/null +++ b/attention/mlir/attention_B4_H64_SQ4096_SKV4096_DH128_f8.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[4,64,4096,128],f16>, %298 : !torch.vtensor<[4,64,4096,128],f16>, %301 : !torch.vtensor<[4,64,4096,128],f16>) -> !torch.vtensor<[4,64,4096,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[4,64,4096,128],f16>, !torch.vtensor<[4,64,4096,128],f16>, !torch.vtensor<[4,64,4096,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[4,64,4096,128],f16>, !torch.vtensor<[4,64,4096], f32>) + return %282#0 : !torch.vtensor<[4,64,4096,128],f16> + } +} diff --git a/attention/mlir/attention_B4_H64_SQ4096_SKV4096_DH128_fp16.mlir b/attention/mlir/attention_B4_H64_SQ4096_SKV4096_DH128_fp16.mlir new file mode 100644 index 0000000..dedd980 --- /dev/null +++ b/attention/mlir/attention_B4_H64_SQ4096_SKV4096_DH128_fp16.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[4,64,4096,128],f16>, %298 : !torch.vtensor<[4,64,4096,128],f16>, %301 : !torch.vtensor<[4,64,4096,128],f16>) -> !torch.vtensor<[4,64,4096,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[4,64,4096,128],f16>, !torch.vtensor<[4,64,4096,128],f16>, !torch.vtensor<[4,64,4096,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[4,64,4096,128],f16>, !torch.vtensor<[4,64,4096], f32>) + return %282#0 : !torch.vtensor<[4,64,4096,128],f16> + } +} diff --git a/attention/mlir/attention_B4_H64_SQ4096_SKV4096_DH128_fp8.mlir b/attention/mlir/attention_B4_H64_SQ4096_SKV4096_DH128_fp8.mlir new file mode 100644 index 0000000..dedd980 --- /dev/null +++ b/attention/mlir/attention_B4_H64_SQ4096_SKV4096_DH128_fp8.mlir @@ -0,0 +1,11 @@ + +module { + func.func @main_0(%295 : !torch.vtensor<[4,64,4096,128],f16>, %298 : !torch.vtensor<[4,64,4096,128],f16>, %301 : !torch.vtensor<[4,64,4096,128],f16>) -> !torch.vtensor<[4,64,4096,128],f16> { + %false_371 = torch.constant.bool false + %float0.000000e00 = torch.constant.float 0.000000e+00 + %none_372 = torch.constant.none + %none_373 = torch.constant.none + %282:2 = torch.operator "torch.aten._scaled_dot_product_flash_attention_for_cpu"(%295, %298, %301, %float0.000000e00, %false_371, %none_372, %none_373) : (!torch.vtensor<[4,64,4096,128],f16>, !torch.vtensor<[4,64,4096,128],f16>, !torch.vtensor<[4,64,4096,128],f16>, !torch.float, !torch.bool, !torch.none, !torch.none) -> (!torch.vtensor<[4,64,4096,128],f16>, !torch.vtensor<[4,64,4096], f32>) + return %282#0 : !torch.vtensor<[4,64,4096,128],f16> + } +} diff --git a/attention/vmfb/attention_B1_H32_SQ1024_SKV1024_DH128_f16.vmfb b/attention/vmfb/attention_B1_H32_SQ1024_SKV1024_DH128_f16.vmfb new file mode 100644 index 0000000000000000000000000000000000000000..2bc8a8a22c01bf14132a58916c9bca546eea98c8 GIT binary patch literal 30100 zcmeHwdw7)9x$l~9z8NN0hQQ2($Ym0em;f1*ki-N7Ts?#0>**k^CMA0Ic{)7{h4Q@cI3+ud~U-JIWVt@T01 zkhFV0J^!53Pd|R^^1knS-*;WUwcc+svudf+EE4L<7EjGQw0=lmNn*0t)z!MYBNE!N z{mnl(gm4J2`1c8lb~vV@sA)|@18W+8Jv3AdEH;JMhPxH_i@3ju+l%`R+`mX6<#-VU zqZcVRZqxz1PW{34CZHLlaxu5p*fJsMAG z9MJeZjX&1-cN*W<_#2IX(CC5^)FWSG2{X9Lb^iT-PPBbjINI3^hteOKRQkw;yls0r z(#+F8#Mv6_G;Y*5|3f7^6M6QPlARmw+1J^Ethf=k-3Hs^HC}=6Yn-YvSK};=^e?X} z1)@gdVvS2QuGUDMc*%x=oiZoHK8*)89@2PR;}Ao9ORcFO&ds8ihQ-scLD2==Qv?~ zJ?=HgbNnzLz`Y%LjuDOn&aH8{t9yD|qn-1`eW;^PppqO%A3~vbaeosx{d5=Zjkssy z_Tr}Re}elg?qj%7B;LY56M?NzK8X8WDETDrjkqV_=6chCI~Vs)pwuI{*Wvc!{w^9m zhI<)qFYb3B>lkiSi8y3YW+QIqzY2U3_d(p$`J2GEaQ}*V7`5>?%9do*W$)P)+P-_o zjz|palP>3amfari2z5uhBOTGsNOMPcU)OG|M$l~_^z(w+?92$kv&l`UDoAUSIc`^V$ts2u2^$Vr1wgzp5H2c={w2a(zR<>xU;oc zD_)@My>`7SZ{8D)+<_v|sOzt^ulcs=a;_y(Zn&ePt0j!)(Vx1G{)|?Xi6g`Fb4tad z$a9>aE2Pii3ULNyLFA>+H9cvHW6}E9!e&Ut7{+}K*M?eRk#H~k_-pWSOj3sU7iBlc zVX+hum21-#w}--agz=Eb0iDfLrg<=&*sg4pe!0qHw>D z4gy?9hw=7nUTJeo^)KhnFy3J!N{BZ>A4EOr-_^Xz-_d%gEk_9J75_D+!d2G`|G!?9 zRe&^Qaven9K~%Jv&+hBAtiocwFc z>E7Mb-rO1)t|y*JkYoFHK+9CVRa&t<+V=^a)bNUSbvADgqjj!ELi~Q1tkmBr8>wq? zOsX}SeLJF^;g0B?5iu7$wl2#w|5aULa^G|fU9L=!JBRTfNo-&0$Nd5Mhb=c(*3wr& zA4EO%{jTQKb1NFHSB||Ff4HY762nUS@i2bRV8R%0QUYRffAY!pZRIP#W4GU^`StjS zL4b51x5rocLw3_526}sK!y`l3d(p$XoX;|r+xxWBT0WnhpWI))q3dM7?NR;qjxM7N zt~H!FztUxDz2pL<=2OP+hlaL+j@MgZg~ceNylbpYJGx@K!hBGz(=;5b$(xXvTexKJmF)MSxH=_#@x zJ5`Lg+e#PXgQ(!;#p+5Q;K~r=<1)dMNV=cPuF7YM@%8~JOQbQGCcG|HH%0Dp1c#(M z?qLJec3gY{_4C9xLEE@X*z6{22--MzHUqfh8}S%rE*W=Hd?O?? zmlQ`yoIBq*#|&g7$1`ChTa%5z8N*v~jM|E0z#$x0B#~}xNyey>3`jDrNCMqJ@_?<= zM)W}(y_^)M9dHCXius`-_I;Xgf;UNQM1RF$LsC3TxTpy_(SzrfLpVopc;XJ!ZZyeZ zg2N4qDLXknbqc0%7TmJJjf7j=>=vsyN^lC5ux}GqtGKECW8#^X9Cr^SgB#8r@T0vH zN|GrPDMO|x-5F;sc6#hKNKTHA8$c;6;B#_=5-;{`WRHLo8VYc!ov7@?IC|$3mU{+B zwFyH!KCI6iNGA=z3j=06d0-@$skk^mpoiVloWDu%CAAzrrbxC~;9p3>eDXTua@fkF zi#@(D3WOQA`-$>po(#|hV{yP3a1NMp%1X2W^AFV6_ke>f?DLAaoR65YbU3Cg9}nne zQenz+V`yHTL~fDp5veX=YvKZjBR+w|MtlM#IO7}P;5c|4acB`Y;MG*Ih9*u)#y{+v zO<0CWL0_069h5GV8z^D_fK&cUH7MVRZ_2nzkMSkx)d-%Nj6sJk6f4y1r6Op6%e?GO zW8h{XK4MOYGFiEg(@xdJxdI6@zKP4l)j7!ibPT|M17d)!h8F4lU%l_`QKm?CmT0b&7MR!3f|65>bh z!})(}kHzX~mkA^~;x?7#b== znlmsL_g%QDFCDoztgvQS8Oy~%RZhCaxQ9PShien=#S^QS8>Km=drOK-%l4L(R_@(V zQgM|?J<^(caE^g{(OzG}vPFi&QNyL3ms4Dpx~QBGH98UBsuIgEjcPqW;wOw420g@UgxB?8UaE>QtE5Cy@IRUN+ih(#?;f zE(ok$zHsrX^+FtYA-t;Y=^vdo?XZ^BZ{YzJhn)gIv zJy;|VY5RI;S9ovpj*f6|^BrBWow|8Q_<;j`)EV9t`RU?6(_-^iq3&3855gE%EEs0q zS3|ML?X92C;o%z7@qDP~%BTyzq%u9-(T)y15T6b8?Ax`ytK+9j{!D6ycD8;!w7WCP zvx3y8`KnVKuY`8@M0%QA_rWvK7A&ISmYuI-5MNR8t$%+><%a9{mCzmGJ&_%;E_5k- zr{>FgcJ-n^BfZ~1uC1lB2*4ZDuBfPO$KI;4QhOHK{pGNyG^Xl^i|a>*6SG;bgUePb zk|w|eu3+|hsyRt--;6uqs==b#$g*2E)c^2Pzd8SVE*bW7fo-!c;rcT<{m=D4L+2%^ z_n*lGZDP6gu``J{AK8CE)b2S^~p>y{cALho5k1Ve^ ze$Fc%KIiQ=E$mA#3Gt7vjBbxLI zMz2PpvG~)vUZYo|&{%v}*K71@6dH>^qw6(#H42TzM|8bLuSTJ<_yJw7(W_BtEIz91 zHF`A)jl~b@dW~Lz#>Fy!WvZ0p5V9O6KXL4?cay4~g{0&tXiDt`Fu1 z>DBybQsX*X(X*WECDCio5g^CAqSx~vXAF9b{}J>v#-PXeA3>ix20h0A2>QG+=rR6B z(C3dqkMTc({`xWKG5$x;7mPuV@jrsTa145k{}J>v$DqgfA3;BB40??J5%jaipvU+h zL0>cmJ;whC`p_8k82=;aZy19f<3Ex9k#h_;aXwyiJY)P{rC$xgKk|I2xyJLMWR&Ma z>3{M0Fh}Wo&F9Iro(~9Sjk?}k>-kVV2K}|34;5q3U+ejB;~4bUdOlQ+L4U3113u6* zs=e2GKFl41{#wt6o5rBO*7Koy4Ek$5ALflgf34>O4n3pVd#&fgf-&evJRh*XX&jwC zVc&v-Z2Iv1&k}5>Ft6l3N3ToNGhIJ7h^!}aAIW)^z`sK-`JAO6DNp)SKNk}Gzv!yJN6_o%P6BwOW=4_BWLn}k^9f6OY`QfVGnh){yQRx%>sOi^@L7&i1njZ1zQROF$15LkS4Els|rs?t8 zYgG9O<5<&g9D_b#o@jb>)2QK`CD3mfgI=#&3G{f+ zGpc;OZY9v;0}!Lq>vb!EzIhCKy>2DYZySSN&kwvK#Q9qLKdk6EZaJQbUX4P}l?3|j zW6i(uef0h)fj%+@z1|-s(C-+7Uhj_*=-bAi*ZZR@^dd8V z2m#88AAahdgp)7xHa$r&!V?JC{xaOo}PQ4fx&pG6J(~csPd58B^RO#Z? zeMMwn5g8kzoCNyY#-P`GsRa6+W6@CwQv%N&O2>4^ zKe|Tc)AP#an=c-`bPqldKPtVRLvr5isjSEQ`Wi)_6IYlY()IM?Y^@KGHWC>hrX0zS z4_XW;K13|y=gAY&JVf#k88ar2EnD*5t;X#&>GeFf>5qw*3r3Z#=lFQzR;&1xEd?R^ zdW(UrnCDUm{$2CZ>4LS+Gk9-s^qjDSScvj<@ZXSQ|2YBGN~OJ3c$-JRB;jKr#*4|~ z!o?I%k-Eh2zP0E~R_Lr*wLA#w7W?WxeeC@uW+MmC@bB|zx^08O-Z}^M@P;-Saa;{=`P_p3Y-S~EHE4R2rvkY zf#zYPXCQqXm;-zqm_!96&;ETWt;8%cEz!!k{EUstB?P-sD@j0TjWHIDUZ5N0+ z8xFHzoFk)P$UUh&j+k0}$he1Ne%veR?S}issNs1bYNVdVjs@$guTU71PDOu=d6a~C z^dq1FOfd{=V90oJ$jIy)8p8i4Ux`vS=0lY24W0Z(RLXY08jX8ii^fyWL=R?um>ZvT zHoD(?IB$RQ{dsRe);P#Ihq37v4s!r#0>32=oEs7c&mrmB=lrd;&-t-+#F^DMbm9w2 z_KDBSwg&n?7ai*VY;+qG9qNBL8khJ`v|r+b(E*7ML@xvHfG;@@FV3$KdvyBm>lTXL zI{ni{jiOhl-(7+L2y_|1bIvc!(n(04Lt4%^!(AB=nWaOo*0$4Usw}J0Ul1%6$F{s{ zh`uRY3xJ;Z%$&+VL9r}P6@4blfg(P$w34)5(U(eomLmGrvvz;O$jYoyO2>S`SrMGjvAf-(&qgr=fX@ht4L@&Gsby`ki<1@o?hb zVfiKg1RswizKz$n-U+gPBN6qDMATOjQJ_0>ew7f`=7g$GfiMEZhC5an86Ci#&bm5bW~-VBhzZP3!UwxJb9|_Iej(Y$!S4Y6aH7R+ewr zRqtBIJZximUE#y78shG?uD&;qoM+j>JXN;vcBkZBRPwN^9p%N4LE1&ToUVn;Lk7!B z3!ios6L(K^^?mQid6t#ssj{-$FPI(3&jv5cD@s&(#jXox8OtGq^`XL7T(gP0-!}Wc zd*nRJf_bmF`o5#=+L(Pn)(3BY#q9gG(z7x9VHfFgN?wt+ZZ10D>iZkjer5L4(yqp+ z(-kDmu2)RjwxsA`SKk{-er`78Ur_S5lpl~b&Mi`WOCpLdH+sPAdtJ4+tX#F1U!>Z* zwF>QhOSM;BuK1RPoh~QFUf9=YZSyU$=$Fdq1(Q1DM-G@Rz7EC+aQ^WAS%p}w*U`$p8wja)Eq40KwxzFw=wx5uI`1>pnccHb&1>Wf?L zzWo;4oLTjXs}OtzD-CgdV1-o>SY>g{Y>d{sDg)h8_AcKstHXC(+EpFCVAlKYw08RL zv$}kbTAjYfB>m<{y{iFo79KK0ec(Q8Vc>pAKY!~5v(9&yRfoFTdkj$%h+DOR{Z_7c z`(p0u6Xp_>H$7yC#=tSFDR5ks@4RF#NBOeP8DeSRQEOS?F;#y1dnR?;60Ubi{sV@> zPp2zB?0Ia*e2UO z0-xkHmAYrGZ}cxleQBE^<^*(VuB}ma>#_$xpIuwwJ_5TQ zfL$}{9(+5$-au47etrggaXs=C$makHfrY?2;H=sWRvyx`YmLTyU=_+{0~=U}@qImb zL&z^jJ{!0MSOBaBJ$Yv$y$I=C;0?fH-~!fRUKE121o_3tmjYJ;gTNK62k)SNku}5Z z60>|ARyJq{{dHD0@-u1|S**{lt+QtM_DZ_zC0(bL2fA#ZC28|U(B5gy!u%_cvKCo| zsL#e6qTB-VLndVxpbyISp>H66mM><_1U=_!bzm>ryGyl=c}KpP;F}5ha*T~xn4>`{ zyT%HloO7DvgmQzmHCEZac0nC|ePD(pnA-q3*^$LvU@ZKz>2MvgQLh zrx!nEh{b`U)*|Fr22NNjfH&f%t+{Ax0n&?Ehg;5@GEvSp2mOs!3F?dMUVi)a$c zff(BDmvg#or=ooWw8gdCtdiR8Sc9-mV=d(R%JncC`Nl8e*-+bPaUEP0=(kF1UV8h^ zFgA*qmz2RZvo!i!qw=0sV+QD(o(8?|87sebnOrv;Bdx~jz)5QrFc?ese8~{`zEjqcz#~=@%GLy)u~q}~QFjy8ZmwB#k>?s-2fQBTOP^Ki@Dk+L z22NRPfH#o__fnSOmi{OeW%fEty-TC2{0)?IFF6nU>l0zavjF%MkbBBnqz|_ko_gSC zfHvQp$j1ivnGGoK2km0u7lC(=KXSea>H9&u6!>Z2a^OkStpq*|Tn)Srf+mV|9CbT^ z_W*YR&!Dag_&jhQXyQm)sOtmv0q+5xMco15mw|ghb1%|&q3#gyZXo{B!Pm$xZ7Kjc0)NAgv8XDI&6T!}Xh z`d_eahMYnF8EZXtfL>+bt%zob=D;_lta9XU+^J;!K!}R_OC@jRu{lb{V`UPnwg$eA z`E<@|)^aMqSGkM!y=HA?8SJ|eWmR1ng8q4n`)l|ISVjK;=e7mjvLb=+Le3AZHmTQ} zRz&kwfp>0Ch6pMj&#h5d-4%G(+7);QJnvauq{SYul5OwK5cD7A(tp64=s)26LI2-d zyFeQc{0@A-x8g`22$+4;@h0%jzeBZyKEMe|_C?J-0ns<;clR9t?H~ee_vp6fQm?yV z6MRhB^f9oGJ_asaiupR|f7DtE`n8<1SR>fZr@^=IUeylzsE+Lb7Y_PQS!-n*C#}`M zTLNFTXw&`F3-t6q+oAv24*d^Yv?=f++IiKwMe@FEZ34Cg-jHp52E2=OTj)dC7I0BG zFaVx!TP>33bt?>HTZeU9?5FS3CiD}qj{O8|+!^?Z6%G7Yj=dA4-N%0ZTWcrzVcSzE zYoxC5Kj^FJf6Af%DQ6k>f+tp&x=8y)(AL3!{lMyblpo1MKaz)j1lEwJf4$;)8niXw zIZ2*RE1!^uJ|Pc%LY@XZuLk{xtp@6avHc9`AIQM7;)wLim$aO1dMwf2H?_UM8rlo2 z8}uKw7DEPgIJpTrK-MYn((Wd#`?TX(wwwI4oBXt!{5)^|Z1r(z_y5p5Ki6{Dwrw|gX*YRkx6S+W^@{g@ zYTjQAitX2L%aW%mNPKS?(b;3fzocE)cY5k&^GM;)iC}K zhVk2Wlb?2zpLUa<=i6Vcep%Z6&zk4gS`OQ`?IthnCNJ%_d4IiL@&0ek`{6KN+ivpG zZt~J@oA<*_iuX5~_an`Fd6>=L);0sB%|JO;4sXqnHvd-h&}aXm<&fXDnf$bw{Ir?; zaoGIZ)rOlq|EhUD9@e&PGkIw{|x#qYXRo#p#M&59`N6^%zEritHD>i`XjRzd*MOkaoFT{p#pnC;6GWZiCE<}uw;PT8i9 z%%QI*$+})$X9`2~==8isQXE+y33Alcpgq z-EH0W%loKn#nz8Zj{Enw#$+7rms^j^c-2Q+Uv`oH_ghbzvw_96hKy~MHoPqJWlb-e zGHz6xBg-q6tNh%C*JaG?L~Wg`5`3p>x4RhodA)YOs}cCK+LJQY@vGX8TpN-9ZEc2| zF}D7OOD5@0H@t6>{=Ei6(*L|6N7Dbgp-#rgK5p19<9PQssdi2_DZVpJitloh;`>FD z;`^{k@%^r8zqtVMuK9>}J%uv@V_Wl(uh#Le!^>YcPw4U+P#!`#^?GLcCG#`7ya?s9 zQBFP2E`Q%Vtjiapd=bj2_xsBY*B5np1IibooOb_md5)`Jm(M|YDasie`e=Eb>(jct z1m(pj52F0{%lDi2>++Q-Ux9MQ?CiJ<<2Fz0`sJu!Mn1$l?nW8oDkpW_ji{?Y-Cf8t z4s%GCm!rH4<@f3Q&B$*+{!2Q)9{F|1Kcn+EAwL)Sdv(4F`AXyu>U=Zuw<7rhE%|gjJyXZyr!WreL0=2RoplU8sAKK9lvRK! zJ9KuF)8H6jxB+>wT|UC>X`kqA^d$9-?{YtK(+17 zn*o&}b9cRqvNK9l-g~>#Ohw*=Zhdbl+DX}}E@PL|^s)}}$>T4YA!*%(b4(L?_wIU= zF>%rqXqwFO8M1E5?Gq*MOwf=wt4hh76m`n_X}czx_jtr>^s5u&J;_&Kd3-Z1`ik<( zZm*a6`Xf#=#W&kZ_Ju6A8H`Sp@+x+z`pmEsUpE;)j~(_U{CS(06ezHKftivvCo<8T zi1I*@A^d^aRv-|v7;mROmC+fdudu*B330?pH*A(`TmgK*xy|8^Rk1%C#a?=yXj8sFBR)hx-}KN>C^Ep z0P*!Y#MeoO_Z8;&z%(m8Fh$1xlJLDJo`Ba%3S?M}59aFlHQ$lA5mO%*xD_^F+)S=8 z9X{N5i$79vOIO_eADT3!&cMsfG%}n4(#v0l)uyve7BMxSSHIoO-IcM*_nP9 z>W07PAdjc{HTWOAx`t!*@8P zgI+ily`YZcOWguKHBfGhLpjzyA@-dy-e`0JCjyf&Hzy*UgR~py2Bre9 zn_x6fsx7d_Bb|wK3NQtj3`_>PfG(g3G=T=t0D6Gwz)6@N6VZ2W$WO*RPlG;uFOpt6 z#iHB^pqqlWyuhizbj+nmc<16ry$PNSloz5r4VVU;5J(5QpcwpC2%U;X7jS*^rHK?nJ!agE)E;Vpc)K z*ORfYH}M`X2QkZWh~uXqF73vdARF&EW+2Y)K-^Qzb9$Y`1x~MvSnKq z#}OAhy&htd)0;$G>hx|TE_Zqv*A*+B-VManPA}uVVy)A=j=0|GWgJ-C?DVc7ZgP4V z9~QSjo{F>LyHRBf($I0%WF0q6;Ta3@*dWhXz-%1{&Efe8`5Ds@i(|~W$>;R)xjG$Z zn`9S4;_9qt1QjONC=6{=cxzl?Yrn$CfWjS@6&~gqn!DP-m$G4hy_V0FV|e!!!@IMC zSljmCebjw;k8{7py}>lJDbQv%kk1;P>7bj8^8pQ>)qwdy$i^A4phjWyHid0MVJ^>d zpu3)VoHK(#g@rW=H*Zte9#WQXq3AXjZG^mJ+6YXcjldS#2<+6c&b`zVvA=yf)_Fw7EsqZR zv#d18XMgOX?7va6XP4ZDbMXfk!{=c?bnQaA^E(E<*BUKb^xQa1Naoj z!RH|R)*GN7`u%aFw_yxy(tUhX_c7l)P>;`}J_>(60c`ueAvS6|H=>^Lj$_aXGx|LJ z1NqzNA7GgN0k+XU!0pr<*h0O5?bI6>rQX0VJ_h-%CC~|d`30oI7=w)C9EZ=IME{#uTG|#}Uwenrn>+;TK_fBpFTv} zYv@DZTKW)pm_7u)$Z-XHi8cXWrcJap@3_zNL-#eX$%8#> zvTu?+W93#E=2_^!TF#Sm)>+s-W95fk^vh}V8~cmrE}pR{=WzLEGYdFvYRomA`cHIvr{lak=$~&*hiujb^KLVP ztefEUvTt&;Z-}eTSv& z5ZYxMx1kN%x_ouDv20$oA=^oDdY8`IXwbd_&~yxIi?l_$jUu#Bx2eong*H}}Z!{=x zua97&5%&^J20s#&}N*Ym0uGtJ|52 zc2@V48I@>fMR~Vu=cM-2GulsEZ?87C*navq!@FqSUMZI`;#0%q*6!PD@H33_v~0dp zkiMuE^VnCNlTXTiJp=h%7wQg8!G;`XZhQ}N0H2+rJ!{Zr20v$0h|k%8rutLW2Ipe> z^a3Lt_1n;%XB6fdIf$FFzm83Q*>oZPMA~T!3XF+``38Ob*yPvEAmVG|e92ax zuR_MV`zK#AbA6T8^*Ep9`{v46_vy*+n@KoJr{KI+h%++dG>0e8H4AW-orUw+CVWni zF)t@#9`s+T? zH{k3R!da~a@t5t0zeIc+5&zw6mH4(GZgZ>nvSz$`fZmlew6#B6Mt&*8ds_D z;`+=k}-Ri$|!&XE1SdXtOqh50&h6u2} z$na9XGVD7hv%bXeQqKi<8{#_Fmm6N{TiIiXsjROuyo?Xj-)ji2n@i^zUh2OX`xS$E z_>*V)B`JnH%P&cSA6X86@(jOZq9M=pOD4cBmczbOmcy=e=3$SQdDxM`JoKN$JoNT6 z4}CM4hn`u?L%%7^L$7JfLmv_E<=^mNY3+S?5B_#22<$c$#@v0PhIx;|SaP4(#(b*6 zSbCp`Gw)Rx%fMR?<|iqP`TN8G^O*``S$*O%^HUVYrlDPN4`R-Emj31bix2)X2L3Vz z{=_lh#>&C#MQ(3!r6{n!#ud*obyaJ^WSxIRtn*i(gfIHp5eeBI-d@J>ceukZ2QvSe@0}H)&My3xQ3zk6i?8k#p|;N5 zq4sc3yU_o#yf-F7v98u|Z&-wSBYS%#HNSEf#gUF!S93SMT{_y?Cgd;0;H#1azXlk; zCk1Q=w@NAebA7k$pGywEqqceBrWLizo9c)A@xPj;|Ht9x4o6;gLZkhC-*&Ys0lf|*p^4`=B{Z;x9WgP-8H z^|x_4>bW*)_axg`gSz2Y&F~D;H{d4!mFZ?XMjLwN zd+2RG5)ZrZb!d{8Ht@3Nm;Jr*-KzM?I$-+`2Sa(y$GVE?Y4{p%9xSdG=MOYqku@W-Z09mX_g z5mLN9`D>$7RI&V*zaequw?`ciGyLa9htZ7?nfL<~BSikGKS#kP?O&j=v4{u(Mh5d-?G7r9$mH6B_{ySU!1O!AbQs4!WNixX{h9pcr z1Z&SZ#;EjOM5J8nwc1)=zC}cfRx3hOv`W?2fVVHb%jIHq_1@Lhg1gZd5H@y=W0p)_syr*8wYKmq z9^@QIW=o7c33<}zLn1wyNKE37nMZNIov}SgcOfN^)*v+_;UDXOoiZilKZh{0>2QL0VBwc3W4=hz|$nkpZ(7(`@S`n>}i2R$sdB1`zQlttM9qU zQJG>Hcl5NQ$ZkNg+MxF6$uoiZ1(pa53!E;H{7cVl z6Iiprg#woeyj9>vfn5Sq0>35D5cr=2J}mHYflmO*)5;Wtuls z4j^qondSzKzZZ$t@!bA_j%3e#wi`6^2~6Sh=Tmg}L!?tkPaxfev<|5T$%FJM_&z{7 zhO`F>RqP%7$p?18_z=>EF!C{^bx1y>vuL0jDU9?1jM|4p`-BIHe6j~=Ig$tIB6RIR z0*M*WMLL%tQTZhBF{BYBviTJ79i)$`j83)w*6fQ5v?)VdBW;77opDUU?V_Icu_=jI zccd@b7w=B?#9O*!J9-DP3qkKhS>ox8_q4~+rl_Yi!)4>!ps~J}};@=Xa*P$}~?f6x`=<1$z#4 zA(YAIX9Yj;)TNROQ_&V^#hgXDj%y?Bsd#Jve*7GAG$%=i^WV*W(>$!>Dw2Fp8h3jn zc1H{!4%OhZWabJPOeboWH%flFEMv9ASQ~glpix@`LXPG{T?&t|SV5U&FAwLqsqD!K z?Vc3!q^r(scHCBTxcehr@d5Vp32pxRiZ+*;ZQ{d*_GoI;l#6T|j1R_z0q_uf`1xhK zYmlclX>99K(2-0gm!j9Sp0CkijxXB)8OvYYLZ15=-EK)P<)7nM%BFTiXcFLgc!KO< zAiroWR5VK$#3L^tKHvlK47o|XQu%ev~2C!Mqp zV(g$Q*#bARBBATbjG+7qk|a$)e0?10dbgFNYgL8+xnqg+qL_4V`(_9t38 z;uGy;>;>qteEXKrY5LZ*irS<8U1gIwy^_5>Ep0KhPP-A-*6%Ot@*z)lQmRXFv%ai< zoyne9ck<3STQEU>jgY@=ONyVDu4Bvi0vVnlzwgTSxqWmlAo&T~&G=q=8vG$)@B2bl ztgU2nq3PJ`$;bNp<0z@X<^|o)VP4vgwduuz} zP~I+R)c!!cr=RwF+UMz6Y-LbWj9q03%9~9R{@SqLXRyPl8zCp~$Ifz5SBDLEM-H{d zSPm@!8_Nj+B$i`-MC6cSndOkvGgwX?z`=6t@L49yp&i=E+*vG#)Vg@Zlx&t~HR5J@ zArR=v#kNYF$Kzpn2G7uOCD%v$ty%W7JnKdjWI2>AWS$I@R>Y4tXansVPHKQ$o@q=X z`<%vlSZlyQOI{|j;WV-#;YQ;gell7IW`oW&qe#X&e1K9Zi;}Sps(Hz^ zIi03aFJyMeI@vl5m;uZ(f-D2=WT9`FScx`fzed7o*g&NlrNLxKWYAx5x{Q({e8>br zT@tY?yOOG zVN^C;qt{BwrW8#O*kR2lTDh=?+dFYi5!(i|&!B0C$8PXhizRPk*6hL@V6tJ25^3jU zMh}c1wT()n_EFg&O;`2+>kiyF??b}W&kVjCu~f+`SgJHBu~do6&T{BLC|_Pf4wj3> znK5oj1|)38Bx06~NuONpiW-4H%PulG!rW)7ujd^>&5^67kUG6Je+g zpSbwY?hhqi3KgUrw=pk>=xrrW`xzRNz z5H9C`UD$KXQkcy|&U}dKfmD!%P*KdntP*#B+ExGZv+9cY(To@W<5FvOR#E(jM;%&t zWT3@5E49?M(5FZX{}gHIY>S}FBoI0 z&YIDlzG(Sk$!2S&ot_>$yJWU$7Fn~v(MB_~9LuVi&B91DV}xj2O#3aqtC6M+JrjnMRE3wZkvSwQ6^oaH( zWd9mDOWx|=>i<5_LF4t;wkO=gZiO7R_qRUO7A0&I=5rMu69a4^=LILZ`4P}UKy^j* zrd78wcF*zH)(*_-$nEh|PrSSTp^sSpQ;}F#U#g|O7fZGBKqQvx>fd+o@kp$FU@+F* z5^Had_xB&ceYK;dx2Jmt2pt_MRJGt*(H=k8)!o|`>pm3e?d-%Qo*jtv<1FrcDl!!7 z9*no#p6uy(+GG*e_rF)O^Z%M=&tKF$^5;7p{EG@+igcxV2m27_=-P^P+|rrc9`9%& zPq7#HP{8TqMBHY&dYsQ+Q%~%nBa!Y{PuF0qD}MNvzIe~V<)MYoj#sq|#Z&#*B=$<| z#mLs!_Lk1>*g(r2y{X$p^U%EE%nt+)FZ%f2ErBe!?F7#ZwI(v5-J({kA* zwjV_X`{VsB9XsHeWIMLdSo`g-VG56%_^ypTYZfOO`Ap=F*igJP)r%3O!D)V4EUp0z zXMEr#l)Bn`Y5|n6>S}AdI=9cB*7Bmek)P@2~RUN)g@H7dF{gYzWLiTf21wL`dpyKiFU>F6}kPZ`ar|*U18qeQV3bh zIOl%ZL*JE5wmrjRuugGK`7+-BSL!9U_Y7mk|F>y`b%*X@QuzLEXE>V~r`NRL z^E_@&vKLrp&ytz3@k1}uB{ss*!FFTD-y42+6pvq&b)bT7#O z{Uie{BpG1ogKTldaCcwWNK1FKK}e;uR(vVVGx_gyp1e5O`wj?y$zDz4) zUyM~Qa!B_rSs9k1JqZJSwB53Di#_^5!iY+V5q2^>+x~*aLdpqN=Rc8V-#yLPpI%F| zM@}=FoRPNeJxx19TJq^=Z9!V{6HcCOU#!ozN0AmFH6zVOnu|0CX%^BANHdWdkm`^k zNHs{+NR>zxNMWQhq!3amQZZ5?QV{99HrxI_(tAknAe}>c3+YXyvs$`uR2#+SbVuH< zGjp5wT#)R{nO-dOzDwxytPF=V5A}AcmmLWM=ee(;oPo08a3v(i#f07QA-;Cqb^cZC zYTp-6$Y)aC?M~e7$gQ4_vJ>TDho?F-XZTxlP?k~tIxq`p z$j*c$|2$!r|63xx+_Y!J;jOmka1k&YIDj^9 zLLT89=VBnfJ8~`s<^h)gbAkQfxfyu{`DH+SujX6<%m*$9dVwkM+=6@o@+*Ns;H|&_ za23!G+y(*pNR-*yK+WPsq9Ok0;TJdCvWWL$@J+2HNiuGzX%nw|r~JzeoKaO@DH} zKcW0Z!sd{ZhQpDhHS1yz$qu(*Su(!`|P7zsdghn8R+9Y`H9HeIo62C+UMV?aJjS_xUu(Hd%9T3u&*i2TrFy@g(s9&eETFlLo%b zFYG&|Ik!1A*S2D;ZRh#TwqyqF8D(P60P;Np$oC9jsV};w;TS6zQ=$?(B^8YMfyUys zv!32kJZ3DG*ee_n3BaCH&Ga(bbAT1_>KWR1kgw+XJsUqf#`Fla2W%jI;C|u<9=7_* zFE3fl%e0<(dHFJ4eu9Dp#J_4KFOSkWh{|hL^YSGge?@uSS~ha;V;661o{v2ZZDa4G zw%wy{Bge=Y-pqZvl&T|Nth&+=uOqwCA5hXvnl32NA`FdX7aia&Uds|@w)v7d0jK^ zzUdFD6HnlvLVeug529R?xHOOIXC_ARG6L;CT;}jmM*9Ng^N$^8wEijYJMkQ&bxwKZ z}C2JyUxhOQ!7dO*FvTn-HmLv}_D0JM8_Iy+Z zPmmCF($#}@i>VAfRNe}E^ii{YZ>=O#8{Q_bO!~d^%4E{*UDP0x?uyz4GRamnrDW1w zF>kd@x+@m7;WHdI)SL3Y*`~ZtHRXLv8)UcVlZ#{%>8Y$=z{}J&>8qTb;$^ap^j4~? zd71i8`YV^V@iO^^^l*Q`2h=9nOg^ye)?YJyL$*`DzAF2D!7J^j@G@KG^NE#(~PPGpN5Rd{~8P z!TmbS{l|S=zZW0f#+mBoix==7Qm|TCqjA4BHSl)PFFw~M&WAGaW`egIm<=pbqM9|< z<;r5M0`+*OCO8e~0$SrnW+^iH)yqiN-Ywo){2!`T8T18n-Qqd>H-mMGWd(ZpFcJ1 z4HEQV0DQq25kL7J=K}b0wN80_>4E$j{Rrqs;g5sRRZzcK zW=y--udo2kodDzl)2s1S59)jq>Z&Sv-N1GD2Cl<5cpbh$@R8mj#avUoEunXabYPtY zsejY4C)NjXdWyau2uh6XDj>gA-C)}4XTF@qLRltyp-J~akFQqP=wk}WDCmbG^rP)- z>d+>y3qZG06)|-mWWMYfe&nGWFP@Peu6sq5+5hY4`E$Byyp*bHQ+FeM9Ra_3nc}MT z$<$x2yQ`9a&TxA%kBJ99y~f@F$c^_)@LjL%LGW=u`&c8jF;VXj>7aIDS0nZaPgRKT zWi&69sf$fJ^O<+jbn`R9i*~%zgiT(SPwnSpP0)IyHqh2Jb!fw^gU zFX|5mR_O-=%k=|+WqN5>LJiP9(ABDjx;Cg&y4I-G^ERqY^VX_|=B-wb&0DGFgMK`) zQ9l_-=qCcLdf~hwHAwr;ygs#f-WIiFUYlCc)U8fy>QF12Hmg-l>r@};F9f>vrvn?X z=9cI)nhdqB=`OXtX}j9clu`>oKOMMBKN?u0zZ@9S%bM;~%bNz&a8r*uwW(88Kz}80 zr~Xu6t^Q)5PoLg&pIXy2qSiJItC1#6EyNjeBhKZ%nadlF1Xk;G-ZgGmIZK%tZFoMg zMU)rM^3Pn;a44`+l-KgRe<9P)^7Apy%E%)$hch_N-8jedb2qTmq9c#n5$NEppz}E8 zapoRByQ7}Y?#~9=^wEH!KNslGp9yT%PX)H?#{%p0mjWsM^}v1lPXYt_Yk?8{$AKRG z)xfa+qd=#ACZOqu)m8d&b))`*`lxj#tA0RTra!I1hw2jj zsJd5wSsl`!QupaEst@Z&)Yba)>LdCgb*28SiuP5sucCbw?W>RJ$JFoZFR4%Hud8TZ z-LJo<9@KxV9@bw~kLo{CkLhRB>x+`e|iYA5-qq>8$>i(x)F(w&*96 zlzu>2t3Qo>alf)$e;fPh%gTU$PU+EqrVQyvlnwejwEtp1eir-dr~(_5JN0LjR{cF? zqy8_-D*b(Bv;Mj=qMuhZ{ep6z{(;h||5v3=|2g*Ee^okkRyP0Q9VZ#v$>v|&{sO)h zvH?%wI}<|O>_Sxkyh%5HY|;(9bW3!M20|yGKV{N~pEl{kCrtYAj~Htu`azREa>%5Q z;3h@#BS&zDLHj#!V{&GJ?+4Cf#_|q#LiB?caISqz@l6 z>BGlO`tY-6`*-d)=_3bB`p7dTedIaZ8{lt>vCz5yn`hr->Cbm24cvvSd&F6~(|o=$ zG3v(qvc8>nS$BsB?kRL{-e_CO4BsZ^+T@d5YKInKY|KD#A$yZw%2qqI&-_Vd)@9>e z^dDYmNJ^4>Q&2MN^4UM%?u+JZDwO^ia-Si<;0kQi+^SDI3*N???9!9p4n(s9o3(6C z&t^}e-W8CfA1*40x&y6RjvCZ*I4z$Aig)7cR(v*;O6-T=a~Da{6ARm;^?^3c-TaFS z5q!qx0A~Pmfpx$8*nUXJPZ9EELcUzc(-`D# zDwcB9E#qU5x2aU(pVJ|U<*AkWXa4CnYb^NZbD6{*hM$_I+a=GY(D;~qr?w z9Wf@ku*IVmYu^R$zG-%8?~KXOJopB06JX4;*bBJmr$Kr`#Nmu;|ZJ(Vq&@pJ}2$57usq?w(@Aba(A$U;6t$UB65rjTz)wz?W` zYImhSKbxTVjw{gNau;=?>`OG`1d#sRpP+b8`tx97v;@D0n7+xCJ2~OcNzld1r8_5a40*g9r#xa}2ekwK$)x8V>}sS3SWbF? zVbTMfO6~1nEKd9=R}lZbj7=kcV5R=vt~1%}-^Q|)HoUv?Z(}(nZP*(*Er)b~C$}B- zMNMr?Key{l8}gGUw_*S0v^?U09}4w1cb%yLtzt?W_EKKwVP@M!M4Jv;nd~h_J_KFV2KaKxCbG8#^&JaMe!54xl?M6wKv1W%XAx+* z@F(?=+9z4^3Ef5AZ!D0194OTHO>1!xZy|U+&`);IxX|6!y*?#B6R5;lq#EbE8lBFM zQ@}@kqV|ce)zqCw{m}3;hF}q&JG<#_?!IkUrZVh&&{@cRvxnkFAz_ynaZw*)r=z%= zzJ@#FtGL^}j(Z&So$k*a%3j&O&8K;rpTnKm<_vBNYMsa5JX6!p{qTK`#ajPK3t-giW2O$oHUXsI_>8JsH*KJae`it@|8hgk;V9nFL z2JqUd# z0>wB7mg+o?aBGU6{dbZ6f_8Q^5W@MfOs6sTuUIV~4}|q+0~K`7)p?9!#jyNTV7c~m zV5QcII1KtyNqxuIK1y@IzjT32V~n;RBO6iwJ+c}2xO?>cw`iRGh|TSX{|~_bG?%`I zwjaF_eFM$Av<&heldr-=dla7g&c3dnwceGQLg`sN|tNcFX>l#eOKBNbw|!2~sSOVuBPmq}V0J%ccV<_ErO=SY0iUVtH-AVqiOv zVs;%siuc8V6c6kKQv9h4NHMMbK#E%)08)JOAduovhkz8@It-+k^#C?_`*OF(H;TXDr7?muH=m&P19=j^scKFxKXu^YFt%53(tF`II(JX`S% zWpBAO_L=*fJzEL7a;Ux_63$VALpG7mmM)ED=7GMbP_waLLaqT*=%XE9gFNZV$~SGwgs#kjYWxiFqp?ir&s1_Xr?ATjyPTxU zd(Q40x2ufX#d(x6u1m@=?Q%kw6LvYF%L)BX#iL~jyRu+c7U`1D*|Wy&s^E5U9;Jfo zvS*rhWkFXK?2@1>3;H<^e3b>8xE=@U#%-$LHciwcXPGu}J+R46dZ7Cndz^pXo{a1( z?U6|jbYEkS>&xx2Y{(#4=(8za%mv>Vy|M1O+t@8De$B1~HAyMd=sW3Iw%Ke1@1)?W zZQ$kjnOU~W@0l2qG?#ejT@&2g&ojJh;#iasWp^h&WRlJ@7a~7w=AA0?_n7&tuV+L< zhM9NFL*C;58uAwZY~(He8#AKK7Jn1+7Jno17JohR7XOTlXsg9vi@e1@JtLZ-__S6_ zrYa+vwi&1C9owv%vZAd*p7#lx4C+rX(j(*Kz?==)=N{x$S@IcQ2x;CFZ76NHdip> zEg$~u6Zr36qy;$z_J7lR%Pi8M(a*RNDpEM0h| zC;z?@`9Bj07bf$uG6JpNi&$i9epqFar8#GbS@Y1sC4!Nr7qx}+41cWoi5M}%&)$12 zd21e87#92%-I5p83?WiJ$1S=wZ!HX6C2!ep;bhS5NS3^{PAs(6iBQA)VC4xB5a4x| zy!D>Fh0Vk?;c1?br|b+Q^2_*gvm7HjI{rH*Vy1_fCp>u7i_20U=&{z9^}C}!vwD0V zu>6Ok7k}pCFV$J{b*s(#x&{;9M`U>7b5-+f1&CBvH<5|TLZ1G=fr*bLZ{b=H$9*?} zag~s76?J3=@mcm;ZrY4G%XY!a;e?R4`ft&!cCB&(nd`}i8cmMJEk=P?%Tx8Q@l!#v zixRB|>;H$beyx~`Fn|oI`Rhdd-y=8Mq*8k=IO)0if2%_1Wc;DuAddgvRk&?m^WRok zoL8&7@&}C9sQhbx&PYvKzhJbm*=shs>Sl+dMzmkctlnH6O>0!&6gpF literal 0 HcmV?d00001 diff --git a/attention/vmfb/attention_B1_H32_SQ1024_SKV2048_DH128_f16.vmfb b/attention/vmfb/attention_B1_H32_SQ1024_SKV2048_DH128_f16.vmfb new file mode 100644 index 0000000000000000000000000000000000000000..8d40211a6f9d88776f00f08e449fc68a6ae5a332 GIT binary patch literal 30100 zcmeHweRx#mnfEhi&J2^u2Sdor1Pm|K4i83;+71SD2Z zM!=6!L`1aKTANZ!QK?03eOtE+skp7Rc3ZI5uI=UJ>-u*0?c29@UF&umceigCvLMPA$EbE@-lE!&NSRYlb4xB_B(bVPUAj-JBqs(_a@xJ;%D?>g@wV>?hWk3;Q2IlWN*_6pw`@;C zntA$%xJY56!c7W&ADFT;k!N3-vU7uj!+o8|ifY_e8*Go)bQ6S6;T(mz3KuG*e|b>` zuX_2f5X%&{D_pCPI`NVX1N&r7h+&0?6h5f%xWX?eJgx9Wg)b}ob0BSaRpE~n{v4>` z{u_l(5HX*jFh^mD!lgit%U*?dC_Dz_*n3Igs|tS(#Q)+~3MriVEQMtXmnvMXaHGO* zg{KvsQ}}&_Zz=qR!jBcshLUWj1jxSM3go=}_#Y-FwgQvX?f!6LVg=H)iFC7(uT}Ye z-~!}1Zdl)hy9RlVC+7XQ+mYv(;ke*jO5F zdfXn|uc6^%xL4rz;C>6T*iWbuQOKgqR@}^g1Na2)L%6B)cYtr;{x$P3s{Xg8EpF6h z@7q(nWADzLp$PO)n( z4ebwg?i~v5=naXps*ZD6)^&yUg~9ZiDxZC&e6TYT9vJG6bPR@uF1PxDqNDF5e`o)m zJ;A=N4yCx~Bhwy_Rd1Ge>^OK4&ENbL&N=#S9r3JCNG8)+m(&dFIRZ1mV{^oZ2)zoU$6K$ zCQ2f>l*V4<$$O-KvU(THv-k1?3#0#Jgpq})vDqhpy;U=gpM+oap{;N!d zE3OxRh>_*_C({R92hn#B74G1({2C=Ie!3KQg$D~qq^XA*9}x(U4xE9qEBwV)(_#zgt+fr03}Nj}BdVOwGL~EWwqr^@pPirFZ=F$f z(r^3Bej8I|l)<%zGv}wO%v>+I0GadYW0Y?P9j_xn6Ei$T+=2WiRmb*+LVbf=@43$N+F>P7l8xPG5AwH~RruG2_1+;~L)jrZ zL0)!|hO#wSaEDXbnh>d+05*|o`Y<(soL!{yNui5W%6EuV`rav0O90bQ2-mqpDi`V` zk>VDql%6aLvQxx#tF1IKJ%9>c9;~kPDXw%eJt`ACnM{|v7i4`REt4y-Sv6ZO#!^m} zm~I`T=89A%Q-#N2k_Aj|4pe8X{0*$7+|+lnow6<=H{wlSNq zU6w>TcQh-3ByCDb8YF3#C4p|tJ!VPTgr13_?~|gm1CBuVF+VZE5s@nF;7t;n(2G&n zkQALO9Ml9|>%tS?ChU_qTu~cpH|gZi!Qq6(l zPjgl$!I#uBc1)3Mi@?8-#B11NkII3It+-8CBMjp}=uxYu*n-SU4ouE5+n6?HAJe0h z7H{ z3HInFxHt-4TNGMEHTX3}tfP@xZv4aE*^K3x6!eBJ(m?4zxrP$<5IE((RD<%h=;rh* z^cZ21-Wegv%4Ov+C!Sds<;o=V=w_}RS7sr5 z)HVkHjfpX~BBDv;lzd}b&?mR(qFwa$_k{xeI|D;Kp}>_LV_*lK$ats^2Eu)^$_%Ik zf{{>QaPPoCe`F}s71%K>>mqymhQfQ~K96SbqBpp&;-$lHPLy-)Ns<4$vGSO?Tv3jc zd9l_5u1pa?L6*oB1&A4Nx&7m>HF5E$dCNy@t&v*D_>+uUbjZj;hqb5bDCywSrb9k$ zI(F_ThUu5%Q`Ym#LRzO~cLq#ixR{xS8xOlQ$6@jO6|69*lh|5BB zu)HV^DyY#2q$7DLtiQ?3S{TbmUF&aA^`DBz0W&LOgfgkx(~$XN_$+?QzIA^))W!b# zW7|`15^KT7_Wr#W+u|*#Ft1PGS=GT7N?MT7&7VVE0NAjydD)r`LL7W9xTg!Fx_Eae z(iiF-eCQo9^V#BH_dukhvmaAde5E)T=^i|B&vV7W&Y``*-i}~rXJ~NnX`E}jI{N#1 zhf&eh6+ux4jvt+&Q{BD&JA%DmE$-jB6Ni294`R>mdbW69uy=2$V|Tc(>uV;7I_CdJ zCA7k- zZ%!&FdEn{d-e6z%-e7m=^y-07U(<>})AN^$I`)MkgIFYvYvNnQdxHBrcJ>B`I&SZe z>{iV~!jEj|qrTvt(9f3ri58nbD;|i1_aW?Y*@77JzEK2}O!wGLLTHc8q5Gq{3T>#5=-y>)Y+m>*N# z9B$U_w;9v8Wbh{4Rong(IsH%dKtty#EB^fuuvp}l$jZdy5@hGu&WID(UAgez{|}cY zj-MAI`d{`=7SVI=FD4%oU$h+)_Z>aze(1*>f2Kx`BP{CA^h!_y%0YgzeZl?mtSR zcfP$J6DXk2qfjU;xm(pM^e7YxOAe@dg&u`MVaY*Nuh64VC@eXo>J@qv3WX*2sCtDS zg+gJ;y{cZJN1;$ya-XVK=us#XmfWxE6?zm3g(aU>^$I--g~F1) zqfjU;Iil(ndK3zUB@d{2g&u`MVaZWduh64VC@gtU)hqNU6bf;Mx#YGrFpzVWW5KD7 z$gx1=SRjgwlrj+zXE_(6zO*Wl;VGN2MbBaJ#>KMqsuU^5CS*BIgyPtpZ@a)tnJG#p zkur%KKa?HEhZieT(qlYLqQ_xuN_vd1N%RQRO-YaOHi;gA(JARM{wC2Q*gqvb#^WS< zJP)U&$M~E?j~DJ!(qp_%qQ}E?N_vdnN%RQRPf3sQJc%Ch#VP4Az9-S+h4z&681Iwl z=O&=X_@6{SF9AK~Lp=S7a~RW8>x210dUJlPHOF>M}QpfCcT;mISJ@7 z{wLATPe70HKZ!m!0X@e5B>KDr^ceq>=&|u)e_hpHjQ>gW*CwFH_@6{ykboZJe-eFR z0(y-9N%RX6&|~~hqFAveLcbY=|Hkv7{wmLh(kY$~W&gqF!(vn4t3FSz_IyAvYs&TJYR`v?1oT&X zK2#>4zuNQR`ULb>dp=YppugJl0UrpO(%!2*A8HcNU+wvDLjwA%Js)Zl&|mHOP?v!I zYR?B8dZx7ZYR`uo6VOk3K45=?1L~CW)p`@Re`!xZuhyG5`sE4e)p`?0zajy>T5sa$ zS0rEUz;`CG6tJa%1dYt2@q*v=r9DVE5^l@~{upPy7Cw87&?Qq}Dbt#U1X##rn z+=-)aNkFfjYjO0=3Fy^xGmgF~0lj)I$I&+?pjXfRIC^f^r}B^5SH#iRC!kmRmMip+ zofB&k(5rnB&kt9g4?!W;WS-5$xj<~6rOpZIRqV5??Hy*}JTYN={G3>8Js;B4`5}yb z7RuL|&j<2a{m%W?C(jR8#)0BPe0@s#I6o@-^$Fo$AlzhCun36tjJyY~s6VS)4 zXNn&0d8U*fx1K3_d|+Zq`ndH>(RU=Ek6X_a{q_X(YJMOVhx4_f$26fn^fSjZ(W8*@ z7LNBg`W*@A)%iJ&zB2*6+8@QyBP2PcK5BmyM;}T+ul7fA^g9#KtNl?NeRl$SwLiK{ zF9P`!2msGu+$(98HkBO*1D@Rba?*2MGc(Ki?4XYsvq+si=VDYmZKJ#tTN~D$8nk{si=DKNUwmkbqu2SIqM>HeLhiXVWvX%;&^yCLjI%$#ZwqH@C{}W8!K&j6JarV-KpiEp0}_s#ww zcS;`2qe(os%Xa{mT(-Y)Ov#7&6w9|nJb3ADe4u+uddwZtbH3+fu3gc! zK^)9Eo7;|dUA9uuDD_x7N$>XOA1g3*O>!)^KW;3QbelynaD_by@04iAEKBd%)H`2{ z%q13!k(^`Vg#wQnKaBOV{pnhovEaoN=ns8UG<>YZb;$`GRy{vjFkw4#PTV2HYWqo} z8RcuxMj6nJ`U%^Ca{}-5>rL7DQ4<%it!6ReY^5BLJM8=h= zizz$Fl#LH+Oi7P*VG{ja3FxsdOrkdu&|_VgL=QFBN!yd~@eu8-TU@x9>L}4KihsT6 zw%g=deO24AW>D6|$*+Xbv0}aS%ec4KlrPRegalTO{|$X`OTgv_KX`PojDfQ zixIa#{YEjegxD%Z8YfOZ-4n$;XMU*|S(;Iz$(Z*#w0Y-)N6rh|6K`Eg&k&zd=`B8d zY6pI2J^fGQzSq<-uZMq7bGxEVpPeQ4sr34}0dXM5mAfKIFKAqZ~!rS%+hdlno;-iiD%mtHXHPFdiZe&DVN;q)AW zyC-yAqGN_fI9Z;P=HcItJOrNkW-;A6l=z!CJv7m&UV=_i22z%K$zflmTUfPW550^YIu$oW4*dNI;31IvKl z237#S1uO^d2hIOL`Ua$50@eV(39JKt16T`u5qLfD1z;ucd0;j0EU*e_7k{|8X_`~h zYH%a^ib1w;V@5ew5XxB7jY(hIbp=FLt zOyK{M-wsPY=S$(J>*a7X<(crIzz4Z5=h?8!^<3DMaylH%I1_edoC+WC9L_u7zCZ5` z$eIRO=P+iS!lsV_b>Mf!!E+Ph&^aU>!}gDiVf*ilBlg)N6Hk6Y+Bfm!=cT=4qn`~= zj6M?H4kaf>9}Y()J`^66_+WTU;sfD#fkVpnx0fP_fOf|4Y|9jSSq9SQkcP$QqnfiS zU1XL`ywrd{Dgc=*n_ZPz5GWJJw!W>2ku1)Apewo{rz*XmM3$$B5uN2g5nWJLMOu#- zNg+SWk%p&{MtPT@$^ z$@;BC)UP0-zLtpk0_wM}=%C|>{m{q*_IpRPF)g}=Wy7DEW{=wOu%b_Gg8exL9QmPX z)B3`L4$`gP+vK2(jTHwSUBG(S%JPl3H96KZ58GJYSoE-?o;ZAyW90QC=ULWVXqGka zwM*Wm6%RXlP+kHVq+NQO-OLcGX^=!?1 z*g?9SiWjA=TS^Z)M*hNVzbfy`(yrD$c1M6Tx4o#-w)WD89V4%r@^kYb|AHxhYxO~C zV@;{a*B&xquZMDg_B4l^iG4_JqR%5%j-JoBp z_FT}ZLw@+6-sxRsb~sQ=^ZdCA)_L!iE@9B!9H0Pv^y&Ny9^t6c6skNs!?CnkG&%5YQh)v z>-~L3gLlZN_wF;OOF`(MzQeo52z#SOkN1GVHW$>r=qLnV0sa{CTK_7ez`w@enAxxd#};&ebnglJ|^k6gqs{KkkfphCYt>B8qNOu zCH<1%1-;RGr_qSIhPyRU?~fV{{sTs?c=KZJ+9&mPl(#*kiB|tHqs@QZEZ==eUy1S+ zpVh>2|D(nV|6^wPZSUyRZEL8>A^8t#CVo22#D{ZC{9Lh|54Q%Ju>Kft{Y9?GEA{R$ zO1#^p9~J};>WjTQrEP1y>y0(ujmAyhEyg#)BKI2A|FZq-v=6jbK zIo@WY&VPro#D6FDy`z^(IyF)1hhF~evfU%_NnTr-bK!e4>}kxjd^n;L!D4fUqos_X&KXE#(jkHD@6VAuS{2j9$Z(y-V^&(DW1u0_5Q`5a&& zun^b?T-dPD$U}NjgVvf4tVY=)U<>OozOMyuG4d;s&jz*w3xKttC+`BJmm-}Dybf3b zypeU77lq(0MSdCbWx&!#6oYckqz2$U!#$Y{QQQc2J5pM8jbnh z{gUolN!MrOfiBx?NZPzfw09T_G5-prtffXF>a#J2D7S$8kV)AE=!5cM^bO=M^hS&Y zpyynz_3uY}cbaWu-jQzs_!fY^0%Kz#=4e35t~UZG=bYv^q1-@2y-_~gqnR=>k1_9Z z(C^vaL$Z$j5Ww8eM;U3&{9$8JT>c2gXl(saBR4L83}Z01{vCMzeSc?2=|C7cl;Ptp^YcATl z5$R>D!!74cxu{^9Qve+2E0$~j%W+oXLJv?UGOjnal4Sc9-m zV=d(R%JncC`PMJt+0f8xa2;IZA2rJApMUd?AU1)Rmz2RZvn>3PR&{rmHXrnDUk1JR zDI>pOg;I$}U{#A1wZb$wm|0!b~@CMT0Ud}Sy(jR4_+*)U;cUjmh ze--82JJ(^aJsQ+pHv+!|K>BF6xs|olSpvAX1^gE6F>K2rr1nn~5mw|UpKXSee z>H9&u9QbMAO5jtdTMhgQa4qm&l-~rr54Zt%3gtHgzY5$8JcROFfcF5m0Z*g61Nb!X zQ)nZI^a0d$0uKU1z-Lg`4SW`O2WY}bM^U#McsFnl@C@qufnNg-gC>f!fw~dk2=H#; zbErEA{5o(yXzoG!PSo88ybCDA{J z=HZjZYK%epuM}mAJJYex-v8E*g($m!hU6&5?YSp7|z!X0F8R$9>NkH$%?2?-^qQb%0*w;H?a&iw^&H zq^t_$uitIT`jHTo_m@fDs$+{y8IP4qtlsAT7Ut7AqeIE51Ygx2+V`@tjb*U!dX!c7 zrwjV$4eqbuA7C~81FY%xzhQ*@uR+dV8r@Q_*Nu?ktp;z+V7dsHKCY=Zv9{m;wz0?m z7I@w<`bmpDUKQKkn=a@-%BBB+H_(5;CF8!I8+$+-_5U7x9~)7m5Bl{H>UaZqm)vf) zgFe71QT9ds-F`7L?sJYD1nsy_8@XGxRYSe*f=%!-Wz)yNM*0}oyd3j&-1n%l9P~GF z&SH&VJD&z$^F3xe=%Yrq18g4moic8cZJadL0&nqu!=O#~Q!mid|7?f;XFK#iaOr0M zS+w(#af{@A!PpG!^uH?G`V4rNsQq#b5I|CO3_SH(RRw>S*&Vpx?|jT+-OsJJ)>le`z{$_<-=!V2>WZmO;$+_`$B_|r=uOBFX0j0lyQm1D&tb>hdBljsAU%9N8d*mLa*M%5)md_}U zKBGMPjPkZZuUFPav8z}Yu$vX@ zqYn7bN@f%GrnTTJS^J^hfW7dz?_Q%x(j71wfUGOq@FC8rhtJ=Ry^?$vkTq9Ke4|>% z5(`lOyA7IipQ_7pA@2IZ3|Y5VmAQ1MlvBR>Lw({~NwRK8)#*YLgDQP7B~3(B`sbc> zahpp2EW;-TRQm1A*SnKqN}-8Pf&mu)8B2W=+b@7oUOHzMA(1o5sf;f%o8 zRvq%SD*knN8q= zvMO&uc{9ps_peswI8Lha#V9XBIb%Z~u55ICT9ucgyaeR|lz+VPfPTL!UybrrC}+&h zipwx=^A%OU67?&{hj_MBupC-RKL+^5PbP+pGmdsY5s z{Ceb1sr(Jd*C2n7%2y*_h5R9v??C=mWAnL6vVnz8?7lD&LL# zPUN3e`4IA5$Umd<%aLzK{%)0TL%tRHsLJ;v--rCyRDKWgy~v+Y`J0emhx~}juSI?h z@`lPUM1BGCUsw4;pJqz;U=9ianckhn#}6?vMy`yOv$?dG~}IK zXUfdjW0&=FZ=0##?Gi83uXc?0ByWM?@-8swE6OY1+a&e%h3$H>cah=t78`6cuxF-} zS9zORpBb{_t0|-B)6swUb2gFTFEG6R1(G%=JX4>Ea(|H~eEvm--(PGn-cEh0_RQD4 zg$2G0#1S*D+alMv0{DP)o9_qcldQtUQis_=Q|H`}*>+8sHb&3eya7Xaa}2w;OvaQK z6kX6YZ@H0)HfLmO!s8FfwW7Gl?wH}vF|I-R?8TaxY5*%sWbl1 zKB^6&->C4-N%9>&IE#J9^Z#~ZvUSclS#Ip9s3hj#&puQwvTPCC4=(5L(78fpG48T(7Z zcb~ZY9wW)0ZZJNWtK!#uN8&_GeVYGP*nn{}t5UalHH-m)nCd3P;J3)~lsQXuyVnU@ zb;AX^l$klOfAmuRa!v5vO1^)EEO)gX)n{a9`W&c>ea}H2SI5inKX@y4>NdpL1>)_p z{FWEY@*D5a?TF87{vEIZ?-KC!J(9lZfLXutQ4{elLzZ{HZer&v7}KCn5vfkJI}P6y z!~RX0ndX}|Bh8GlOPFKJe~S%&X-N&~&HoAiP@PA_u`_*6r=HVx%iFKyD^ zN~aC|kc8NG`gE<;4x9;0!rYvRbPm!^pc9w^yk>^hn$b{TOh-Bs>11Fs&<%709Y6{^z29H77=@_?qgUj$> zT)MnH(8pt>gI33ThUq9z<#+{MvOgcZ=|&QGr$bH}#`;XD8~lm)3=Yy^o@wAke8;dW zx^Z8?@K6WPj{AH@GSUKZ;v+U~)3k;(BdH-BKH6cVVBNAeI3a7m@JRW6pwBYWK|k)x zG*TqG4F@o}!G}8C&?pOjx4}QtFg}tnADx(gy4M9;xn5GIdRsqD<-PqUbc#oHZnB_FY@skmkcH&HsjdvXL z5ofm{?kO7V9y_tg?r{)X>>ej^ncbrk+w7ic#N~F6i@4J6Ng}Scdo~f*+C7Zxiks}7 zjl>Oh597V!X1ixSakJgSIIy_I?pa6NX7?~YEIJ_1jI-ih? zfM+aVwu*!1@ce}Q{CSAQG3MOnwR`wnorklH+kud{dDhbcCc5iQEZ%P7tx*%ZMokQj znYi;^6AyC@&0VYEtJ$!>zKPG3V|e!!!Mn3VSljmDebl{pk8{7ly}?|xDbQv%kk1;P z>7bj8^8q!U)qwc{$i^A4px(re?Iv~$6LWc%1KqXEw)LZCdV zx%XIzw0xfoOh*55JugIh+qX5GDc`?%ONZ$f#2(!$W-9%H{B}oHEA#vRq>s>*bnq9qO)wZ;FBLZ5qDo410&7T@Km^ zd2ZSWOs0*%PTC0UQ?btd)DyA4VHN83N4oF(8omP?KKZWcr~OFp|8q@D!#jlS&}TvQF2n-Q8PgyywPCg~8}p*1TNApn zhwFMO-mmhRIt<<;zct$`E{Zs~C#=M~M*0nUy6HDyvWka3M86^bAngSnSFz29X)p38 zXfN=QBJ99q-oPH} z4GdFn;FlhQ{H{{ygueU&(m{+t#&M3rXHOvi#cI@H?tT&JPK@E3@y>(wCrTq22d~KY zUr(a0yAE{lE#GJKG}y%s&^%flkufp8&-fDjZ0!&5{>QMvj*YOLV`(GO+$Ya1()1Y^ zuT^-5?E#kU=66Wqz4Zg8PLCJeA;-)2@zGk27vRkTKA^9W-cDZwgY*fon?3>d&?msB z=@Z~rIX?K_Wc$}O!S^N`e`Lyk0yfbGz8~qqc;)+%V4EH91;>n?(CnB|U>AHB6872!->>XkYnL=n!LFO+ zyQ){@yD@(5hW4C-J^Y*vKTE)O^6QlT>!3ejr5fU6?_Ydjn_X~!$9#|-VAxh%B|M)GthsnoG0guGq8bl z+pD+ee22<+ffe|iKp8$`!m*Z9p&{-{fZRlIPNZzY26U@-r?0 zl;_NfV8BPulP7;p1m~sb`BMMOMk#q6c27BMVBI3fTg0+dv_+h5wwa5%1(0pEUBtR1 zyN7ZXskZo;lGaDcwPh9M8tDsW9oJhb)@YgD!%}uJ+GQKN&<1T?xwckYQCF+Uc9QL$ z<#n4h+E)OY-k7#XTcp}3LK}^n%e6IVV|B$Qjq>&@xkr@T=FPQQlO=bW-BVJxUCLbq z+M_XYXW_FvrXNgS@pC1MgXLN!WS3POlCqCOb|r1K(N>%>8$}b_Jb|`uyj$sRw|kb< z^~g3D8+bIPjc)Iqhz%MT?`9j7Xrnq@uGOK9+KL|8#^Y#%pVw#`*F5~ZAmu*+`8R}X zwHnw_!@7Uf%>J0rJQZ~j*%o8GPsX%GKh>yqYS7Nw!E&t%?X0R8knNmQetJszY1?hJ z+E&X?|EzhI*6o*a86!RwBe!9AzsAon)+yP1ryzY%E9%%+eX~x=etib=xh^!`$6ukq z=lSp*$$orxiuSBSo9Xjm9`_!DX8-dLc`EX>#FQ`--Gun>7NgX= z6>*zejm0>Zm*L#G0cY&>I4|Gq-H&+n9YzJtz2!IuUysk8R^nV+jnA=F;Y@l1K0{iA z&#C$F`LpTxJZKuuj%mBzz4&47>vmg`c$urzbn(NBDc8I{fBH4E_oZDk*X?6|UQMp= znz{Q@RGPFP#k1l)&@RzaVb{!SVOL8QY<%Zp3T&KCx%pS*rh_+i&g=8j=Va}hJ||bo zP0d@9>zk9iFO_vjTXIt&H+4?Cp5i?r<)uP)3O=W5!?Q_4OocHN?=*f#?&u|FvWCAk z8@+^B1vEm;B^zf~jO*nN4SxnPdMRT*_i;E2S6~my@>I=3`mF2mP0v90OzhKvt~!2S zFV4Q$Kl2&LcOg6@7h-SE=XVjlvYKb((jeldz&dQ{9G*evNgAx=j@hG zkBmx^;#U#grD_Anuq$8W8X20^`)AJdfs@KCaz(9h328Y zRfC$C!}@B?!}vhcJ(}RUxx7yEQ2%AvuV~D}pFGpICu{O7-<||NvK;>88NPj{CeQTk zGhi3XVP6W%VOJXSu*btZ>_}%G`e!f?y?x9>-%RGA=WOPoUl#MwYcBK9M?{DCcRN^G zhu+?YzZVJs2Xqr7&Jj`1yvxLhdqiw!KE=dH+K7lU?=dlwj<+7nXP6lAjfgSkGfj-l z9ue;{pJifXF4`4$Bj$`}>3`q zG8e_6-bjDP0KOeM+}ADSFT>!gjs?HQ7r!3`>;bo#GVxFK-LQWuIsA^2JB|R+L-1D^dw1Tg{whzg1_oYvp^8xElYc;{Sq0sPL2gEdC{as)2g( z=6tYz$ItrJh%~Im=C4NZS0dokxI z<|d1b{{e|fBLCQ*lVFq9FGyGzRVu7m?sP6v?H38lnk&6&_3HN&P4AGI03V$s%J6L& Uyy($2%N=q8@JvN|+AYNY1F-(#IRF3v literal 0 HcmV?d00001 diff --git a/attention/vmfb/attention_B1_H32_SQ1024_SKV2048_DH128_f8.vmfb b/attention/vmfb/attention_B1_H32_SQ1024_SKV2048_DH128_f8.vmfb new file mode 100644 index 0000000000000000000000000000000000000000..a1859422d9199d2962d31b05e8b4b939367a3d5b GIT binary patch literal 19476 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 literal 0 HcmV?d00001 diff --git a/attention/vmfb/attention_B1_H32_SQ1024_SKV4096_DH128_f8.vmfb b/attention/vmfb/attention_B1_H32_SQ1024_SKV4096_DH128_f8.vmfb new file mode 100644 index 0000000000000000000000000000000000000000..eea5e8667c58736b60a9ce2079d056b8d12291d6 GIT binary patch literal 19476 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 literal 0 HcmV?d00001 diff --git a/attention/vmfb/attention_B1_H32_SQ2048_SKV1024_DH128_f16.vmfb b/attention/vmfb/attention_B1_H32_SQ2048_SKV1024_DH128_f16.vmfb new file mode 100644 index 0000000000000000000000000000000000000000..a4d58383aaa01f40b90d042888af1d43a0a0e0e1 GIT binary patch literal 30164 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 q!m{RSZ(6X{;(5|ek+^)HIb#-NOb2FXXPS)J$ z{=R+oG2+oq+m-p_uG_QN{_VZL$Nu)WAKLrV5v#Aa%ZB&W65`WA*iYM%h9YT5#$w2BwT91T(tP6I^l#o9OT~46Y zMtgg*FFC|mIqJZ|AL65jn*!5l&!uO zB2Q)V4`GAAg#y=Rfeuu0$&AkE8Ofwv0W3#7UCqQKJve+9%p_FI9ZoXX__n*}Zrc!R)o z0(%4=5_nSJPXt~N_)h}A6j%x)shuVujr}Gdt;;X}S0=Lwm?x6!^Gs$1^3*5dD@A#p zDE9;FQKorA^hHQ>QKtDswDhdP*<{V0qX;ed;*jBy!s3VeTZ}d z>2ajnkk%tLAbF5J1K)Y1qey#^P{rQEpJHGaj1M7w2qPawT94#II*kT;k-|vlVHE8l zYmq!i@1WtmNGp&$NEe`s#t9^5Ko{v;ibUn-fsZ1MA(71|fbSuFLS=NS?O)8kxImjS zvOUr<+}#~d!46SR``eU6tT!@{9EkTO`{M1rv0eSc*qzYNY+2&zj`wxOVXLU8wZvuP zJL8?hL$QwDI6E$Aw3a!oD?XBh&^w~O^kV&BXDT@`)Sqe}j1Nt;`kCM(-*NfQ{_Wdi zeO>LsaL@0|{&+09S>HaAjNgJP)+Fc??F+f3qMr5^t~b`(+us>O^YEvjkw25y%wj{? z<(6iqp-l4xL&1FxSFnAk3!zLt-!J%yrzw?Ol!~@PE9NB9Ra_hCOvPhE@Z&EaM{|;N z{6^@YdDz5NB>7%7;r2-EmKZ)XT>pAerW|>a#dM-}d86c)i!xSAj4cFj2sGkfE97WS zG^Oweixref_Tq3(n94@8+I>*SlddMS*$G?C;U0|i#E006S#7>^Nt?^eHt``udpEUd z%0+ez$A{y>0C))NK1+xD3$wp8woNJMNG6lZ&}&-HSLiUum(7KY<>M7Xp8FWxZci@b zpYNB-rglYW65tuhlHDz2d7o3}_|n?RlFgb?j6Dnf5a`5zTF9FIPA-Dke1;I+l)uVS zxafNJRhBN#|2BO<`yj>+s*>&WSzab|UAkN%UCF_L*idJJEreVcJY>&Wp`!qK(gA}~ z%a%pCo|>!c85kZ+w0Fg`?PTmB=&^izNa!?uYg$F^QU5Np$(&xv{=W8(7+R;@h_PR1 z>H3|}MYcAjxLJRwf8EKxSa0&yIIH^oMO$VePqG(nN%3>kRcx79ARSrqLqcA(&+Vi0 z0?B7>Hxqm5_rV_mo%oLnS+TZ~$wj7PuO=TG9E_*1(|(jC|Cx{%b9|YpAjQusm$z>j zU-@qr+iyai>=5%K1qIxJlTde2K4LY^HiF;U+whUWtg~rK)YE4f)m!Jby+S{Ic3yto zIx1+~ZzJZor9~a-puL7x&UsO1?w7Oynd|9G)NchJJ?_~i2ER1>bCtcRyFax(Mjur3 z1P{&URDb98#>8N(v%j&s1LgICM(q#9`vz&hr+uED4l9G2DL8#5P~Kva@Yja@K8L-7 zx-oJBf9$Lfb*r)A?kb?x7%QL!U}FU#fW!*g0CrYDpA<4HApJS4fPC*@1x{m!Q4I8NIWs;B~;Xsc`x67yq;RCP|Zdv6(#=*YjVBIu# z7<-$;t_|433|aU`#wVT2aHL(3hI7+Fw3knskSm8~7n697wA&4$V*b;xL9@%qO}oHj zM;{nlXR2qr*3*bU5*9K@ndehJh6YCGvYtEB#I*qv-^dy>8}fN+cp)ttuJn~svMEIq z1a?>>O{+Q&z9cKN=M=GRWcUkB^z8E34L)(PCD@oX!!Qq+Y*-^jE$}jzz~W5X(o))< zmJQN&X)mxY!OfV}#x4&t_&UW>CeL6g)5it|nz*o(>A)yoTt*I7=w$Ak2}^PyVKXKX zvt&#n4R&KaHg5y6HUm}|68!3BYp9duF8ra<*?{etILI3^D+Ff_>Lt|B_&}2XB{N9B zWNh$WjKs=cY5 zK5g3hr%iizM+9A;h)-FcUlvmD*4(gYrTd*sW)|{v?hPZ|hD7}!2fuW!iEW}xb(Gjc zCKBIuNZFse+1A8{@Ci3W2dkFmoy|?NX78NYJbP#N%xf+(nID1egShv^SsU8Z7q3_% z*=%jJ>CF~IyGbudB9Mj$zo9)amPvuI(q9NC(lDd;y|iUVemwb6Q~N3c)W z{P&?Q8m~XKJ>e#HBjl*PKlh=wC}GPmpUd#57+?!IFF47~4}%s0sw<<{t-gt|JC4P+ zcVSjXZjPt=;=P0Sf5eKPjKq2dQth4nShBSTBC%A@;DdJ_i^MvIhGV_$vChu;;NW50 zYrER}`+9eQ(AAYfRXeU9o$-S`z5N}r-X|jc-QBqCvjdSqoY|dEMn+=2!}0c;lYL!J znJnU(|CefZ{-M-cRwus^GF&qq@69bK1M@Iaf*_GDym zV$M}PV-^MnlD)m=G-OXi26t`m= zYZp9|?8Fut>%935OyLO=-?y=6%wo2YPe*Qvjl{cC{TNXioVKUL;u^wm#)n=;si(8A z5kLv6uCcMFd*_^4&DJ8chRbHHXspyLAKE{>cC2Qx4?a58I46yP(wxnjXcOYzJq}$mr zq%!u~8O~*oFIiEW>0Rv^!}P0SUyau;c1TjRFJX_KPZ&~4yMrwa&9N`n?pnGkY@m;} z8&+*IqEcdvJs+N9e^Fy0&OY}MRDAGctHlzhe^N{8u%|^NgX%4==GZ?#`We!DNN14VL3$hMw3Zo2YiVpuw-oI;HLq>&ImynPnI$sszl8qJ&T&Zd zQE#Vu*^w}Cmiq?EIVc+rS3+`JNZ1`8BHXj*?CaRw?ChSiuRA0*0)1`ZbAT`HaM!5F zV-s|y-R{Kgj>7r{C_7Oeb$IG?3r4>^7iAgcZvyjxhU`p8@-Gs0`B#a|3e%o3hqvBd zRLGp*ABO%YcwOMN?A-0})!Qd|SRUwx{1Ie7PGn@6+iWlPG8eD^HR}HV_Y3gp)S%Yiom%YbWv z_-@ZR0G@9lKLz=9zz}c)a58W`uo8H?EMtz_ZpUP1qlNz?JnH#P*pNR>*yPU=kIRMd zk0-GebDjGM2W~_D9JJphXbwbC@7_0hujOBdiuo_@7Vtt zci3%`t&k;+LMdtUIFp9QmD~h94(taqyX&OP?gszuC#3<8CbK(FvH`c|7zk?VjQe=T z=}yuIY{pf{Q6BJVjvcb*-VxGXXZM`UeCkQ!1Ds_(^(GCx3{X07LUZnLYOWpSS{2&Z zVoT=GzELIi4Itk)fPCKoR{ElAn~$=RaV09T6H>{zA80IDH~Xn=<>ST@iM_@V(I4zP z^-Qm#eFumm0X`S7_aI--^Lsaac$Dc8Y7f{<{J{Oh4?JY?BY%|V!FPh`$B7U4Jn;cv zviOick&%of?PZyd_ncz3M=zx3&1IQBBiTk5DJn-7^72;1+jx2D5?-b?&C4s6^YY^q zG$8)ft9Ut0=O8MtUBk;C^EfTa>({ZdJ0HDpZQBCuYiJw$C$;TPyNv>)U~~)j=`yBc zo^pAwk7dq>6J*b~MV+^_oY#>}w^?KmgpnUPsV~q9y%KMH#%V@1rUU~jSMr)e#r7yk0Xzfzo zf8r$fS;^ebF5HDL!eLO*@&3EY7|jQ%G0jrY&_rb?3R{PaREj+ul5j8zgM z6knykwda&fJdKj1pWbuIN%>afA?v3697*y3gF?s6XwOGw@B|4#CtZDLx17q*L*?zT zM^BsWdmAO0+VHk|Wzz4RUnP@n@8V{ebk{U4lu5RxH6@eon)z#F(p|H-1E1rtVWuhX zn`6rRR8!u!tXXz@KD|ITk)GO_3wfE^CVjPYQoKyIk=|N$4KGvwNq_CK4qhg|kRI+2 z_<-6Zo5=^3-TE7*Z^(A)*VkpgFLc2{mK@t5_y~tg4B+;wL|uzT#Rxta5B)VtkZnR2dGY2uLY2=MBb-t z)D+~)kXMvVT0q&V1yS~+TmmcwmI4v!4weBcfYSqEtszjOm7}bnTmdWr29*x2MCsB> zm04Pua*fs)sMR8YdaYcUtyL&4=nE-r+7xA>Rt~*^#s+@{^tFIqGIOI`3H_5H=bKjJ z4}rHB^?~WDI{?1mjEJ9nk8=ThxkjfvzWhLbt$rBvBk;#T=qj1HMP^L9FsQHq&7A<`0@Lg9 zRWs^*S#@=_yl&_!d_z~^8@>wPF!)ICh+?iO-j>iiLOQU{g4Dn1*b`?4abk*o5C}?) z>?$F@)m>xSim&tvT1s&)0=?9v`=H0yC~WjGg=7@;LlOGX_7!z#lh*~HTd9kfx(_m6 z{tQ3z(CyFCy|T{i|5fz-G2Jv?N?pCFyM?}%fM2~#aW(p6>Mysur)u&X%5Tf6GOk zSJXi#ucP(bGIg%(SGu*rspazip4IAso)zlhp5^M1o~5c6^@jqh^@D*G`hmc5y|O2v z252AX*{X(mHmXy4)~faMH>s`j*Qrm;U!xwKze+6z{a9d={(K;z9}jHROXrWMLE3lb z52)qyx2YBLJJg!iUUgb)ms;DpMXhUHulhiLG0>|&71)S1w^X0eYN$=Ex2ZE*cdE^; zDYXRjlY!gxBZ0O0tAP={s`Xa2x^+kmxAv)1Tf0>S^w$En>Q4sN=`RHa^y#g4sST}T zYGdoD8fn$kQk)?-;au*UwW9fOV2w`aUE`Wnvz1xV<`)9nM0v?<|E#smPXtzp@;ZM1 zFJ<~^em=%o8F_@}a0bV@8|Qd_?gmy`bmVbE0v)_HbRMTX&fF7cchu9_{h2_Ao(>rL zvw<%C>A)8KL|~_WG_YQOIgrxd4BVx^5*X6o2#o1J4)p1-2S)Yh0^RzlfTkZ(SL?^r zP5O)KBl=18HvKjANBZ;XUj3lDLO-r<)eor4^`}($P+h7YQTOSusw4W7>Vx`A>O=Zr zb&dXl`mp|lx=MdWMf)n+SJA$T_SHxAqw4qdm(|DhH&wK+?$_T?59&Ww59zO~NA%~^ zqxvcJn0`n}=*N^^{e5Mpeo`6L$CcZ3I;+2<4Cn`yZTfK~r5{k%=}%!_+^?+A-^G6V zsxqXXQTp_sDkJ(~WuyKc?Z4QMpTYi`R$zm2tNygIRsWf?N&mUBTK_=VqQ9w(>1P#9 zKd0QKpI5r|e^5H~Utr(;N2N<=RSPcM@;qa^*@6o@U&Pl!HsA?-XF`ZuU5M&mFzLpR zO}c@Xc8QMBK==goCr$e3Qzm`%xJe&)U;sb$5v1o9 zKn-dIoL0;N<-759D?S@4CH6z`xyvN!@kO1{nSlNZuplCkc74kS`YU--G-kLjJ!({^85y%Y}S} zkgpW-lZE_uA^#BM{|jUvge=*S-F`^OPZ9D}LcUta(-;(PE|&_`Z4+Zqw7F8^pVJ|U z6{)rQ=lR2d@Yf_Yq#>jMS}{8mXu_GMS-&4Vo@zo*=Lvb2kk1$LNysOJd=KQiFOz3N z-X`QFA#WG*amaT;z7w(?kiC37WFem;vUzlIGv#Qjw{gRa+h_Z z>`S!a1d#c{pP+b8=8Iq=U4h?IOyBG(oSblZs<+{VpGPlrREBtb!-W`vbw|%f{J^@S zyAeCs{T-}XidA3@du%%|+=6BvHZk9s$II^Bj3br^$HI__MQtW}wwgGJSh*C+f>uJD7fEaNCr|Fc z{>^Dc!~;K+>TmBk)c{(}ln(5ryw1bSw#$e%9kkjTpaXaCdgP0$O+M%^3YmP9h*k%h zhuXsZycT))wH?^=c^}-Q7k%(FqP}{u$y0-TIdqYqV8+b zLayJvg8xGi@M)h zDE~N6sy{fb-9@~m;PpU1*+Jt%cU$*{l>Bs{7H5%qobwuVIzLVUAN7gaC%&zw?jq`k zhS&3hWqj`3OLuekO`|fEVds6$Qtq3*6gLV9yS#{t`Vc!!<8Jx}?u@VFZuchcanyIZ zKX)nnWd9DI=52cxcV?S2xFe`_BaawWkYWp6Z&k@JLG~5Mp1|GiB<^GsH|W|R$_8?g^U916W8hc(mH0Q#Prq#*Sd9gOaarPrNw;%pL0RPim`X1VTox9$+T_1y^F_n7E6eGJbSKYgA}X+-a9S@Yk+&-l7i&ReeX*_K2|Hu@`Hl! z;l)yre8q=xsKB=V^bvBavk zW=qvSnJdwnX`J6IkuQ9$Ra|DMoL=|D-LryTl?VFqUMbO4$)xiac2Qq!-Y8D!2 zGWHaY$K7Q5eZ@%jM62^jQpcAR`)`)D=6o;dD7L7q|t6ip87sbdZ&P6dbigQs6j^c?FucLS(#nvb;NU=PM3sT&U;)xXd zp?D(2lPD%gu|SFmQrwVYmlQ9X4y4#y1CU~MjX;X!bpXqOoj{7&bpa{f7Y9;2up3D6 zryd~1wDtojZg~Jm@y&xkibFjCq}bLWAjKpP11Wy#Qy;XPx)RnKlq$VZ3F#e5 zrQWHO>s?Bz9#?{Tw{lkNQ9jW2D?if?DDPv6+0HRCKmT&bH&{obl!54xl5prd$Tf$&KX_ zP}S1Kwn&{+1Rfk*NkcO(YOtI9pK3?J5%i_D;;r=o z`CM+QS4zX~GT#X2L7wzDCy}0@=71hYS-tFl9tU(g6t|X3G9_oKb4!9FxunZ;#-3Z^ z<2L0hmEnRC-w5YHo^<6En>OV_S8ho?elqyccrNtkDutR;*yV&>PSWK)V|Py2RmJV% zJW3VUCFPiQIibr5yPVMFgnp;u(ei{{d9W*wbjfGzc@uWkaJx8nF z!}eG<$ckUHD?v?CN;UevdA4m18^il2IiwTq*c313h;N+UYR8-0v+}auGchD-9?8(V zCb+eqWq8-bu{bBnZclv3B%S3hLVncDJ5}WGF!Ooe%!!5!Gw+y>yv6?wT;qPn{krfug$wIFS=F8 z^FCpNLH%(?dSsj$n6o**x*|$(Ekkn6E|^vjbx)nd`zIIb%rylx@X8LIahfNppafUzUeUGK=)} zyoQaJzgeWGZ#a^O4JMfQOZ7u37D@GY#fD-mG8ErA#JTCEZB)m5Q~m7&_;o_EuZQtp zCgW9mMlX`%|1SV0AZ_MM{JP#v{<`$gJI?LV4Xf0Z%NAYg$-k^b{?A3ig~@!Zj6m!6 zA{N=2A6A)UY0g<<);zRusbHk(MQu4n*_xk-5i|U}z2B0z=AngQ!Eezmc~Q*}BIR@3 zqFeLU!q8>%mi-n^2HlQi$y@8hLTjA}HM|d2o)7^6UT4W$@7Y_}Mod{xTUMU3GmywH z6U)tVjOggZ@0f_09%9aV@TwP=r9RMOtuO0$M+0W{#6Dp8563V5EWlr?v*erBnDtG~ zCVqg(aQ1Uq^K2!ERM(WvL}ejQ|1UxIW64{%4#WxHWihT6@>@k6nL&J({g#`ypw6;g zuyQyq%sbeWUOB;79tEFgKGXt zk+Id++oVc+BRJ`~{C~Sb=w#xd-ylx>-&eS8U-92wS)7-vyz~c*SE&3`f6hovTEAel z(D0g#uD;&kXb|l;GOITiN7EYBw*}89%O~W>N$lC{%`$m(_4PS?0nmHSTZ?EeDy CD|T@J literal 0 HcmV?d00001 diff --git a/attention/vmfb/attention_B1_H32_SQ2048_SKV2048_DH128_f16.vmfb b/attention/vmfb/attention_B1_H32_SQ2048_SKV2048_DH128_f16.vmfb new file mode 100644 index 0000000000000000000000000000000000000000..bf73e98322f2a79bf10c213e79b167f482c9bc52 GIT binary patch literal 30100 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 z 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

G#gBl1aCBakEUiYZ@2IBwN#(l1X>X{53M^u36lH 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 JPyJ@>{{r}nb<_X= literal 0 HcmV?d00001 diff --git a/attention/vmfb/attention_B1_H40_SQ1024_SKV4096_DH128_f16.vmfb b/attention/vmfb/attention_B1_H40_SQ1024_SKV4096_DH128_f16.vmfb new file mode 100644 index 0000000000000000000000000000000000000000..089382527cccfe5a8da354092cc7eb8bf27d36f2 GIT binary patch literal 30100 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 literal 0 HcmV?d00001 diff --git a/attention/vmfb/attention_B1_H40_SQ1024_SKV4096_DH128_f8.vmfb b/attention/vmfb/attention_B1_H40_SQ1024_SKV4096_DH128_f8.vmfb new file mode 100644 index 0000000000000000000000000000000000000000..fb92d936be27629acadb077add7c50342460e33c GIT binary patch literal 19476 zcmeHv3v^T0x#rfHY>61#$d5p7 zdd`XCBy=s35Xz*PG-=abo(Uo3**pj+2}u*0v@v9QX;&sI)781Ft1CB?NqaNBS)FLU zf1iDfc(k{-E3?+jnx4h>xA*=Z```b5XzyP~thwGUH!$;=!p47ncqk*DJXXTC_je8V z#v|PwXTP*DW@8>U-)r(_qZ?Jr*DhH?l+Y)cOe3&WW^4dy2q}&94pIo|eWX9+6K4@? zgrEmG2a?$mW7{B4`g};FCl`rH{4w(=p0qP|1Zh8#fz*q%0SW(D7wnWNA%6jWkQZWlNr@Q}c? zz_$gyC-5Hy{z~BQ1b!(n2S$(`H3DZ*0Z)r4zx3ZP?fdpvvabyeC4UH3?xP%(t-co` zPi68CVZFdb0yhZse`@LuqD*6D>JG;SclC9m$mSwhZBTpk6q&&M0xJZD1 z(9_EQGIpK76#{P*NH)>K8wU3A5@WjrjtRU^;68zm2s|S28G$bed<95-I3w_90)GjV zkp8Pc2bier6Idm%QQ%S_&C6baw+h?~q`CLJz%v4W3B*74TY;pU%H;x^1TGbLgTVCy zdjuX4cuL@p1zr&NYk^+~EQOKOP9u=Uelw8PJ#ymqC8)e z`+;>R)4U=2Vx)N}(|n?G0BHrvG-qgD&|0JQJ%4bhE7`Y@^?^n{fk}K`eF}p8{?|r0WNPCe`#ooc6Vqh1H47U-5pQC4pC40+muACH!_eMi1#M@;%&XLUH!w@ozTy0S>oxA_jSf$tEi{7#AV|< z?Wq6O!EXo!F>)_uzjctp-etMAoz)=F_m1Linc*3<|NWpTpQ_3#bZP8SbCPuY zM(Ch<*vM5R`Cc{Q_DJlO7(O&y|8h~L9C?z(bfR{7qvV&1GFD5BEdp-{G~!<;beQAI=0V2t@k$}jeT;6mC71Kh z_e*6{yCO6R@Qh^1?iRAV&na_!Y3*dmX3Z$Zo(6vibmBiFWKDl37sG5mLx^t5Uu7v= zbUphrOPA+=nm(X?5Mu{b$u{~dFB7^hT`rNX_uBr{2X-^TP7ArN0$7MkQeQ9`{=wt z@>$!>#9sP6@P|Mr{u4r0tgU2nvFX^W$;So<<00e9de)LoR1SWUA{;J5ZRd}J`|Y?>1F^jSvr*12u3&`+P8m!G$e z2^#m?h&gU)QAavxuc4LmzNj4Pi>FU2i1JR zL-RS+-?_aZF&OLYZ|Lqod4r%)`$O@*LE7(WpQoq8%AjTnPM-;sx0)pUwPC-{VQ-;s zjGVw9J1a!p8f>_`3aB;43TOe?SV1j7Vg(_9ofXh0h0F>_e-0}k-#b`ABOn)*aGjGC z&_~;Gc31K#9xp30c!q8!Mf^sAqMsE8X$O9klS(OT zkO??J7g^V+N>)JG0_MpvI9rIHeHcwthvB4VX*_a`No2Lt*a!ti4zt8%q8d)a4O0uz zu9xqeblWlLypu*UHsHgRN-m^4V*@l(DbGNSLFZ$GW)gI`j8b%+TH}qtMcJ*`vRd(9 z(uyr@W3~xR#OE@~|BNQ-Pim5&Nt)0EzO*ZCY1)91F))^S2K57u!0=Hylc5<=!0eFC zV;eAv2Kta^RI(hh1Vih@C%%o@uaIyWHc&UnBq2k>fgY1?mr)VI2Vf=Kvf6=+gMGun zy7|DdH#zLuh&{}Zg@0sx(zy&r+68GiHyuQK`J@TCa%grjiRVbW-5@IFKMfl+yNukl z3p{r8fwA?bdbVo=jR+)RA%m28KILO*V013)xid{%8!_>XtTD48pO=Og(z4-7UnwP< zQZzwehc(i)s`KDWvNC&45!)t)ztBX_E|1;d6Bk>8jaf4c^MJ{QHB!_9FLMbj&a^Ep zrR{0iAZ?fS0_zgoj9G2$@-Tz1Q!Hij43;u|Y+#^?3rm>}jPk{07)5 zgY-+rM(;&_%rMSx&fy9drX6i=tIhRGhM)o3{`q)H>2EOh8I>4o=EPmJ@JyOPI}?+Q zjkIB0T!l2Ewlw^gW@&1L8F?hh<@W4QSYAD_n>e$6;so}n%{}Kt1g}ZvNMW zoyRPNSu=9xLsSo>f-HoJau#N_h#Am!`jl-8F@PQhLLVVqJEHrU%1x9R#B!p zO6&m>iSIh3?9bh7YhpwAgd3uRRdeIc=Ek|#?3~p!XJ_}UYc4XGAAxOyxc9_aE85eS ztXwMDY^}8E(_?2JnQfXy)+#VP+sv%Q@@i#sFe0rODHBfW!}X&xeyFFnza!RrIMUzUjmthe7#YNw-T8QAB-T3|Z@W3! z*Y$+SBCh#=t!C%{G0mQTQ}fuL?{x6rRPbV?C)GbZfN)69cC6#J?&QvRR~vbXJ% zPM;v+*3;AHeC~>RVhoNC}Gt#H1u@uoZH-FEkbL!Y_t{q$%pn2uN|vd?1K+aHCdMfCeaRN?WaNm@mq<` ziFjID!A5np!~f;ho*(}4C~XjX2#|Z zyiAwa7)J-&&C$j7aKshbcfuE5*5qrnogn`kH7n+jOql6jk^%Zj23Sfmz{>mB(wfoU zfv}O0ZfC=g%GhsbIF~)TbY*R(ca3KZ)31tsIbOTOAxY7`ggyFx!jMwh9c)=>u6>1e z*Rs`N1AVmJuzH&jl@ep@+3;NZ^BM~&Cs?EZM23Cm6k~sUEyEr>#cXm;#iL^`L1s0&LX{q^d{07Ei;hT(zvqRQncsv{MNnaB|CFwmdd>U z68b+U$0031y`Ac1N5a5a?rSLLplmo?3CVFGVRw9haL=A|uVTluvwP0H>X6t7^tFP| z0lu`uU85qOOL@0Dal50iZXwD}lt&$&y4-@%Z_YzmM)~W&JfI;v6O#P%gkAn+BD2!8 zXUyTPvlkUIC-{elE*^d$#S>`s|i@nUn>wks%UnlGe z?$5olhrV+fb$lGQqp#8`jP-SL?PBP~J=VDh=mstU<^zY&=5@#;s^eS=#P>_i<-j7~ zGGHNa5Iol-uOPny=mV|-76VrTy}%TBZa}^S`PIN6@J3(&xCZD4?f}n!K)wR`wZL-V zO~5kXIv~E=a}I##8^}*VemyV*+z6Zu+yJZu-Y(0S!O@$>`brsZsB5 z!++2I*SN!OlWc`7X%tFHo5z_nJg($s=y6~_kl9_QWOg_BZ$Bjscr=;ad5R6VHOD|u zOK03CGER4rK6Ep#LXPr)Pjl>$HTRB?_A0yQROS;;5+C3!^NBZU;AMc)fs>kZhf{Oy zDA%gc##UQ0hxUysv2OtRz5(R>2C&i>UDtGsm5eJ6#{EEJ>H0ZOY%3o(mP+gu zj)?wX->GAI7418~8hG|J?LElX@%-M+9~@(PgxUi(5kK$%@dJ-o{Ky~UdGMWN`U&C# zK1+PS7c4&HPi7<|Nqbr5qdljY?codQ`SVz&&q%h?MT*MNMZDaOcpEP-TguC{rg?eg z3SNGcf(FFDW;HLT=^RAmb!&O~BOa$kdBb`(cIU$vu5De2eGP46|D?9vX}3{e6pU`= zK3&dq%u_D!^|8$R;RM<9O;P79E$4M)(`{B=Wr)|2U77c5673CywFzSuV>>OLNF(R5 zZ1q-!dD*hnTT{!+maX2pdR|6wn(uXFkGH9r*M)Gtqy3849XQ16T5^P%6fbzZ*PcvHUlvkd8p3$17eCZ1> zF(+hXu*hzRdMWJVZe4(Gd_5|)gAVz;3{KmWIeN!b#c7Af97q5vB z4lq_ph){f${>GluGVwG>l742-X(#1dkcX_B@^dB00}KisH={itmBAAv1f6vCq1|#S zLl2d=!yY|tw(o6_WNO3P;+09icR`g*y1h%9WYS&Jut+A^nwFGIx@#7!l}UHak`8>1 z!-iR=yl<{4?^8{A-|{Be?fK*a*+hD3XD#AoYMb=c&Q0+$*+zP6)wR4#{U`mk%R6|P z{6c!TKi~sulWZm*Sa$2LnZ6<0sb61}{l4I(_ES0Aeky0%Pvva;sZ910{x$Z0#6F(z zAB_W*(H{37jR%#Xx6~Sk5PU=95GKqT2jYX>K5HDP3_FARtHOuVF)g@XN4fvFk7w<} z$G361uJyusyvG!*Q`TwRuPsfyUG$63we0y&1>RinRs-{aRZ3K|#=2Trs@0$#@8Sff z0bM|A+-sDT+B9XgW{rCobUWx%f%wiR7*>{PG_GX7clsiEs1x*5NIsPo35TnwBH^eXE$AMydJQ#NP; zJ`${u%7!H5pno?n^p&U3ut5m`O=2^fU;VrJibCeeuI7(^kZnx5BcECO)}B&ZXjsO zI3K=zLw<#R0DK3*7n~XKlkagZfG^kTl*gAJ$gk6ng8mr%aR|CfW^F|nPrERvumH`S z0OSHQ>hM)F>U>#s(`$L%&{g<`uEIBb6~1Bck=_x-TvNO)p?8FIV4Vf2e>1Qr&I;nh z6n!rclo;7nLVlZmjcF^s(kqxL{ZL?~ zelV~?uk1;v0on(8+SO3cCUr{BI<;=WX0>I(diC&vwd%12tJPxAj|VpE&ju3ui9owv zx?n^N(!R4`KrLUeO|4kaq1LqYs?%D!)Y_J<>hzWkst@$%1HJkaflXL*%k-HohT7P2 zn>wpyr`pt#QcFNT6}U}*EU-?0IWVGEwcM&!w+yM_mOgcAOSh_k{z~9h{qewh{e{4Q zKBMI>wZ3IcZD<))BQ2U*iZkS9oXdU9E1Ql6*6MWLHLh7bM`?~WJr~#}%1h_?o7XiR z4y+dC_5A){%Jeh*e2lX)@(9i0432X*&hh-*4Xm{2$m50tI(Td7JWhF>xhKx+^xJ!R2Fr>d07}I|g=+j>fjOxz>y7kim zO+TWp(T}T}_2<=x^i%3>`YY-W^=H++`XP0tenM^652`ElCsg=QU8X;#?$cjZNA$Qt^S<)pnh0gtv{ureHHDiXkSJ9>cjdm^?Uk@>ZAJWD%w{M=&z}V^dG55 z^jFo#^k>v#`f2sJend&=$CY0FU1g_!N*UG1mD_YWtG}fT=!cYT`UxeaA5_-sPhej> zpsdv2#(w&;GNhkX`t+YDBl=Ngll~6vzu1qT!v308V1sh2{-n~b|5Vwm|4dnvgWYWhDoAfcU0;fUlYD-}<6SH(oaB#;YdXc-?IO*2hfx=rNN%dfcRsK4rFl z>j9HKcF?4cJ!#U%p2oca{-!t!o%{d(%$qFp`R=5FyO4E{I74@u&o?L1ZoF6P+kKmL zcZlGgLU-WJw&l$5ZDFo0KFOtaX%WW84FnkSxA>)ewOjklpJZlTKHg>j!TF}7B)PW) zC9|%W{lm?^Xu+0J=^r5X8G;P1z-G;@`m{6Poqe5M`r)?%(fq(xEuYi#*$+|g3P{oq zmXt)@fp)Dx4Qd6PR?GtByYY1^J{u|}_5<*_%OvU1#huYvfey{x`it`se8v_4X95d> zjld!x-f0hh|K`on?|rK+8bSMyEQv)QhTKfF+lV$u-Xr8E33;!OFBbCOh5SQ8{y#zf z!OP^!g?xpOuN3l=h5UCQ{{ZCwBV_kOmh8xGKP2R*2>B`@UoGTm3<|fDONHvTi7_bJ zQYrDz>5#;V)LQ*B{|uWo7X0(MN@5SdPc1X-l4nb3Vobi>P!XN9rAqp?7?VQS;!(@B z?|^szG`qBK=HzG*e1i}j#w?%hLw(_7NxFaPl&A;(nxuv_gfu`aW=8^zIMX!g_k+h% zElGQ;&G86}{!A79sS*8|Ci-(Z6A@36M`9eMk`Gk<~ zfqeI6@=VCvguEo=?Ls~d`7X$JLbe04myd@m>c6E08nHoWlj@P&@b5RY%T5JRx; z==q2rSa)zVT)BG^$B@U%ams@xc2PUvpG1X$x z?m&L>Z zHx+r$^&O1-2Re4wofmdPS2gO3&}Xs%<-#hI3w~nCOh(=fTUgb{7qHQ}NjKUrnuhwy zuYm_`R3bkKeI|R$kq{$j{A^b^wr1nXc zd_s3o_Zy4k9|cPF{nOf9#9Inp5A>5AG%j?vb#F|`PX=mn7OBHIuU@C~;}q~wpQwG} zYd3WlQ9m@io*yjZbLU>Vo4aosm8lFn?{k)N-|VHhQApV3MO@T}*l8Mf)7Nlkd=+=Q z*Kv=dzSI4=OW7y;clb1K>(jV1+nm82L9H8k#HfN4Tj+YDN`3*dFG2Ps?slheC!@GQ z*G5TxHn0Kb#!cFb(D^cSzJj~hY23vuU4H2CLnp-+x^D8ybtu=Pyw|kzezF^5xsS&3 zTa10XL$sR!B5oC=xYaii`yj-j&`WYyGhOwd@3~0|Qh!n2Lt_v5d#ri7uey^_9F6Ab z-f5kT_~4(tBoDlw{1XT5-nY$h??Qf0StlPu=-ERtCjX5c{7!QZX!k+ii9k8dft5Os zBixwcXa7BM-Q;WU zs<0WeY+1x(c*Qr=NYtmG+GO(k>05g62UrQ&@1IrAW0}4Mh&NJw1FNL^!0d=r|8Ap1 zKJ_7%SoOvnsrtwBBw8~K3z{VIg|DTG%M6v%>z=rKR?w^RKtJ9qCAun^bpFCF>Wj_$ z3!}x711%*Vak?1@#i`7lE%wB(f{0HgX$E7Spf5 z_&t)hJzQ+Ije9Mk?Wk86KDmHo3!!LpShP8eHp$OntQGyo@LNl>M02|M+G`}5&%U`~ ziToUXd#y~iDPODMw)q##5%$dEeh!x`=5sfw!cO?6WO0Psg?r~?`RVuq7A zVi=|LQ!QW_dxFQ~ZZiEo;%CQseSqNv40<^`LB6kjJ7vmOu%{??MzI@;l~K%)#-O&O zTBaBc#r-H&M)5(4!%;ko#-O&vE>o=RxhMul@kEN(Q9O}iYZMoxSRTa% zDQ-vcM2h`TJdxr_6ceOaAjJeJZb-39ikHm*QtYiBNU^#GAjR@JfaSnWAjRyufE4eG z11TQZ4W#%}50GM72Y?i}JP4%t<{==(p$-EnwsizZG0CGqieLJarMjX-^`NpyFHu_c zN@bxwS(&eglzI9TWsY8@T%%Vj&3agA(x)nodW{m%rz!P%tx~5?S8DY-rAD8jg!Ou* zN^ej?dWTY}cPiz2mr|<7m7w0OoYQ)g_p}4bPql-}JK7=Ttaey=OFN>xsU20$Xnfw> zG}W9p-=Wlsz7M~{-owFrp>xuKu_=<7|&=Ff( zE(7J{rg8}=ZRsel`PaKo+t^3rj)Jpx+Y+DVy34p1x3XF%zW>i>KN+_vXRGrS-$?$p zkH$Z9pS9;JL019Qmqfw^N^ry`^7+z7{pO$!ZiAD+y=c4@Z^`Bt#*`^ zjyOn9A?nI}E;rRHrD1oOZ-nz8PkNk_NKa66K#!xWPIf?#1G*iGTgxSxlC#yhCBczg z(&ag8&n@wBoAQ;)a6yT0g!3Rzy7G!mn{uHmx16br>GGbn zJ16X_;&yQ!rHbp4a!k9N(B*_(PUvz%zf4EMm>~Z~Rdn_Ad#jn|wpe8A$8hzh9$2OOZ;r){w(usC#iWhUlH%@Q0<4x}7ysY<3 z3`v?#GW4zqZtdq7-ZgP7$%(St6CW^1XSs`!A2st%75O{NeBRe{q9Mb~I~E{s@qZ0@ zi+?Wi7XP(5(N>GU1$m2qHu4t#EaWZznK{vRi@yPRi+@H=G)M7i?Uu~+oM^^ooTB$@ z^RCN_whMXQCu}gNKfy?kj8g-1Hsx1WL@BOiNUk{r(+Z;QsgrpBm;0HS=lt)QdFo5SPn_I8od0c^=N%ZY{2!ZnC-Sa0%sh=F zI&zxF^C+hGxAZq3{A~{WZ4O*z4mhw=&~qZkM8rY)L$ANkBdXba!HBnf__JT&zkHeL zr|cgDBR*94Q*J31e-};yZ^pH@&ot>UeLezij}& zPDu9kF#gMAylT(rMRNTA1;7NP&76tFg{{Pt^|WT?DLWI1 z{4%lJEXRnBPW+CEnCT(rtOu`paarmEJ=XfNes?rrR!{5$mj7`4;?F|-r8-N#ajjY3 z*ks~+hzw^xmo?8;fk<_Y*-TUx^7Q`_WIvX?h3i3_@Ld+;8X?~<>c|Y@v+TFrv=w!h z?ShrV2_bLw-=bOVTIB>XSCbFTHaQ-#7zJJ~Pu0J{PX);?O0*uV|3}99)nXyS05YiN zuM`Zxa8u4S+(MI=nMU?yyAZ>;kKo>myB+sB-1uL#Lr~f-W>?_w7{YCha#0eav*Qno`N*< z^bc{N!a9Xp6y|-b6Sz0xcH#aW8a{@56>b;q zw;}5oZd8c~WKm`#ZsuPGK8*VyZtDC^;G4LA!#s>?{GDlw6Lpz;y8Sx_ckT>gP`0Xa zu4|c{fi8bvs4v(R>It@V1@`q0VpW37iM*uQ8SH5bqCHj4IV5?5dxLF*1A!e~LGh}p z;~bWC?ZG`EF#SZ8&%RXN-xdz_4fKXv`hx=(Tm4kg(RY%+t+%^7(9_KgLcyC+Bq~(>#r757I#td!Mam6yb@jFd&^-D<)zP1!@=|f@#QdTXaVPQ|C+G_4 zbGSl0gfbuU^!XV@Pnx1|s6M=`MNWI#dKuUH+rq)X0Q~qa_&6ph<3lBb|g*=*C~^WQWW91JQ2;34?@ zlS_K1AWv0R<*NeD+yCf?eY0Bg} zh`xiUPz&5Bu28a~r;EQm)ZZ5vXzLWs;L8RLdABJU$w*TM6bd&rEt7I`FE6KWu)njV zJvdQMAx=V$<=f|#Ow+ffR&0;4hL6Zmgc{HlGap9k{DKViAKxR#yZITHnEm!WRYnQDx?O$py%qPulOt$6G&<|PK9o`3W!9#hz2WWvH>zcdhT}Qh+tyv!*&k@@ zE!?>S`BqiO_6LGJ{ao+4&hy%4B~aqSs?v)5jb;`8wPC$?h!K<>q!Z+27bz%f#Dcpo znXL(t%n4u<$$0=xB%51AG6m}*nND|zE#Poi4+f)-WtiA&g8J9nk}YV=cWvi%;a3*aztd^ zJX0n|Xj~+ooNQxSWCpd4k8Fhv5vXnP>#UB%M-riH5>#@@=cO$mj=*p+f;+MW+bVMj zydzs6TIM1);f(MpJ;E^r8O}&Lq;Xzet`*yaR??zcv7r^)MML<#Vc``s3jKvXc#6F@&C@b0q%tufQVYRT&B_eW~ zVhYpYn8F;En8Kv8i)211>X&9woJhf>bzIcM0S;Sa28p%E3`(#^wqVhYfY%m*7700|@43GopNg(#Jk`{YW(F#v^GtVgzDy?_Q*&#*sjBk z8@V2Ra)U0KMNe-}(AT@uH_#dMU3yaV?Z8fq&Ai_i>XB7u0L2#w2Yvm6eSN**fnd9D z$39sX9_$$ibqA>g&EQ3E@Og@tE|OqcJP56*ujo!}kVEteH^8a&gcsC*2C%6ZhYV+5`r$(+%(etF&lu zNl|IV-r|yqy*rD`FAc8(@G4ok}prbF`($tJl)aNyCcx` zq`!CPP8|Bd-;Zba_-Fll0$qc_mffMA_OF^G>bU>sN{;`(CfW5zB_E7!bow6^@C|=Q zxOcD*VUdn*%;T1wp}oQO7J5p&BD(@kzgUUWPe)Ju*C&;e-1oGjym59W~RR{)YYX1;*#=u-Ah%~#dz8bE&r2fl$^M_W%JfH$UHVPVJ4y_KaU)-1I8%Vte!Ow~yj z*N;>?X0uucSFJTkngBDnf?4aS;v~IwGhW5zPQ#+WGX05#PX`X=ALNo@?F%fQ)c#+{ z>3^vW4V?!q|Gdj*vB^gyD-(@Nko^Zldr#nLE*}5=zi?^d_&MxS|KHw;B68OGNa8W^ zi0zoT>*!JE@gql__a8eN?{Y;FX3W?x?u{J9+=xWPv9mL5w*5Boy$iyfuerp1XYbTL z%#LUu87^`BtV`T~*43vQczzuf;vXHUeeuS)?bumPtfI)R@9f3o@hNmE6bg%OSM>^A z3WdU={i%Kg)W6cVbL9`UZG2&P*`-Qs#oYzC=?dmrRo*B z6bgk!hg7{nmqMYi=x$Z7(4|l)EIO>}6}l7(g+-rN^$J}Ig~FmEs$QW>p-@4=`r3W(IY@QB|XO9Bzgq>r=-VtoJ5cPa7ucN&q?%n;XWlj#_J?{ zY@SonWBg8{N5FncdW`2u^oTP~NssY8i5@Ssr=-VtpF}@520h0AB>H(V=rJFn>5req zn4Vf6%n#C=^P|Ze*O?|g%eh_>UDg}{a=e@LY93_8pvU;1L_a?UJ;whe`s^6=82^*# zb7IhA{7<6KjX{s`KZ*Xz81xwblj!qe&|~~hqR)>(kMTc=z90rY#{VSx1u^I`{wL8d zj6sj_KZ(9D20h0ABzk`gdW`=`^jF28$M}z?KXH~}DbB~sj%SSjOZ4kO_(%4Kn#=4D z#Z&ALC4c7ru*lT+vir&9_6G#Brd)3>w?CA{pugPyP#%N+a{I&8G3YP1KUBn^zuf+S z4+KqV@8$M~su=W_+aIopL4UdZp*jZr<@SfgG3YP1Kj6?arM;KiAC|_TpR_;V`KEDd z`l#m?9Ar}_KL0f1aSHQFKIf=)iF&4}eS^q)BA+8U&!YHOn(bbeUadn>^s8dft92-f zesv6bwGKtmBc4B{{%ReHqR07uN_w>pMbWRAnx6YC{YZJzpK4!-^8fNn{+>jy_MIsD zh8Xl}UyGt&7K2{xn^E-jG3eF497SIjgI?|XQS^LVSN@n}uX?VCqOXZT4>=rvm*^ij zE7rxJSIkC=KWcwa^mxBEC4JQXpy=`bVoLg`{Xx-hi$Nc?KPY;<=b2J|)c&C8@xh5H z>7(`sMc)#GK5BnZ^sO=Iqs|YCK48*c_IXRqL-YKg=y$}Rk2*gn`nDMKQRfFmkB}t& zb6I_&&JT({7=u3Q{GjM}#-NWnKPdW+81zx+2Swi*gFfo~py)#}=%daLihfrN`l$1R zqTd~ZKI;6S=(}RjN1Y!OeRmA{sPluO?};6sFevn#$ckqZysdmELCd_fl@ydON>pRh<(26HT@%5YfU6x+$2T}9`G3eEP z5Jf*2gI?_iQS^Ia(5w9*ivH#p^lCr2NH5Ohj^l;Mb<g%+jXxliC*!oJq^R>p4%h z(>qX#$D2``V>@15N6uZ7KIcM2JZ*E{clhXChd#`v{3=^MKNB(PwEd%_THHH&dm27} z#C>`%KkXGis*8WomjJ5~M@$8>-#oH>Oc#-D@1%(#C($E@Qtri{W8m04YD=t?Yfq}` zOCtM{$k;2_r0H6&vCx*CH*Pz8R_x=4%$T{*9C>|nt zh>RJN$C531Z!^cpW$D$PXwe@NFXl}tTkVI_wav!Dmp0}V(AOI^e3U1Cv;h8H^TKf6 zTKg%yH$Yz)_}c}PuY>=_ZTrs(sODGp@*P8*Edd`3(Vnjo=PxXC{7Szd{_{eW-6qGR zU)e>ZkL$z`qBN0nv{9C+eRllR6CpH$BN*ffn`48-f6>{0ablK({sym~egl?7Oe`Ni z_4UpOo*y?#I&=JO5JOdLYoi!iLTnU6b&%f~!TP}baxt_#tw@vWQylcV_1+`rgze$C zN1aLHb1Hp(ic79Jtf#I-J_E}>Jmu~b*n4kQw9eEtu}7shc+$oG=i;+hCFrHi2`3Qo zLcIK;xavOWr`a>bI+PC}-Hh~_gopDYr{b#jAioCru%Z!>jqePIp_9ZtV(73B*e8aD zYfL=V3Ji;(gG7`+9x?Isu!&ENnD|T$5OjC?Og!|SS$-yB=JyYq7#T6qU_Iz>b%-OQ z-@@Bhhq!0-TTV@kI8$;*Qc^mPIb8+E;`O|75$8GxR}MRq3gV~lzs)ZGaAC`|IBi_l zWw~R9OT?jk{J9ht|8`{X$4AcHTXXEKD;y&JC~!9L3&1(R6Tl2$7&P}IJrC*Qz`4LL z0W*OQ0)4=nKyx3`^N~IV%mRK9m;-zOm8p``8CVW{30Mhy z5m*6y0k{bGJg@}#HDDR=IbbPpJTAU7;=<>MlAU5aE~!%>=B(NDylJ-7yz#iS&In>^ zk#X&I&W&j=rF3d>&xf@5=R#W2Q+T?;y6P?#TH5K*PcY{aFz0>@)PTvFW{iw$&yQ>A zL*wK4|I|w%%Eo*NvAywA-v~+Baj%3T@vns-3UPBt?>0$_PqReun(}zZ&yEqK}fBUu%Cu8PY#ShuScIG4t=TexF@aJVoPYqUaXJC;ay9x3R1d{~jMNC;k*4qa?nC*SD@2 zvVIE@^^HW-R}fL3ojyy}ZzH096%qB-MAYX|zYX~Z97pU2hwic8Ii!tfk##H^{Mv8%NHuY*~(3w(KUm9UGnlD1x7c)&6AcV_z)nU6`k8bfx6k2Kvc>9no6@P5b8 zw@vxknUH_pl)tU)fV8oy(Bx|lnta)z1NzYGW_zp3%=U5%&Gv4rM0?*d+p8`!`Bnw& z4m-wPz};xHx|jdA;6!i?Q2%r_t+v!02&5DCw^c z);k&?XW3nvsQ2D!Eb|_c^h>s%*X!K38g;0vyG}gH{8`rw8H#WGp8SIOkmCYXZ z3wgf{-i6R*!6r=YC#F{-=+ z#x>qO#!{3o`J5)^yO$eT?q$Ye?=8j>@2z+S9v&@f(?qcsdU;!AyGP)YoTiev1)CZ@ zD^Oq3p@~J_okoeb-L!xEEBYFg`|8n-7wvd!%<`Lmt*=FS)(W)aMLXVQX8CQO=+aMt z@0b|;5ym9^UVEoRU&B#d`o||SX?JFQohP%l# zEcTIe^WlptkuOI+3z!eg2i5@>)NVF%kX~4;HRb{2X8U*E08Y%t_AvlYgiB7G0$>iew;%raCaG*pdItn z8JWn>uU&4iKC`yYnD5>z>8_M?Jw^`bGTnxx&6z}di?IOnFHg!^Zsemr6LW}i^T-dG zl%0n@DBXv?f&2yTuu%Yd&edw~UbJ_s**4}K`3k^S0QxeFjRlyaJ}JA#@S&V@n&X6W zeYG`4>Ap_Ql!cv1}D}Z zH;SY3Col#l);|CnYK$!CI_6ns6am?GR_!wA_n@rHMOl{n6w<4V5~R7tEc=os>9{s< zPG_O4@&L-*4@sVdpj#H|)K=kMfVze+oAeFd!^UdwLk8zz`E8_sSkn7JU+(QP%0SOK zMI9C+T?o46U(v*J?-A&8(r7^08t=o#YM>u=R}X1|YhyX`OTC7%1jsqP;t@@(@E$dm zBfr*r(pUq$8aHjtMq5jfUcoxta^94RGPXJ9X*7yaUsU(vTd&WuZ>jW#(eALE)1|vj z+HZrlsJ7K8uHAt(2OT(d=z^_ZKJ_;aGiJ9D5-hjty=T>*R)c-!Ux3C z0{4L?g0z9UA>a`3cHkM*9RPk6xEC~cAbl(9?gHKh#9w;6{S$-~;%yR3T$;q*?8TD;$svdWOZdbcU-heDJeDv`Vu#}=6~9xRnux!wCJ=F?fDMad}# zUqv_Vd(GI+GT3)D$|`#i<${0S1}q4gCjPGUoZY(GA*&_fzow z-iRQ5z^e~Y$7{g5fu*z#F_T8?@;V z^#VQp&vxj4wnP5|mv8kxk9J-$Zjih$8e4&F-fzpcJ`djIsx9=PYzw$N;2iHtzQR)ChThBFElI((YqF|94|I`C;25C~Ksy@IUCQ z>3_?lyfw z9{Pkl^a*(yuwRXN4jT>B3uF6n(%+Mcz2b=U%M(gYs~StR_YGw)u!i;m>&84sjTMkV z9Zqe94v=*kytKOs>ptyx68SplPgxi@)wG?mXgg)mcFN*etYUqtW6X2hXi|DTrDTnH zMvaj2;nNf3VO&&md{G|#LV5HH`(h)*p-^CF|JP!rou1mX0XC)#-KA`N z{i0sZp*xgb=O@Usd`5Zn8RgMul(!9fy}mvy$ICw`o_Ccz>SFnayz~!w=^u;t-AyL% zKPuk$Ch%JRATRwvUiyQ)^v9vCsj|P{S3KO{lplc74?yXMXSSkm;LBf3 z;Qyxy{FdG1r`_bI-Q?$a^B3!nOS}K4;`ybL!?rEE$xFM*OS>)JUv4sa|Ci$Z)dXJ4 zZt~J@^3rbd(%47{8q_f+m_wrrQPJE-4^d}H<`TuqIf@?z-!q}UfNAw+HLWE zxYgwSo#OpS@xC{~=ItIne7{-zkjdz zm*Tm6G0s0@9>Z9Q`8wvg#aImdcO|nP&!*MjD_Z}NUW;epG0&Ywy`k3_fdl)eyHRIAC@R!PH)GGE&CqAue`wOO*f ze6^XcYIt47%ud$UIV!++x^{$!9Wsu0sL5>SRFlc~Oq0p?UX#i9t0t50!zPpO z)299UQpCHKAl~%|&IpWcEk?dt#lH@(eqBGQ%CADXALZ2R@ztaH=T&(j$`_)XdY)PR zzJ6GhuR!^7lvD5bS8I+(Re1x-m!X_?|9W+nV_20hLU{?w85{a&b)DmGRbGtpB9!}3 z{`=MY^+T$BEy~xRoH08qF2lIZW2$~N>Q|8u@s8V2#<D(>!5@%6OvXVyzT6;DrB@%RkJf#cEF0&!;*gZHUedp2d|Vakr5*(!ON zUx=@2BfXYCU$((mz7?~#V)H7tzl>u`Aa1Q<`Hd=OziJ$RAI5hsLq9azcIC{6%8)r& z@1X3|Vl(f$$*w0MuS2(?H%;2KOtUVv+pfD<2l?dj6wa5larujM9r?JydYv(G(&Q0M$X|0dlY}(CepllhTB^pX|sYe^_eL57HY!d zU1)f{euMFL>QfP#ueHzwkdcddjjl*4S=ZP>wHikvxU)ob%d|vv-iFW5L#%CkE)y6#U5~Pzyz*DG zp&`ysopUSUTlXsXZjC%&Q2weilfN1L#y(AU&o+|W>Be;TTxt7~%JX`PJHyC;-bq*B zt53YMr7deJ;RkQJjGGs`U07RF5pRS%jEzNzZ*SeFi4y71#z?(7;?*b5CuS0yD zba-E(PxsC>QoI>5_LqR~M~U~kj0A70!T4adieK{`NgQJ8)4Vsr28^3o<+{zSVGIbw zRJR}of4wYEnzKZ=yW?Q1Zp4EwX=WDeA0EwJsR_PY$@Q+1NdpL1>)_p{Dv3J@};-vcEsm3?+)02cM14{A4y-o->hH#fQfjQA%J|ChaYcv!Ndn5c^J@t~J_$Gl2=1n=_HlLOKo@2TTH9F+*!i ztIac}Bb|fGfO!QqGE-QZ8WXK;`X^GpLT;yZ?2(T#b0hKo9YcFf~35|I{&6Cbf@Tc*{f7zwqh@X-z< z3G0@E8NkeZ6KI#t{>k!LK#V|_eh0W(z`G>hja@;*Aj#+lNgIj+nUfJrfUe4b5J!;oIBre0?qVm1B7K6~?=>gIL@4 z;CL&GLMJYwSG@0oZe2j@QO<%2$n&?krbVf_U z)_*gGD}9gnW1@=T<_gHcSu@LL;#D;!wzishECPfb4-A`la>T^b@0s{jww;AGG>lyp zzs0+Z4=!-5k{7ZcBrkB7yuhc(3w$mYbOPg>{SKW3`yJ?1vDrlSJMsneF>ry3rQSdv zBfpJ41a9YN778KDY18oiQ_ux{$Y+lQNXz%hz(n*f*YkX&w|_&!neu}RH?)|3LG00~ zVy4nB$X}&mp*K)BHNLY|X00uyN?u#GkXdsM7*FZD$1Z=Z^F9#L`2qhp@g zMl$5HKe{RV?@ZYXi+AB%{K195IoJt|oebiQh8)v=`~Uf2)aUc!$smeF`df zAr^Snm|&FF+^I^NY^5ED{Yg83owNfOq8-3TI1auD z**9JV{m}1ULb?@WV5{omqpFYj-hq028TBFf^C4iz4>Ykw*|`PvjCUM^PMFc>=pV>$ zrGJ0{`UluS{{VMTZ(tks26j?!V2FAHAAJz=+l!$S`tmDC2QUU1$2kt4J&gP#m8iqq z&V%(Qio+NOugmvee23Ao7)v_n108RCtRVFW<%2HgdcGuM_YA zeT{T0eGLrIC%_K+1lUQR0H3B$fKPIK@Eu6&*BIaU;KJq~n(`lpO|*gUH99d~`Mx92 zWXF5K5o0IxI|+MevwYWwKH@u!r&rtYcU{Ay#UV{>RQ7CyJ&XwsmpvrM4cgqs^9K6> z>7DEYUmlcdR@L7U!YCE7ikmlCE5ghnd9kN=y2^58vdm2g9~5VYU=U~^gY981}~l& zu>OA@buV|=1wW?{K>CFM*M<)+9KOLW$Aqs~LwxLm3omZB3qIfRInM*#H^8QNJhM98 zY4VJfU8(73p#OR~PtF==U<2t|E3eo24wdf$%kVjY5`4ylV=b#pL)^99SdPyZT#ffx z9Ip?S9d^(!Podw~Up#m5j72$z%dXdF1Lw{OJLXaUnReGaoOj1OON@Dt%{pJsF5Snv z8Fm-@COdPNJeT^s6`-qlQ-Z zLY5_?E#h>u&1}>aK(^I(A?p(CF3MS`+Tv$Q8oyAgttcziNS`7q8?<%x`f6>};%ZH{lW2FXT)ai2eR-hin$Q+$3soD1XrpdxskRPntS#H3QQlr9 z_lT0aY-_bvZ^@lzcNHyem2ww?_UHt;v+!9S(+{Sv__>lrfl{p;vP;SiO4-LDyPUS# zXe-W`b)ueaoGlD-zi96 zREx#ztDae>WWPQG`CJ$3?#jReInLbp?qn}MJ4Jgopv_c%&L$t9vjI)@=c+Z%#gut@ zS_fa$XSwbw8S8#(*86$_&eDlEujS*6%s9>ASyg%-&aw+|KHG}V2{Pto zN6dr%OL89t&3hM8bKbBgfy0;+yd%aQY-iEl%jm9FJ%S&+X+=MgsMx2+gbMHmG`WB-M=iXAB zgRjPCPs?$xt;FZpDsU#f2A?6V!spaH`25*)d>%9fXUCLX?_KyP`wct()Z{g;Qq#o` zE+k#?#{B75%-)l7#ayR{`FT~@o-5|=Nm6Ojf)snj`=DK-C&R9pSHiA_4A}VYg(TQG zopN(8$xQ`s@|-v3r_RaPGks3Bl$)HhB-=A5drva!khbI|LvHe%W?C|n z)rP%ELrjG+6!$cKkM8hjT%v|=z8fAztO6P#=8}oCE5`LohlW3q7#>ZV&*wOth0E{^ z%JO8*Mf!}Z@mM@>#a(X7ilga5w+H%KTg`&&JINI}4&sb0ty_x8`DdzNL6BVEHV~ z#dha6;H=2{Ihu>@^L#af^_iNBdhpCKll3_o-fj(#UbS5lZr0=L%Ba_(peDSmFVtMr zuN2Q6vshoOxv1yT+ca?n>&rA3^{wdF#2nUFYA(hH>hI75*UgoSH5c_?f#(&CdH9oO z`sPGUp5>bp;769jpFG1i&(!3ZzIg`hVma(fVma(eVIKCln1>yy%tQY)=ApNTdFY$Y zJoKE+JoL+89(v7X9{PyL0RMgmOY6Wpd+>KdK4712VmNL{)G!}!V%Rw(TA5EWF`P0a zBFwu?45#9)2lHtrhCM@Kg!yz6!?TCPd(3B;7@muE#qEeWV=w*d{Z}9SbqxG<4E%{> zAPy@Bujl!AgDcSl>uX%GkC|7sB6OmBNFY*^%{MEdRRFe|2J-oe);O}rJUN&U@E8jaS{5`$+4J1FlL>FJ(EBqZjgZ|Dy zf2UCYvV0&c{NdjAz(7Fw2ZDPCBsITs7sbJ@aBoW=zFj)h(;?(9%;2k%1-}Luze5G= z1h<(o@h|n=vVSQ#{Epg|Wn0(Ou5PNI=*K@dP5)2B%_kgrSqX*K_kCN{*7&gUDxa=!IuJi|geM*Ivc{o>*{a;CxA;}D{CytEw(6~MYoYHm{FeR} z&O<$)O)Y+Fo>*wj6D3C4V5Nyy;-*~|zx6%I7S^C{;#D&-gY;Fn$$xRWS&mVLUi=<< zi;u(;E_@xDdLz9)v4%W{;Non-%N zlvAZ5Rd0dCe}z?`&{E&R%_zUS3P zwep=vT#o-e#s3wHP~m6!S^O*f)C2Y6&G}&c9-#Fr6e(DZ&0nG5uTJ2PO;_5qx%NV& zczyQQN;Ax2`7eJ%;^J?Y+90NypOD98p_!X3GWrK7CW-u0e~yApTE9SHVMM90Ze?8D tLe+kuu&lY%n^v!WN70-aFcaXTlSCNb%)yHuUANL9Cjif1q^I3N{2z;O2W0>N literal 0 HcmV?d00001 diff --git a/attention/vmfb/attention_B1_H40_SQ2048_SKV1024_DH128_f8.vmfb b/attention/vmfb/attention_B1_H40_SQ2048_SKV1024_DH128_f8.vmfb new file mode 100644 index 0000000000000000000000000000000000000000..fe0854a700d303a54dba908d48d03530dcff6ca0 GIT binary patch literal 19476 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 YQH)>N;6;zFUgnS!fafpL({3UD4+QN3{{R30 literal 0 HcmV?d00001 diff --git a/attention/vmfb/attention_B1_H40_SQ2048_SKV2048_DH128_f8.vmfb b/attention/vmfb/attention_B1_H40_SQ2048_SKV2048_DH128_f8.vmfb new file mode 100644 index 0000000000000000000000000000000000000000..eb23dbde21ac3348bb8e9517183b7306543f29b7 GIT binary patch literal 19412 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 HEyVu;^pWPD literal 0 HcmV?d00001 diff --git a/attention/vmfb/attention_B1_H40_SQ2048_SKV4096_DH128_f8.vmfb b/attention/vmfb/attention_B1_H40_SQ2048_SKV4096_DH128_f8.vmfb new file mode 100644 index 0000000000000000000000000000000000000000..ee93d23010de2599742de6089839e5bd249208f0 GIT binary patch literal 19476 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 icNIl(c1(X}faasu!yMS9vT#Qy;<%j|Uk literal 0 HcmV?d00001 diff --git a/attention/vmfb/attention_B1_H40_SQ4096_SKV1024_DH128_f8.vmfb b/attention/vmfb/attention_B1_H40_SQ4096_SKV1024_DH128_f8.vmfb new file mode 100644 index 0000000000000000000000000000000000000000..de5986faa962fd31ce84fd205ea9e9a6e807dff9 GIT binary patch literal 19476 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 G?0*9-fO!1? literal 0 HcmV?d00001 diff --git a/attention/vmfb/attention_B1_H40_SQ4096_SKV2048_DH128_f16.vmfb b/attention/vmfb/attention_B1_H40_SQ4096_SKV2048_DH128_f16.vmfb new file mode 100644 index 0000000000000000000000000000000000000000..cfd90e8afc8464eb4737a46ab7045c2152bbf96c GIT binary patch literal 30164 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 G?0*AV8G5|{ literal 0 HcmV?d00001 diff --git a/attention/vmfb/attention_B1_H40_SQ4096_SKV4096_DH128_f16.vmfb b/attention/vmfb/attention_B1_H40_SQ4096_SKV4096_DH128_f16.vmfb new file mode 100644 index 0000000000000000000000000000000000000000..ec0a1a8db4440caca9e992cd19547ad3fabe91a1 GIT binary patch literal 30100 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 literal 0 HcmV?d00001 diff --git a/attention/vmfb/attention_B1_H64_SQ1024_SKV1024_DH128_f8.vmfb b/attention/vmfb/attention_B1_H64_SQ1024_SKV1024_DH128_f8.vmfb new file mode 100644 index 0000000000000000000000000000000000000000..473b221b8030016f4effc4798c8a836dbe103d36 GIT binary patch literal 19412 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 q^~~zcmC>|D^=(0Oe8mJGIfv^dF literal 0 HcmV?d00001 diff --git a/attention/vmfb/attention_B1_H64_SQ1024_SKV2048_DH128_f16.vmfb b/attention/vmfb/attention_B1_H64_SQ1024_SKV2048_DH128_f16.vmfb new file mode 100644 index 0000000000000000000000000000000000000000..cd9efaab4b3fbda7da1a0bfbcb7a745f292bda58 GIT binary patch literal 30100 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 SN7pQO$O*tR73pcW5dQ}!6XX8? literal 0 HcmV?d00001 diff --git a/attention/vmfb/attention_B1_H64_SQ1024_SKV2048_DH128_f8.vmfb b/attention/vmfb/attention_B1_H64_SQ1024_SKV2048_DH128_f8.vmfb new file mode 100644 index 0000000000000000000000000000000000000000..a9155f235cbfeed528d7b0f5615fa6d8a252e31c GIT binary patch literal 19476 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 CrgfPB literal 0 HcmV?d00001 diff --git a/attention/vmfb/attention_B1_H64_SQ1024_SKV4096_DH128_f16.vmfb b/attention/vmfb/attention_B1_H64_SQ1024_SKV4096_DH128_f16.vmfb new file mode 100644 index 0000000000000000000000000000000000000000..91a1bdf6a8be1048a3cce8cff51e104922c8a345 GIT binary patch literal 30100 zcmeHweRx#mnfEhi&J2^u*AOx@0Rv1z62nJg5|Wt21oJ^43Ev0`2!)YM8Z{OOr*6lX#Zu9(ANPGf_kBMf=XvfknOVKet``XN$`U^t`1Vs{>PisPMR#xeuC7qw z_HD2K!6t-FctmxYNjn~sP}ID(v5_@_UyqFy0c&+3`fv~69>M(v?f~we;QoCgDN{ue z7(GZiahoj(u><^+myVlqrr;Kuyv#JR-?9sF68ACOQQTd)H{izqq8)nbypcW!SuUW} zMr&)hCp;iTCdxn}FVgXnDgl*wu-&`@3a?dI0wiyl%2%lT5``-iu2a~luv_77g(nn_ zDEz*{A1nMjh3_f+t-?PjbU+E}k*Bbj8C+#5|MEY_+TI-u_q4*H^oJsqK5`&$*`9(l z^YjmKfx>!)8x;CJFlA>T&%QEc=LGu)d)kl{mAI`o*dDJ`6NFFUOocfL=PRUtc~J(h zTKTUKOBJ>#T%(XW@sbS#dt^?CL52GjKB(}h!Y?R1sqjUGFDv{ukT$%k@J9-N2Gnr> zgF+{Wm`_)jt*}Vp5+KKAm%=+09szRfy`=C}g+Bx0fALF&6wZ96!V-l`6s}Tuv%(IA zCl#Jk_&tShDg3#@j}^{gU_9BJA_x*5ni+ql1ldl>g! zxHsTlfZK!n1JL~h_bJ>*aHB}Pfq$j}+o5~__uEkN3EUfSr{jJV4Rqno!Tl2`#WiFd zZV&F)(C`u5%W->fzXe(BCsc_jWKm`lZsxxRd;<4=+|>D7z&CLJig_4S`&-i%H|nx> zcNcEkwS9Xi0zFhY*SD$6=8a5teJ!Ww#dw?+D_d;r^E^Jef$77sH9|%0}szD?C<9LezscfI8BzQ+yl~ zMG;&|V=waLz0#eRRTX>3wR=qQQ&y4L>}6fe?(Q$_2n~pr#V?- zalQD%I9Z;5HGRN!5Pb(x;Z{D&uTipMr%PdbxW6wr(AFvH!IuLX>a$MCNJg46pirc_ zd9jp}cXc^^yZSp@+e72^6yg!cv3z?{$uxayYQ^?w-zRi3hgZ0_r*&Hpt#dUJ;=OUQ zK2ox%Yf(h1HJN?e!#%;S@SP!%{rfArlp;;uE4oDFKI$sET%I7?#_VR zBFQb1DLqjZWF?7ItF07~T8j!^9;~kPDXuh;8kGs2Oj6~E0$HC($&f3sWS$|Dk|9&1 zTF0naBALl#;c=J}0&?#oI8dEY7ddIel;~7y?TT)M4N-@%*mc%MUC|_{nu2!I#+?w|0LjcHL{Spu{y55!1R3t=44BT=WFv6V_*QJ=TJgoSVjHmu z+hs|lb4N4dNYW;iq(PE)SrX_*+#{Bx4d|ID`aU5_JKzX(AM;~l91+RF4&DT@0lgT7 z4GGa%!a+^YwJtpIZNff*!xgomc7sk19UM+rOxf<}%m5yMv*4DMP9&V-7N^+Gu_MHH zB@AxF8Wz=+e{?+Q+)?L<8{Ba2NCw(Vq$H#=A=xc7nWA)il(iWD>^4YtN2iRS6c%u0 zx!Dvi1~;%rzzGcnxXk^j?87K}=M$E@Mo6_013x;h&umC1jKB*cdel8KkxMtZI6$C> z)zh5S3GgMg96zQ=wn^Y$Na8iQ11_fdt{Xv zPzeMhp+NtxzP{ebK&U;iZBW)lcJ&N|yX8KQX7HjnxUb@+!*5QMbL~lz|GKgAn7JHL zij;Y=)&s5#5kNtv$PxL78F0D%)34Pr@u&FVKKeqF2b_!^=Xmm#^4k)=vDlma`C- zh1R2v;-G>WjX*k*m%`ec%&dju`KW8{t*ZW0vDjy3WsFcJ`FzHu;r>(jEPl(rwf{KK z&i?vS+f!~5Yrx0${<9a`;w=@v3Z79NY@wtD9o_sG>H@&J6^oayUN6MH)4}d`jOxOj zp-4}ttN)>Q#I)xNgB^X5*0x?uS@EU9V5Fn}*uAF?cqJ4_EvgIyd=8+2KBNgjB%uq)Wpu`AdSI=QMZ)YGs$(D1_LqSoD^NIw>dqnh|eVRvv(>-MhTK!5- z@Pe7??+bTzse$nQ;6 z#Vms;3|`{88DSAn6;iN0i?HX?i1y8M96c% z>E7ypF8I5T&vMDIo(rU%(EeY@>3^vQ8amIk>b z{~s<*96c{Y^uO$#D5B@wPbD4^PuY%$`wt&>KXmA@`{u)@nG~YwgS

JjUb`r~b2X26=-hqU2RTvgL&GDEp7V%@&w2WE1N+!Zcq`*b>vI`nwj<}b z|0s&y_4Xc2o`6D+LZPte9#yZJ@qv3WY`Ysd|MTg+gJ`{iRrkV}Z!AKosdoB_bfsa4trDDHS5!Q!-|Yp2Omei)CpQNm7nY$a0(r#gV(-c7c~N zlax#%WfD1lC_9D^FIFa{$9S4RkHgrc^cY_g=n<%!lpf=40zCqwlhR}SO`u1xe^Ppk z#|iX!9!^S+@i~DWFWe`k$9SDUkB8@^^ccSr=n<%&lpf=G0zKl3lhR{+PoT#O?Mdk| z-Y3w{ibId_KY@OB9D2-$So)*qFs3Kh2lIpU=KN?j$90xT&vLGpM2|H`fE@28y_yHv zap*DrC(zG{Lyz%4fj%b=J;wh8`rJ7582=OK^WxBB{7<02HV!?;{{;H{IP@6*6X@s0 zp~v{2KtC@IJ;wh8`uTC_G5#meFNi~r@jrpSAPzmo{{;HNIP@6*6X>stLyz$vOMmPf z!%&=$R~^q7|5xbOfbfqzA8N1id?=pe`B3s_J|7mE`d;;Ua<%6Jf?1QUH&=T;l*OUH z+Vi124*k`h57)<`zuNPmA`bo4o)7py(4_WW?fFm@hyH5Mha2M1U+wu&9f$sE&xe{g z^jCX6;LtOvy;pla+!%*`!t(+98yrw4m9N&DnEgvj9D23h#LzE`L$B7G82aUL=+$}? zL%$*py;^T#=nfE>c6~DcsC`8YeQg|iwQspX z|HwJ9Iu5 z5Ak(toN#{@bKZz~J}CNiap+^74~ib~=Sk(qJRcPO&2i{so)3y1ufrylAM<=r^c&*P z$2=btJ-TU9`7zH2MUVGslhVgL9~3>_Urb6L^L$YBo8!>OJRcN2-t$Zn?LD6rGLmzW~Q1n5Q{;K;eH4n}6gQDLShd$=~py=D;(8rt~6g@(c z^v_lGi8((g`cNGDnDc|8-yVlP=KP@OJL1sCoF5c@XB_&N^Mj%f$DxloKPdVgap+^t z4~l+g9Qv5^gQD+>LmzW~Q1sn#=wr?gioPcfea!hm(f7uok2yam`aZ1Fef~+;{n%$j zQ25g`5I4g5e*5I@M13L<(z^6fj7lym>-lpJU3Kq|q_#I`IPu&kcdieeWALQWO!lf!(knb2SxorR7s1^@i zx(6QwXI>Y-(H8-$5l{5V{HQLXo8NYcp%kJ|45dAYKgU2=;gT(}Qlx5WMxM=+FJsYz zd~fmKrTZakQvESUuh?COcfn_JTBIJuqE@!sJb}06g-7#E-E59!_Q#DSl5UNd2V8DX z5ZORoOm`?feZ*`rG=n%#49z+s&gOg68p)V1+fUU}jJy|<@}1N-NyEomT$h}-VzKgt zVc2r$oVZhnRrcdXJ<3<3jY6Os^<%cZ=LFvE*P61kqbBCDt$H!!Y@!@tbBvhfh+ag` z(-(zkllvJWbs;joOkGUb38rj(U}I8xtS1xb?~X%{^<)CQ5r-b@$pm_+$#)KJTLL~N zqMfM{7cMS#{6fDd{^Mem-6qHBRc*ssLs?_TzZ4eO8?Tjq`HjxLbE2>4KlrPVegc+6 zO)MWf{`Jl%_Kxc$ojLZ_ilHij`gLMx5wS@O)kAJ)6zc=?OT^HU^de2JVQ#c}*Mo=7 z3)>TKT}ttYPpR~#v~=lz*3?VoKh(kajVhlG1s^?U{ENc_;EmTzdYn zJ87OPb?@C{!s*!$caQ11M8{N*aI*Y#iidwg@(_4tlLt5p_&Hz}@DX4D_*vi_;4xq} z@bkc2;N!p?;KRUcfk%OPz{h}dfsX?7fkWtzFCaZ1=_i2mfKLGnfKLJ!0KW}P0N%Ok z(D}bY`Z}av1{MOp2`mPF16Tyy1DgMV^z}%;1S|)B9astc8n6QRB5)z_EU*Ol0isS!Don)-D1p{)QJ!NiYYIqbdEXGJEMrD zMaNwCa6aI=Wb-D7A7dURU>^Mlr~&PoW{iw!XU4RQp|LUifBeNTWnf-}DR=DnH^Wkn z^QCaq^>R3x^jvuVDXi(vGhvtObl8=2G8|1m6?Ubc2=DbA%-!ogkoyK?Pl4=n7>`(+ z^bw#A{EpanZcOYyhoocB{*f_g|DAEjK4WO?$uF2~J^6Xr_Q>$(!ehgq4R3|gW5W-J zqY@tq4@-P7JR2@_fJ~OnsPN?nO2m=PZ);*GlXD;Fiq6Zf@aGrF@+2`N zpI1N;omWypT8|h?B0uSoh8K}Wd4?Fm+b6Re>5QQf=q?UI|6jiqz-gHIt>TAouFkS+ zV=pT`%(~jK=gj;&teC}?ULK=j>XJF2Fptdo^})w2d6oPzJKUE%Sz{( zWu?0==v~M!058kS%gplf+b`&)EQbu%7Z$weSU?&|jPFSL8k|?P}__I|8J+{Y9O&wG=<>7<$!| zpOXvu7fkt^EB8qotBOs&maxf})4fk0dc|ySd8OH2Ua{HUZ8d1`J7#;;l_uZvklkU& z*b91_jIG`lgMO*#zMxZwyzoA~&AZab6T_Esn>CT+Z!)OU%9@8Ax&9U-x4Fs3u}Pcq zD_?YIkQ4HD8tvX4Mu)e@p#K)tJnh)-?K8?Dqb#h6Qh%qxK3N&GJIee!3>$cMcn=tr zsITb7ehqb1;S2ip{vM;wJ7Cm$cN^3tKeSKZ=3Q-sy-}mnyVqcw^J-pn%mrUQ{wVWW z|4Jj@zuMrK+0fnKsPOkm+1=hFMwj=fw5vLFL2vNhY3%ggXY_g>F?zg@O8QOV21g_0 zEWTe84gUL##r^}5eo^p(UhlmNd#~Y3b@ynZ)*m(M{CkZY@#e*xHBag-C~tm96HWdj zMzjB@S-$gKft{dJDWE%t6Rio9E;ALa%3=?lHvrEP1x>x|Xjn~j^in~b&I%?A4-cUg;%{X*VX z!Mgyu%wMmGdH!|AeE-eHb;uXqs)-VByHViZWEA>08`UVgVV5Sdy!A%FTWeJL2aFs1 zyNw%BzUWh$nB!eyWP2AIHU2w|MgF_6?;XBW)TW7IKlJi%mF*saPjZ_}ob%T=`Ie%- z1b-O2(7)X%@wc1yZ+S^yiSj@L+VP_uf2~=5$1n9&D9>JscKm3^zt}9l`**tZQ}DYc zhW-X)5`M3{Phz0)urB=*5LvW4tD)YPRaa};t;!w%eO6t$^APNM0Cvr(fAGz`1`UgS z^!yz7;#%a(kY~&)npiXPb16HDJ0kDyE7~j`|w-EUi$Y%jtfcd~` z(35u_(o2xe0bU0z0^Z0v%!|3;Ek=GR@+H7kzyNS1>%lwfTVl*{I>dZ$myre9QD420 zh5VelB?jxW>gtU--aV4;T1nSq}=juv0T-Vjg4OWuxD-y!&Mx`yqh2pNBHin)!pqf|&dvjM4G+hmD+={1J@7@%2ZI z;+Xs~jKT5skHCgnBOAJo`W72SK(?J-w;1|8D(mu4mhC-`^m3yFX|6GgAJZfq*9Ok% zY?M{*Lz(w+$+G}-i^HATa@_M#*Z6spzR`csSmA%%;5;n9oAgge`a;l``@4)X&~r{v zhZ>{{K)2)znpomL1bv<~8d0{=|AesuSctmohcv;pu^jmu{f4m!$T_|ADNQW(A2yaC zzsmolu@ZPaZrYlIwr)gvDeG{{c~dIN*ygCO$tXsBQT^FBUzu*-Q0b4L-C;SWOLv;I zuY$IyZmUsTw+(9$)@iJTTwl2!W+C77MLZkonhdUktNp`9N$m@7-WkNk5%ZEVxMr4w zKhi4hY1ig}zWHg;d!I4#>XyrOvnkZBt??f>Rs(ZTUv;l0xCT`sU+>><)B$r*-tr|) z@?~E(*WniAZ}Oio)&g%J4en(u z!!7+$B1)}wmU@?j&GJ`K&b?#}_S(Zi&2=O2i$Lxv>ySR!rnwq`p8;BY3q!xtxX)}v z`Ek%L1wIYDJN3}{W~2{*b{X)~z!kt}P`3*BCEyz1eJH;Pct3DG@C3?l0e%^{5x5`a zw*v14ZULS|c`NW);HS_=5b3?BYXj~BhJeqZt^@cy@J`T#k&dEnC-5F%H}DkddVya7 z4uU3%w1K)I;1KX0;AzzD1AY~_2Q>F0eHZHP2i^@7V$WMY#?jtolUU->Bo=4bB`#dW zv5fh{JxY;y|6)ln4fF6xV-?0A{a1{#g>7lrXYYCIM?#bwm@4^7kEEIWk4}?VHtKua zSOK0}{HLU>67ZFV(!_fINjY{GB45^F%K01abF(F1xo3{apOGW+`cdC$;}*yn^*v{- zrw-7o6ujl(G|}q+mXuY7{PjCcSw9q_{6LB1tvIsKl<{b(#L6xHZ(u&1Gg_6La`07j z)4rFDEi8k5*Q2bmHw_;^-t*QQ++V{#z)JcDSk>Ww!wC6bgPgxHI;38&8zIG83Eryy zG!Za;Tvcmgb+7+zquc)$c-}F3NsB#R1>4@0Cg?xPrT>68(0{;1qrRUR-Jp&7e-FNo zjVRLl{Q3}eyaBw6?l9XyAK=s^`=a(9zZe?zIfwRvcGRa0-J{y7qF#5yCis}L>0@9$ zeGFW@4D)r=_lU6!^fz(NVvS%sp9bIJd(C#xNA+w6xOmie!njGcaokt~yw(3TgEk$Y zUZAJ{*$(~BcIbcLl8yc|Xy+y4R>^zT*a&R%zbf1M40xBQw$O*NE#Q)%e*`?=HQFT4 zD@G8=whpSc*iS#8P3R|JJ^KmRwA23+BkcdN9DBp09b`ZMt+A8*uTxSeO=iLtfjrc`cdCuV<}`% zhi5iI2go`JUfSJ^b)R-Ti+nxwr!0({YT8a&w4JhOJ7w`KRV zmyEFT;q&9kr0|lJ%8wve56<97B{v ze^D0wMOoCXYJHmHet*&sZ9J`H-RpPBx$#vcCpykw-&g(uN`C>RPS34h3ma30?pHRx za#=6;(7j5p3*+QjKBGMPjPmF+%G(URURe{7F;+pMx@@qR6Ml%|0p>lnuu@P;P)crClhOS{QSyDi=i zHk!P@RlFZ6-gn2@{9R=;P}&TXW98tMG->lkiibY?7bS=Mmd)g+&E%)eNFYKDrr0`^QFyabs0CR%a-Nk zE6jXV<0~>|He6Tlr~u!|x@``|eqO2D>u3W0yzaP+b^NOCL&pZ>KdMV}GRAhi@sdvZ z=NjMBN&ilxCh7mFFyrK`Q^6OAuh;r(6V#Ou>Gpf7*TQ`s=N{9i&0Lyf4L&taa@%zM0p9y85{a=MZM$Gs=OHGMJNxT z{NojS^#iJW70OqloH08qF2lIZmsI@<)GsF=;vILRjB%A`RNeKcD@Wa3$TJRezbY?7 zc`3^8Q~6tvzZv;2tNeQ8*CBsGkoU`-?fY1me~zmfxge_RGicH(`9|GW0{UZO_~}P#H1@ z8yu9KR%YfsyX<-r@;Y=Idc&km&o%4PZnx_m)oRvulf3glL*5xRrp)wiyR4se`!xL?mw1_ewPU;|c=HXHcb-9CQC{h;2C1(v zY}XUL3k|f1$y6JN2pPo}+u`=KInSM@+wNlU(ES;RDWXz8|1ZGUqOoI?M=~I_HGUwyVOl zF?!zS4H&|kZP>jfGNwGQ;DWAsON|V)IW+M$5el|aSh66EY!qwe~Cf) zv&t6gGyJ7e*Sz2~o$-J6QFRFYPCejL`o`g{HgxYI*+%Ky3-TQR^;|sH?x37N?m~SE z)&wWk3i_yUaE`R6yzGMXjT`OGuF=FSf3-2&zewt|q|EL}M0r*n;#P>EF>XuV#pt&p zU`6f)+1J^{3w55E*j`hv-9efq=sVI>6`M3Ul?&xs-coEwTpRBNl)swLSEQ@1yrBHm zVrYo-Q|G)I_}04|zFR5J7nHxe(&TSJzp+n~y)%p?Z-$ZToh5BwRC7U3@n#yC&^zfG ze7%W(hO}j64gBEGka6>3uLo;u8sd$Rhq18`@$C}K@j7o3)}a(*CU{e3<6Qva>-C7Q zlMe4I^i=;WBgLO7V}A+w4iuN)V`$wN76U!HS1SAVj|vU$nuWY zO>BDwV;b~HBH4*{r{Ei7*uM$WQhZaUrkF8yd<_uGlCMegB}`8<%kVu09H_#1q03ARbr~@^i26O>afa#bY)6jQL$aiC&Cqo~;7fGqhG$?l}=rYlk z2RIX$g1MBAcP>8E>)=U4`CODI1CxPM{V7HY=2AN9M}67GRP6Usv8Igrk_;!(DR{p! z6?NXad4{tt3FYaATb3_II@3r++Kc(dubm*K&w>LZFDY-O z)IX^%!*JBOjYO}{(CT!wDGV>(=}pBm*^hp7VO;ruv!-F)1nPJnn1VHgYwVOp4d0Z5 zwGHz#$-CCz_zZaQeM5-DbKTGLYeMrLGWcxB!Z^1hUhhI2JpnPR0OIRz?CW*B$IC{{ zath-3iHJ)(aVE&ZJB~Ssv)d5&6m@owo!DUaIEamQkCV96?$L?OcFz>zGP}n`Tw(Vl z5Lekf8;EP{9>#UWO?J=C#PxO$4dGXfq4QXARGE&`rkqfEv$gz`Out;|!QzYhvqG6FY>7IXugO?po$?&I|-h zoLg(+rmZG+MokP4oA|_tiO;-i;;CGm`>0m{`XoZ1TrjvDu$aUAO~m7?0|{a)tb0@c$e}1 zMUGYSLiVHN1rC!Jc#^!p(|Mp17~kx7=p@+hK(~s`CbHj=pGO}9=c`!it@JVSo9RQ~ z7Jg=-0J7XR4c{>ZUC@Wzd(1~#zE1`wqJO!b&qaF6H#M9o-@kZktLYcS9^EQtD*b}| zbt)EmD|JJDGj#)Qp>Dt+bpvkW{%Z$ieI4_Zv0ubccB(daK%t z3W4q|8ou)kdxwG@4%!HLZrTV;q>aEf+6e4XvCciz6S2QR73(~t;+BU;eKU+?$Y+0a zQ}$n*vKJKZz`6MSi^21-AG-D;-Sa&S--QjIe8=?D9;EktTN6|84q+?wnOC_3vA}c2 z6v#`in_gs$x2x}J>pt9+&og7?sG&9({)A`b2e%ki#}euJKF`VE+<;-L@G zZ^%DLdx1w)Z1Z8-i~KR#3;b*XbfIr{K!57O=K=fq0qTu0a|n3&B6I>xe%W66S(67* zc67E~90or0BeTCBLi)3F?Sgi7!7lm{vBD1e5$L8Lfr<1Zu#8%(88&w}4R(;I(4%FlGs1L)Rj{`e?potC2&JCz%yyFOT!i+vo|3Lm$`Ue=K ze}EnI4{#gx2DVXeU?=qkhN(C3i;qHndogrEUw#4UAjTl$I7i{LCy;-t5_OonPa)lg zF?Krx*2KilV=rZ`c#b93cSPi084iAyCm`6`T69;4K0^ps$hM zN?!wm^a-$oJ^^;pC%|Xv6X2IQKKR~b>sK|w_a-<0(3JlKY@!W(KhlZu%J(C|W;@;s zju_ja-;=P1Hp_Q?=p()ld3J>ze*-vtsW_~Ob;_P~u!k|h;j+i&xIvqndEQ_jAibS^ z0PJ8N06RH$zKcGgO~B`95Ab=~1NhRjb1lX7|j-d3V&e$e0b;tPAAs&;zWSYWJ{j zaFb7{a|0lF&r8J7Ucv!_Qe;G^fslQ%Ph^HTJDvHxYGn7j_VrxZ4@ZUN*iU|BNS zBBq*c=AdpKWLs?)ur9&wp_~P(Eq9eKU(y~&G^!d||>WyWqwG8h;DZ3EuvW*>R zgSM_%Q>`tpsn%pWiFVJjnhhH5%Lh%@xVA`JpxP)v8}%DYwbf{2RoMoO^7bgXhm_pK z8>_VjOYRiAr>JJDl)C`5hsVjCj?eO#elUH-&y_3;mTKjYT~fAR%03F&<+RmCTXDv$ z7Y%Il7}~n=9;Lh8?pajRDcfLd;E{1{ba?MVY|y}XH`^#j8Bp$bF^&4&DdW@rk~Xvh(D2b){Xhvw7Gd2ef;S3SM&hlYg4>#BiCCl{f`g zS{vdo+Yo;Vc{d>byU8f_ZbsbZHe(^q#kgMP(C}vv!6tq@?7lg`TQ=xS6B0FTpUE)6j+1L2=c65 z-ivb@ke`d?UbgBE^PJuIX`J=s%w&C~=3#uG;a*K}-CS0qd8q$V>{m4A;ZL6FTM{*S zmTyUbA6X86@(kZHO_OK(mZ`9d<*+Y_<*+M-dD!D&9(JTL5B<}bhu%Ksp>GEB&~pa! z&@YpD=rxOZ=p&*7{JR}2tpjiG#@`DCfPK1&5$BMoW!`0C#62XoGM{8(BxOiMnfI6& zNyA$Y=F?4#_=dy?^BE>aW(RnOT(X*?tGuYoL)W0kr zh={^SZ+mbcC<+Hcdj=#mzcLrap{_`8YahNHI^5GCaB5WVc-+|mi`vbMm_hL z7QZ!5EVSl{5+iM}(!^_V(=LnO`krG8Yf(4;svVy}`a0a?zdYS6$0$QDe~-MyN8)i8 zzRpbY(gt4E{Ib6Hz0WMZybf6Y!y!*zi|{YYEdDcUexAYiyzp9WIm*mVuzv;0sZx=u zx4`1R#wt)~sc+%UD8KBxakM{H?Qd0O$%@X>-*VG!D7SQ1q!NlYn>ovVtIlfI%6B4h zHU446{{@Rs;V1c7{0sb41NGv~`C$EypY^K|DOiooUyb0eM8K!ZY}zb)0aCm^`D>$@ zX0iO2zX5Uiw?}OdQ_WAiNN{;5AF!6vO=kgzbSR9L;t>0F@NFA$bB nS9;Ux)$b~rt^qRvJ~~O1;M+BL(W9%EIphT3S&HIwt5&PklA2cE?$(n=YJ?=DMhFQ50ip{H1`HUpm;eKamef)=7LsT^ z3?Ap+Ygx9*9*i+z9j{|2P6ja87~^OBz|gj_V-q{Ez?+a9pB!(_?4Fz)kH_oDcr!k; z?)`mr>x$-)OeV+k$DYkSlzvt9J?g8k9=Gb#6>Dy=%ZhiLvdFCw)F7(vyqCB>tFr6i?Y1JBoA=$w2Bw+JJ0(S@;5qLyk zTHreZ-xv4`fxi*>PXfObm;)oojv9e8seq?dlwbbG%lp0~mh5YXL&+b4mHQ|MWvlOn z$Wxj8L)aj2k-!ZC{hyk;gDBHjnYzQV!QFkGD6+XoRvXkFJw+xkzrYHCVS&>Hl7HzT z9rU#EpNw5EaD~8|1d>hk@P>hXyu{dUfnx&i6L>)2BLa^Kd{*Gg0$&AEAI=K=nZREG zC8Yl@&;ceY`vg`AY!bK>Nb|B+;B5l;18MHPAn>ffUjgxt{Z1e$r*gT#W`Rou-Y9Ur zz#f4|1)di8V}Tb1{=L921eU@`YNrWEW4{?l>+*~LmC0-d=85F`ER$J@JoSnAN>QFK z%KgB4lxf}&eKFEJlxaRuIe@eRWtuZIFKDgN`kp^H)RpX8$ofDdpTHzOuReuAA0nMX zdKBq)qzy<7NFJn5!S?~uaisl7sABKpM=`Jq#)ptTgpm&;Z9wuNokat^NMWQ8U=-~k z>ySK1Z=>P;NGp*%NEe}t#t9^5Ko{v;hD7D(fDa>$A(73efbSxGOl5Sc?VrrPxImjS zvLn(l+}#~d!46SR``eU6tT!@{9EkTO`{M1rvEBW{*qzYNY+2&zj`wxOVXLU8wZvuP zyW*Y0L$QwDI6En5w3a!oD?XBh(A%QE^ius`XDT@`)Sqe}j1Nt;`l;X}-*NfQ{vA7F zeO>LsaL@0}{&+09S>HaAjNghX)+Fc??F+eOqMr5^t~b`(+us>O^YEvjkw25OTi8%` zc~&#iP^Ni;q2NA;E7$?lg-|A+9}@h;)09dsPDR_H6>}2l8m^6WrsA<7`0?kEqd7@B zek*j)JZ$1Bl6K?rn1qjb`J`9($!=(J7KFi+=G#x_z-&`tIfABYje5TCSF3ccT=0D zTx92Pd^j!)fQPW|vvjyWH~ULt+mwQiWHPxNy{7eil@4=!**wTtK3*y0xsTE9_T+N@ ze!pBcwL3zS0MAI4>>eS@`>2QfKqvmQLe}(maxu*2Glb}-{56)s zCD*ervvhg>x9J1g2QhX~m29VXd7034`ErSLB?kv$L!Ak>2y$WYkUi^!jsoOK2MkIr zUmoRpYObwkV0bXm-WAWbld%V&$MWq_q0{uOX%)3c{ky^@b9yEF``SBVXq|Q=#(tBf z>-Rzz+1ixiX8p1Lbtn5`y~*3+tm+S!Y-vHBWG~s0;^(Mq*fOy|I*)*BZv!7a?l~p~zcBlAjlHS6KeZ!9FRJ;1 zhvsvtzjH@pVldX(-`L%O@&-Yp_J`tqgS6k%K2J}Fl|juEoIVpMZ#7ByX~TY>!`?>S z7&(DIc27f@@A70?2(v4S>$#0o+HJ1d|!h0F>_e-0}k-#b`A6Cf9raGjGC z&_l0c8uAC&$zf;%6U56V+ijNs`7R*O)|BJB^L#gOS55aha%w({RJoLbU7U zJ15xgi zrESbMp^5lhM){x6B>hoM5;RE@n!uNKr7cYxFfs@KBpm25>2?_vA-n)9;g;17WE|`p4%SU` zhq1Rf?B0ky%#ekDWW4EIh9m8QG@P3bqP=|5gj_i^yO_jtq}^^174x5l4Vqm>ZrTMN zJNm%bdQ&~yy@5sqlCY3L$~>R)F*GnbSM=POCa#T`_(s;4*^tjm!wYHIaHX%7l1(X^ zAh5$4Xl z%#tyQG}w&|*t`wM+6-7>Nbswht))(uyYPcXXCt;};vjFxtPq?zsFzSf;{!?llguFf zlCjZyi61kJ^P6+H!i8x^o7-x0{gNSQfVO`=o>KZ7jD1EW##%UWH!VDqX3);WWMd;v z^02@f8yZnt8vaYOG_}HvJd)&c=}j1uzmeGr*4N(`5A}D4h7$46r4wVQ18-!!)CWV! zK29q zn58glLC$=L>VZ^{g-}t>!mJiC1KMu?{AbN&@h5jY@SiPj)KUD2M=jcUWTD+UQ?)m> z)7z$f+#5!^9f|ru4u0`E6Wc_Y>L{@X zOeDVRk+R>r+1A8{@P-?rgVpSoT`f&>XYZQXJZD$;%-NTi%vWIhAnrYJ)`s@p5^4I-W1%_9m-=H;um0Ia zs}PTc)~k-x!2~fIf#gVf1g7iEqJ`OVWNUh+px<;k4wyyOM(dp(dOzclkp3JwOWx|= z+W#@sMdS77wkO=gZh{=O_wRkEElS+rYv6G)z!q{|@R6Gz1T6$qS4FR1b2DRio`~(} z!mN(m5>NHTdk63TH7kB166+aAwRiSo$<`i@#8N$j2k$x&iFFPQ$9mgiot^Q)!DG1B zcD48S_3j3tt1E@7c3eL?<41aW`#WO2k45^syK&iPha-bHvpb)NjKq3}NN=pKXE@dqKYHUpyl?T!(Bh{js@g~5sX=TK2PF1lWJhdQdv|Ya zsQuRd)GeZUXlOee>5J`%|ML2;XsdZ8GLTA+Am}k+e^%$7i=^T^yRNX{+if=66OqA* zIal?xSr{Bh_V$|7kUbU|+`XftzxS6bz9KUtw{*Q28SYEc&4Sz0e#s@aXCuRd@xk`4 z-SAAZ6I*Dk^On~!g(pmW&&HlMi`hm#6}dGw67Np+V?=3i+MX1PYY4*`A9@L;p3c5T z041!t#>SrRU2|KStwm@JmyNcfKl;%A;k9Emi+%9nsV3`kz$Dtito>AIAbu;+Igvm6 z8NUad=%4?OjlcNf8QLlEje%Q^nvD@p9Y8ODtNZ_^m-4c*D4@IAfGa6U6myT4zsKmYr-{kFVli|hOO``KOl z_Eocraf2PRxex5$SJ*4p7D*0G!o9&h$u=sn`_Au?C9DnSd0gmaFR;pcCW?cwNRdpY6??K|lUFKhNS*-n!GjhYp6NG8m5FUbJ?Bm*oZ8DQmoY-!DC??Bkd zNO!PdNM-DIFr3RCUAnS1)4RqqhUr(uz8tSz;*g|hU&0>!AYn);?M}8VG}pdDyL;K{ zuz^0>Zd|?Hh)Rhu_FQ&;JBl&c+ zwkRX{2`A6BFV*MTqezR8+K?6^%}1JtGzV!mQVUWuQWH`HsR5}TsTQdQDU4Kw6hf** zDn}|s3L>4?=Gxy!`YF=8Nav8=MtTeBtdcn6NuOM7U?~`PZ-u+S$G5Uvo%o1p3;*=Kx>Y z;jU4U&!xQEow&nMSicZuC(5G^PknB|=r`w~ETjB&U>?wroe4?)dBQILDv?=f+B4?x z*4v8;nG^iO&>sb_3%r({dmO%c`y>y`1Kp5+4cU(p8Cm8w+l#%-#p{2A`oB-u72KbD zWe@$%Y1Hv?*p9wRt1#Br%e9N47x!4_BA^?%1egyTLYvnkkEo7wDGxz@EBJHmxucn7Zq94S z{|efd37bPs8V*O2*0GD-FUwM?;kePAp!IzZ)_0D*Y&65hPG>TD23BF6+=PZId?iW*UoaS z3TGid%h{^yrt#5j%>Q!s;dm~ItXb+&g@8mO#);i^t=U!m6rYT?g;>(QI zF6I5FPII4?%=`4>-8gm<-a}F7Ss!2Qr(b&lcOnp@zX5*Zy$imnk|aAnx!8-(L{?-`kR8YM|TyZ4Nf@~y~2)=l}jlH>sfg^pX$o{!4l2@--%y86&=IhCP@ z$~$0>o;KU}HcB$J;cfNGq~E)sN+#XjCCxJFu4!B(lWa|EN+#Vk3)ae{yJkrT-s7-g zrYY~6Ys&jnQ{K0{S$2CqxkxsVp4yp)PUM9bg z9_|nLfZ8OR$p@C*`s=1|$ad=2S7pC1c)9&l&bFV*+4fU8+kPsO{e*vs{U5Q9C;Ug_ zKxMSY{YT?LW#}!n#vugX&^Uw%v&Mn=V7Jd22P(tPp#GZhVI8Ig_vhUd3a2n7B zw8p(gS*cA^R%_O{he5Z4J{5@H`2@qtGL6QS?Dy6!lBX&wv|7+4(CUDNKx)U^n38Li zHCmmrRwLcsnQLV~=w8tM%2ursd7KY|)Q-2cL-wLvjB+t>GSI86*L=tas7~3S1(2^q z-luHR6y(d0SCq|KK-s1RQTC%;0xSiV0ukvBmH{h((*t3xAyA{0qpYA@0W1Lql@6^$ z>C#G-7OhN~tu+Q}wMd{|D_7=d70NtqMxa4!3PiNY;4cS%@zk(Cggm}o3QhqAftAX9 zZL+dZn;B@*ngh*RDcbR}3*$=N3b_pWLQ0!9MOmbkLvNt5!CwJ=vp_GIxk;{s{>hN@ zO{?*Tz*~&^!1UGf6!2DoF9`l>&|A2^O>!7KQ$Y*PXzWmb;{$HAIPuMkAeO;{BZ=jN@i}A8PhHfDl9;ACjhy? z^m_cN8Fjv_y1H6kH*^iYp=fdzii8F&ZF-6}G z1SLjxm5|@+W}CL+S9%4rN^vd%z0{=ppvTuJZ1gdOWEAv65&F^gRdr~S*9D+ksf(Dp zk1${U3_tSF?a$J^s?O~HHT3)`-85cGUA?J$7X4ZRe)TfN)##I{zufMgTK=Bl_F^6r z4}5x+y+e?j=$GKTR@=ki<9_zBS=2_h-VxG4?ZU2E*dsi3A-P3n}Mb!z>B&1&m{_3C2_)~d%BtX7LbKM~lhKNm>oCj;B`(gh=G zkoKJg18Vt#?P|q>4z;GWSDn_{rPj7?RqI+es6NnN2=wYt1~y^MEz@VT8fsJP?dr_d zU21b{N-Y8Xbl`UV@xVI$mB5Hz)q0y+-8!U(Tl>_ht=*~u`m2H4^d|!A^%nyJ`t;Vj z)rQtFwXt-DbvsL^D)lK$Rjj|GdRxOILGsIH?Y#8Baa&r=-{oP^El;k=AJmaqn^(0PX{{m zbimM`33TaC1-9y^0=x9%ferdgft3D6;BNipz>xlWU`+o}pih4-FseTr=+@5!H2tW$ zMn9o$)?ZK`(od_m>#wRm)SpxL>qpd;`bl-0epp?hKdHip>N5Rt^??40I-)V2ldC))%w#a+E>xOiuP5suRg3FSHGvfq&}*@p`v~Dkp8-QME{X`RDVr< zTz^(QuAfm)=tq@=enRQh-&1z!r*l2YT?COpJQwfTX=ET3;4B=4R{K_Ga=^DaXn!|u zOwK&;y^QZb3DY>(xPY&l?ces2NjF|G>Beg&-FU-n|F*|X`si_!K6=8Wk3Ma-f7>CG zK6cook3D75$DYBx0sf{q3!VG__Uv0M^ZA~nfxD1(k2p(rn$I^U(r$cL>)Ug?b$5v1 zo#t@NHqPEk4Pmc4-mD#tj4*^0)YNZuplCkc74kS`YU--Y}`LjJ!({=qBc z%Y}S}kgpW-lZE_uApZd5{|jUfLYC~vZa*aCrwI8fAzv-zX$%UtluL!`_K7hl+EOX; z_jE{NMQW}7nSZ*?8Vmk@u9DaT@Kft_yX4stni!LBH&#R^ZK;yJEykn}ws_QX?K|K- zIL$5{m@zq81m7S;hcU}%2T)%)S(5IbIwk6Xzb2_64IvHCirLXX6V5cv`u*VXR7=wS zYI8ioqCZnbe`-X3riuRC*SICRZ-zM@_fCyP_d+h)A5I~kC*)m1K3~WuA)gTPJ&^Cd zLY@hEn~;};yj{r0A>Rf0PRMpZ_R8^)g?x^XcL@1hA>W+b=9+bVrz`XM*#yORT!Ai^ zyQ~{!U!n~sfXwIq1jTzYp9d4^3j96A^ewK!$qARIdOJS&dH7;SWr)W&T!5^1$-_CRPMpyj;0w6339o%W=wsCU#Lf;Gax-?!>M}dVtlW2N)(jz^T;UZpPxo zk8%z1-^JK8;s@61KizvKpZ&vlzS4njSpH$WprQkNBc~OR4)7FqqQ0!PgX!n?p6Nh- z^5hQe-<(!NJn%!Q{?^_z4WQLb>A+sf>paYCyNqblL94wHI&cTCN4}`q>Z_NSJT=IdLl^l8c1$8aaeJUE3|hFv#mD?psO17Md&lxfO26K$^}0$WhNua zQQztQ+@&0l{X2b{x9u6+nQhMC&Y;$fJYrNqiY;`#StY*+*_R=E3U|BHxRX)bplhQf zKNr}5bK@rMCFpzwI$yweQrzmBh2$rfvV--8`?~JwvBr&qV1?x7~Wh!vV~BzIV{>7Mw{g4FxHCxWB9GLMWQ)feBEq`=Cf~ZSRy}% z-&re@ZOYebxNZIgbA&zfxSzu%i}~CQs<0EjDOnuhcH!RnIQc!?I*a>Yq?q9(ju=KM z{iznPj6KQYaW|WOAMvvjygtBi0tUUDoh0AazLPTLE7;Q%JEPbQ#mXpVNMlf2QY}-A zhT?t{E2H=z#o;KPMPpFgYL_Y2MKLmpb5Tr<;#?Giqj)04>nNT`u{DYdQY??+f)ux- zcp}AqD4t01B#H@AERbS?6gQ;UCB@6811a{_0Hj!5BamWw9l&y6Cy-)xT|kQW#eozL z>;_W&sRu|gtwTVHTOI~deDes9;!uwPDYkVKNHNJ{K#E`bl%=|&MD?JuNH0;^^h#x+ zK3SQshm?8x6lIQHrOei=l@>j$H0x89CcQ?9=+l%2y;iB$>y%o(Ua8TiD`CAssnQ#j zklvwG>YYlt-ldf4aV4mCE9bQy<$djt@>A`w@~(D7Ij23QysaHo-qMaKXEi==Zk}q+ zn{Q0x^QLrT9sgZI+22ez=gXExbH23C;PbaUHj~ejiq2V*v+d*sXM9Du1L%mYEti3E za#Ohkl(uw~*Zj*pXKd`FaYw;9yKRY2bKPz1!>z2=iQoU{v!9IHlylYjif<%;`$yxS zxzE}2m7uGD>PsTw0wp+N6Zw4Uqw(A#(3g~IHuf9HHDen6dfW!R4)ElcovU_~m5w+_ zPa*2cd@eWDE2Uv~nQw&iAWwRnlSofcb3l)ytX_6Nj{~|Lid)MinUZtWxh27oT+-z^ zXU{G1ahvj$%5Xu6Z-nz8PrCAoO`CF|E4QQ`e=_*%@m%Q7RSGqyu*(U%oTSTp&hDJB ztBTvjd6X)yOUg0razd9Ab~&NT3H?sRqvZ*^@?cjU>5|Xc^Cs-7;dXHzrH1RW=bCoq zL02B^lAtRO`Z*7Ll?R)+9tY|sY^vclW$TgiOq;kK*kmU?(0!FX&OdEWPX6Wg$fO6l zud>JW$L+CfkQKjXSAv?Plxp<*<~g>xYz*I@k>J&+x5@V@Xbw-I4f^Njl42jQpsXcdE$WY3B33o)ZljX5O&?d5iyR$Xon# zk+=A-%ZavG{H@4a{Iig^_-7(-@z2PKZnO9sk+=A#=R|W9pSI1CsmqCGY{qH&zBcdr zyy!L|&-;W82K6Ty>5*}2V9w_J>WV1EwG7EMr(jw^)ID_)@1I<#GuIT*z$-g+#&zNz zMShT-kcD32DVUrW#W&>V8FX_VFJdN;k)YpQkr%~xT$gCYCd~m_epw#cHEG1}M4hW7 z&-5Yk1s9y$KU~kandfppGxMDPJu^>zDfo$#`-k(tBlEliVv<|fxpgyYs>)$b_#k<=9q{$D1Yel7kWfBn=csgl@EUo3jF6UGyRnP zgJ8r^TR5WEX_Gf%$kQ5E)$G2y{IjxC|mOrF=B>4Z|}F{t$Ao+SnykPOI}nn zgh=@ux9HZqwJ>yryk)v5S@PC8vCvv4LJjYOl_x|%fY({_)_3+6wh>d-)0UN| z>3N>>oYR#o-~aM`-~WBze_Q{zhMD!N?0TUvuT1gp-hbRMuC4?zOLX_P4|WCp zyLY|*N1G5f;S$xUChbH_LQ&Jkh6dIY{dRo32w0&D(TTeY_ba%+jXNFp8@NA6B;|CG z2SyiCak$Nvgt!g-l$VB^a;D)Hn!L<3vMb#Nu5oE;! ztu|U(LOr1YAu><~5_yr1msAO;%!BRb8z6m5HVAk@@yuzOX@xSi&WDP|s4a4|VhjRFdQA11R)1?r-28#(g{Pt+*HAcH#a2 zbU($-zB_>%MdA(oGZWYj<$bu{hLVrr-ikX7H`gDoMcKH23Z+ir-h|tQ`+I2k1n$+i zUAW(ZtP{9VB_fbTnT@!ae+l>)?!&mL^EZHR;QkHsFsku)rY%m?W$x?t?;6~_JBUHq zs>->pWp)O-{C%OmU{|Oo*wPg^&^w4#2{I@0l4f_Xr!9!~R5|C69S#qAUGi%Z1a$a9>a zE2Pii3h^k)e8|)1=M+6@io&7#@bVTp?P=>(TG_XlnbV6#a5mn%HkNRt=CiS5cp>6a@!R!c%OgVu*S((h1w91}%hTuNg%^5nhJ zotIS=M<=xVnBu3bBD2}cx|-eH@9zi>i1QQL{7F=sO=g?ee7I(_O_R@m%V2OYs1$&Q z;Pc;K(K`)kw#mLN3PVOH6l#LioX?YFnEfm2z+?G%lj4^?hS@ElCb_Ri^M()jIS6nW z6L?Q3UTJgK>|f5E3A__Vln}3i-iLb9zoB?de~0R!wj3d>H~FtJ6|T5m#Qp0PS?Neq zCf7mq9Ylp%;6`zck`+B&{OzIszQ90Rr)UOWHfYGZL&-=+nlhkJxT$Hml#_dPIemlu zoh|LbiFyig8geY(KBr`wzBRRCd$jKpI+?>O)Z5dtD}dIy8VT|139|l8$)c`BVX4+s z_U#V!1iC`E1x3NfS9GaHn!HzZ3CriFtLSohg6x^Vf4kyW?MwYUkVpOr%gyDr^epIo zs3-j^idW68P^jK??A7=K{r$l(R@z@q;Qv_ht1;eW3JA;Rlux#ADW5xbrTq$|sfQXL zVF-{8oPn|{{C=xxu?zIp+J-GdSkI)lsdDaREVrK59#-m^ku{kG5Sx9_Pk z%HUeVne(%BvapzJW6ATPT}L0Kaf z+ylvMO^9Sp0Gmjz0caxG+#-@GSQp83x{}bnVc(J zjtHs5JX0n|Xj~+oBZ<&82`ahd^U_ujN7&W~?#Nbb ztIQ?vj%PoV#pA0Ovfm@DkyO%q$ujS;k+5Xle@w37haros0% zVV}eiAF-i!t4ndh%%z)L93arc8c&?h&{EnkaZHhH zJK7hJg!$#NN94H0Be+di;|rre=n<=*C|~Bu09`N^N3;?9h#sM=Xd5seK`n&U!U30v z$Z3ixOow9%b68>ulgciV`Jkv@nMH9T1(VisSrZ31Y>^ox)*>?~!5-O)MLPmsTLfA} zG&x^3CShU8aN-{a^4s8OQqUK=NCBk-GZ5;Q&v!I~7rnvfDPForf@$$UxLp40#HwTFvPCIU=EYhUxYC6W1sNh+ z@*Xr zG2LnqS&7HLDYCyz{VlprB8L+%3(a1?Vvkun`QIAON?aDA!{tSBP(h7OARWm|VdMrg zYvDvbPMgS0s{T{a*k@+BG@6%cPeblc;j{QH`!@dLKs!bKsqHB@i4EXmd;i&sZAsOs zFt1PGbE<cDSi5HV%JrLtIP`3wyB(w2zc(1}33m10|BjgXj6cxP7j9|m z#S|7_@(02l{ip7F)*oma7z}i^1lrny{rykjeB0jA+tYOb747X|6t&M|Id{i|9?!f>pzryIJVL0|Dk}d z`#ZwDgMA2#baZ1Lx9kq>54N|^Q{rXW6>$3HN}PT=dg8w}shs4#r~F-ko{qslNASsY zeZijk)xP@YFBi4!3x@l#NSxHfEB@}l{+8Wcfq|A=d&7HG^N{dE8~Ugx&>j5Q%D>QJ z^Edv!aA+UGAD1ndVBSmqaPXG)Pw4PKjc$9!-+y`3`JOj3{e7XXE;SIp?C(F&y{otD zXU%^hHT`?rU-1w2gm}h~`m|heitR=JV1KZ`rTqXr6KcaE8fe@58V2!Y72o)`=gr(i z9lz?oHLx$ZJKT#dW$)B{Ma`}O^k;D3>&SJq^%MelW7-uKcI@6?Sz2PvLaV=Q)|AFn zopf>iNVQ`&t95YoI+LUcFoP?YwVo3(;zg*{0t3T`VSzPiF$;w3IQe^)g(cV*dnv2JO|1VscIC%lR|NrfsC?e;bk0+iG zkK0a&dyXG>o;-Hk`M`+VaAMu;=agnJPJf2;>7tGHrqj)_}(Sq&evSx{_}Th zA7n?g4-J<%dEO-+IPdDy4LrY&3h@t))V_FQ+;-wTpFfHsx4*p~6Ue8~rBEm=x>MCF zbSV@Hiw>%Kg)W6cVbLK~uh6AXC@eax>J_>a3WY^?sd|Mjg+gJ`-Kt)pOQBF$bdRc6 z=u#*Y79COb3SA0?!lF;BdW9~9LSfNSRj<&cP$(?=jH*}YQYaJ_9aHrRT?&Q5qI*@n zLYG3Ju;{p|SLjkG6c*j5>J_>a3WZoJM&oR?4CXw?u@J8f$+1A>SRjfdSBdb6=QtN5 zDXA4ADXnDO7CDc_8yCww6-iQ#O~`Vb5XFhx-*$qRGLw`{B4rXeekePN4=-4zq{n!g zM32MSl=K*1ljsq!o01;mZ4x~Kq*Kyk{7s@q(0@vLjK@jz*bk?q$M~E?j~DJ!(qp_% zqQ~YrB|XOPBzgqwr=-VtogWg)!(c{wLAYWqV)4En3> z5BNaPl=fb2f2fK2j3Zoxq|W#aQsGajcfujF%%T9>G2irP1btS9n0lJhKzf0fzpRq53_6h*%}2EAH` zqUhJepjYcq6g}ekQ|hnQp(uKs@28|!>rfQ^%BktO&(e>SC;h4Rg(&~8xZ>|g^lIOU zqHl;nulBVl`sFd`)xH@;Umt^B?aNX0busAGz8^);$93h8N%pGeiYWS;81#_C@ppy( zq4Q#W40`ok#Ph?I{b3tETd$yFVyC z#MiBHV)@1L6VIdE=S({l{iYc7QTv0UNBnt8`BD3WqTdpOK5BnZ^msisrTnPFKI;6S=y%7Uk2*gn`i>a%QRfFm-x-5G>inSSLow*1&JT)yPYn8~^Mj(_ z8-qUT{GjN&V$esO9~6Ce4Em_^gQD+=K_7K~Q1rbq=%daLioP!feboMdf#2tya)0n* ze~|0`E!KXJT7h@)h)bz} zMD`_-u~)8<)3sbmHuCW<__^$6q*HChq6S!PYmzeO zDw)LQ=O51VNnLD?RrW`X6_Rd)$OW#pCx|RrH_Ji&d}1h-m?efh#9T2nTef|h`8-5< zd|sz+dElcCvL5g2YfSpN5fiftR6YA4Pw7LXjYP(WDM#|-gBBwuA0jT13*;$KJVf#k z88ar2C0p{|VUCfj(yKkuqCX*C$eU8O+7G8|TZ~07Zptg5uQzGm3~S5`=u(oO^!*w zvWrL`*NGuSX(AVBqbyVV?D&~4h0q9&V2~$lj*SxkS!e&niCGT%8@zt{4OkK}v3&f@ z*E%D3e%vJK%<;ET3{|nMO=4&%u~7`wL4Ich>jU#E#L$YgB2BJOanS4b`;J`@w#VKY zbtZ{Vsr2>~mt1pLPhE+829|wz#@#8f_ui^#ovCSJpGt4^q>F>k#%Hfi&`X;WP9frj zc=@Ao)qT)UvuBF+C?7z&8R@kNkL5+q#8vM@el7B0MI$1c-X0J`r-}Q-&`}?-PYey$ zn0TfY7#2f^i70;}V&d6h6Q3M0@#z{M=v`iM&UF~B9CjuZ#7{qXhh6;f($;Bl+PJRE za>opph(r1KvnekA?a1Jdk6pO0=ER%VI7Iw$;B4T7z&XHEzzkp*G!Gy>59yP@xxhz& znZSpEKHx2&xgY8INS^>^0Y3}O0X_uG2C^?dhx7uZ9|h(DKM%|YJ_gJK-m&i3g>NFg z5b19K3xIzEECjv^Tm-xgG+#&hTBKhA`houiSPXm_SOnY;ny(>!9nvoW%YiQfD}gTn zD}c`f7XzOImH@vBECW6ZECr6o#dk(r_#9EPQ;f$Ybqd6sHJhF{&6b)s9+%b`K};<& zuHDJGG3~{aPA%@akQV=JNK1MWPd8Xs-NiynI~)25=3D~i+>e18Fj>=#k#X(0aV>pl zd>sFuc`-!Um@gr=H-6^pAt^iVCoYGA7n?;&V>%Tj^-S69?5wFvZg`S zd5lZUNqq#U1HUB>ogWv6&m-wLVE@QCVE?^w%szW){PgEd*{44z+Zq}EY-oJ=!B8s{ z9Up!m6p?s;XjtNXp%IDqhTa9<3SV*#UaG1V`&9bpOKZfSO8=~GxfoFCw^txg16@Y2 zKY4^+!aeCc(sHh8aTQ*XUNZi2Z6|$Zmd&p4NNTWPm4B<_bS&nr2&k%;;VBI>i#XUX~Ho-n00S^7Zv}se$AqVL;-BRzMj4j279PPjw*vj%P-Sv)5%)>U8*X2Lps38vC z;23)S*aem?&oRrE-(r`%D~ca*bfUZnGDy3k+wNG-JY=xEB>#(!BI4jo$I$nWU0_*h zj#*ZE%SF8l`92lqGJ(p@J)T_d&e%Y%$M_`W9Yl4U0X8` z$$H-{FX}_zG4*WBe854vtl}4?t=kI^Ifnk$Y`-G&i_)&fklo=UP4|mBZEG%kz%le~ zQ+{?P_!Uv}t_KJ=Q|-s&>5z1%{xy_+l1-nY#5s>@8i)d9Q1 zji`QXc2 zr-=pLwML$Iy}>cFHB|4Y@b*dB-R=`cm;0o&t2%H|uXo>O>~-I5^tvB1dfX37`t8Ab zM+4+6zef}G-n)(E-XoHJ>CTIKo%?p94t2G6YNEy)F>1XBjcoDerR)u-^=6be-LHv8 z?+K&Hd(tf5JF2fi`RdPVVwLwHW3~5Tv;3BKbn3PvQ16iZhcpvEonqnxStdT>m-FG~ zo%L9MjJN(aTjUhGcNs|wu< z_uJrI1YH(x)+X9qw_d|y zAGt6ezF2^KIr3S+d|*DX4!E#(i;;u$qFSvn7g&k1MZgBuVSFzDuOIm}$Y%nZfqB4c z(37_S=@m$41Fr=Z0hh53^CBO-#mKKjz67`q=mV~0J$T1FD~$PZ4zbYPWn_YO%u{D% zB0s-&g~9sF+B##td%vVxAnAIH9MEOD4N03biS{;QA?9D6l(oXhM|~#d5as5PA2KOB z4}DO20DS}b3*BL(0Q8)z)!zMR?{>3o%scWGfUf}bWf&U^F-Lt;c8%dfIp;LT3FZ1~ zYmCwZoth~V^BD6k3;mwyJ}m3l4?fKOT$GX4%pWxtMdgoSj83dSZe&O0PhbpAtUqZK zN99jp3{I?n2sYFhSPw4c?>18t7(`$1ps?J~+h&pAaM zmLOdSx)q<-#0u{*=yTd=K-pUFW5ybwA9dFaX@YBGIr7WAhOrdLIlc06O|0}DH&!6O z&U@Ne3%m|DZOuko%aC5lI^1&Jl!`L8Ip%3Jicw!w_rja6&9ZN;^oG&yu$uGfP4r zX%%<2Yx6s$~JnRFg5^lQFlGoZmwBX$a4*^11>=MsxO=Ca5M5Zc+VOef!C7;_bQg* zmi{OarPex2y-Px7`L|KdXUQdazCIn$;+Fv*2lAP+7U`pHT6{h5GeC=Paq#yVpEDa! zJ`CEGz%Kyrn11X+6VgXOy9)Se;2Pi=)U5-45x4<(H_C4S-UHkWd;;Y+0>1>@20V=N zn}Bx#cLL9%yao7W;HS_=0O^CMYXcqv27ynat^@cK@HWtdkdB~kFYr!aH}GlH^#Y#( z9so@QX#;gbz#-tBz;mcO1pEqcKWOek`gYXa1H1!>zw~(PCkQFT+a#8_G>OIOc8QDE zaV%s0@EN5@ynm@AkcxSD+E|A%NdFb1Y;jvEp0oGA^<#YH!I2q~uk=K!$^Y<7iDhG+ zM~yY$xzT%0$|?b0X)sl6_C6`c?qcN2I!rk~;&X16hJQ z8=I*E^eP2!c_>x1c)uZKl_7uKUQ^Z&g(yE#B6%xLEH-64Tq?10r}q`ir}IXOl2Z=8 zif-EXsLk=WF-}SV{i?t2(@I7(ws%Am>L$ht%tJBdB;Q!CTdz zDtxAot7=TF?)AQHbbH?d&pSphY4MC#!L|oe1^q|4^dIng`VY8t%=2@j8?+Jc$Kd;e z5kdNpS0AE|*MoQIt!6vu1Du*`6+>g5xS>O!9rI{IcdE9ksMj5^2|lK5`WRS8 z9|M=K!h9X`JY=i_{SBP6SR>fZr@^=UF0&oE+6xpHExh?oG~^4Z}Prm(555Q z3-t6q+oAv24*d^YvCaD&+IiWyN%Fp6Yy-A=zb)JP40u(khBuo$Uj%Ipc+QaL)22_z zL!Xd`J|Ry7_Ny_^QKNx+VQfD^`g>EcR~(am`I3^;s>TxSeO=iLtf9TYx-rjjVvRr!0({YT8a&w4JhOJ7w`KRyO5elJ(34S?Kp_jv>mT zzbK3TqAcoGwK>&sk2h(EHl9RPET&$2pdy|?ol?r zc3Cgy&|ONeixcEoKBGMPjPmF+%G&|GUfU3s9ukeB`-Fa1GY`s2v9RN3F}DIWIqe^YXXC-~ue$`3&42cY!B)7#KD@Z~Qi z@c-ike#>t1({A$9Zu0ZI`HKxFrQQEs@%&QBVcVA7F;;9g{9uVRy?%(e=0d66YT!3vKuJv21>nuwGC~D!xDIWUlUz8m3TQ-xQHj|$=lRpBRKiZ(h zk>_6(&+jL+ZP`p-+Du;BOkS=_PwXs_ZGSwW?Xd}MTXvJ5c9WlWlb>tIxt$xOzyF~4 zm*Kg53C=%b9>Z9M`8wvg%~%5bUrJ^@o=vO4SG3_ny%x{HW1hQ>dP#TCs0FgFWb=nO zryjjRP_@L!IOPy`5nhNBi~8lQLfQ;m#Kvr2oUtGx{Q6QLQFpTO|!I$b4zj3%ZOO)n>`^ z@-=3@s^K*mGdo>d=coYR+1gzW#(rL_J?Llz{-XAbjCK5`_Cv>37;+BL6h{qY{-)Izip_KF|yw`?2>W3BTZ&IXPQjDr<+W^cbiPUUp1M0A2gYK zA2%J;mm%J@6!EUdaYkTlYYFnzD*knJ&1?E;RemkX{V1niPplc$KcmVEQN9S})bre$ z_w=Kxd?m_PpqzTYw?=b(L6tY4d^yT#_pjGvIfhmFVw9JloUx$~*VH*at;&m0UW9TV z%KxzDpngP^uS5A-lrv^$#bp?``J$>{gZkCvL%ib-lrgSyM%7)1x^mRrjy&Tq_o(tR zl$WCXZk4|g`7OwQN#!>qzX|y#RQ`J8tB}7-o1Gw;+Er@?Tc@oyhM%{;bN^ zBVUL7A(gL1z6SY&D&K+pZsea*`5^M`$Umv_tB`L-{!W!|LcS6Ch|2dO--G-!D&LKK z7xGW5{0+!&M1Dx+Hz2~S5!V9`8?#$sr*M{_gol%*(T>A*D5Pkk3)+X zf7P6$jKgE%>niTpW7yR znO}sjY9qatKVP=NSiTjrw_@`uw!fTXOCWBoV)>0KX1{tIe;>woE<-;w+jiy5hsuyS zSnr_h)M7L5y2Y+1A+JNXp*Kw0v`n)uwcD<{SO@v!@f6ONv~l^1bshP*!FruBanj@| zn)I^yvM%G6nUc2vG~}IKY069s*=7CQ?wR_X@#0nb)sFF=;LbDR-311HMR}#S)JuIm zLA##lUSv4keuHiLLNlej@@}&}Jz&SzRYor0340WO-X_w#d4}6tAZfFLGxeD$_ZDix z<6UHUy?%r7cIs0Rny=A?_8G#RW!T*%GNxRRe^J-mrA9j1oRO&sm)9rP3V*)cF~gf>T!Zr2i#0LJTVhcD z+~URhY;UR5HFxJso$-J6QFQ?QPCejL`o`g|Hgxw=*+yy3MfnbZdM?kgJ1EDOxmcfu zH6adb1%2cnoGcd68AMX}wHi1N%@#H|oRW89X!%h7K| zz>3U^vahoW7wbGTvAxDjyMr_<(08P%Dl}=b%NEPEyt&YhxHjGkD1SAguSi#2c2W7O z+0YQ@r_Q;R@U43_e79DfFDQR?naSUbeq)~|yJs6o?sQ|id#<#7Y2`&d#hqbfK<}h$ z@YN^Y+0vG^mGFZ%UB=Ce-7c)Hsfag19>&IE#J5W@$7|h5Scg)KIp9s1hj#&puh${I zPCC4=(5HLn8Y$ik8T(7X_oKvnT}Fa8)nI%uTg9*WjwB8-^=aOlVFSj^ta9Dv)-VPH zVyasagWoR8ljbbd?d~|(svGg3OPZMl`-ew!S80OpR&u?oWqEwlaeYQ+y2pXKiSIec z6W{VG{14u;-MS5Nc7b@iEWhamvwYcYx*hR(&ASUW;9UZ~;78KeA2jRNJY*u?Wytc5 z*G+7D4PzSgNg_E8?M}nD$*_MDW~O+i&A_)a@!i5S5zn&ZYf?Q4vr^5n1c9fJ;Zb2X z=>>J1UJ@tZQw`I)P501Ly$iKpm(7HDEk21(=5UF%x|k2l-CS^JM75_aZ5^83yIf z09^*!aslT6Q!tm(@Xp19dL2BeD9=ZEGB6o9!<%BHU@oPhe$10)%)s;BbgU_3o+Kj< z=@h(QnSnZYZGjP2n}qT-!zs&`Bb{MPN7{|~7%zFUjG3$heH`BHI3>Nyh?n$fh8=p( zsGSSGctb~7e67nM?R1P=y*A!(VO++$JE4!uNCmBq_YBifp3LzIx5>n+SX~cDMmtVDtxrd zNW!{huZ@GOKEoyD_kcdbNCo|vC*4Sr=rkO_#99yPbVH*o_}vEoOvCs{z zu$Aj2<*k+aC)K7Kj#{UY==K;|t&TQ@;l?|?8Q7D(=*M`BD-Uq)Ostzg9q$8Eu!eAr zoz|e?TXe9tVSXmLHyRwDJ~zIL2yu9>`?+3CXzpVM_l8W2b35Yo@ra`*AZF!5eBFuX zdL8favJkVJhB$sA;?i+A6J+8Y$9%-uZHRk{C3cscxXkWy5NqwOIAXosr4t+Mu4%-T zc2_*H$?i%ZuClwf64%&WjO&VZcGni-2D^*#UU7rnwTZad?qVER+-P@gByO|27#|il zL7o|B#doU87^J4+tWFg-P2?F1@mL?vSinpb2hHO73HkZ+5Q}5XxyfyJabKN>vyIb% zkhpo)(|jg6YfSXFns{@>#P(qmgCi#He%HjKTtl-rX!!OvJYV0yedPq+eTDJv>@e20 zeRv;rH{RnMG5BmS7i|i(nF-`x!!sRplW{(v#@g8pU=en8WXp-n%EgJF*I!AVAI48MFbije`M?Eh zu>PAdTWncxc$f(<3IHeb>aVu z6*HB7LH=453%!ZDA-{vV0e4b2V1T*-ck%ga4`qD~^OUh)#8CFCHsWNA{Z+ZfGS*4-L-_g?k*d5%Qe05tv9Dfo-%A*rQ^d`>7{le+N{o^O%ZT9v}0} zHj*Kq{n1U?e{0HKRJ;f0;`c8FF2H{1+KY70cQw%iO#GJVr~OFp|E4CU;T=LN^eL#^ zgIM5sV;bZo*UmO(V_p<>XhK)^a9vNv`&I6#2f%ymcV=7u!mxwSgyneGNWVc(C;bLY zRPoUJ={Mx>qrJeBDz^Cm?M40+?FBxV0A1*tJFY-0x06_5+!A!L{fCq^TEm-VZ;VM84zu&;jG&L8ZefVCS1A%`w4V zM+))%b6(xBc?F({e)wh&?4f_q-p%w6u$}$^w$MMoR@#BspR@zmNjrcc+5vo=fK(ybT++f*MPSAER)4%Fjws1L!Pj{-Y>poy)@&aJ3tyyFCP!i>H^|3H2# z{R0fpKfn(92e^xR1KX%Ku#Vi8{<( zzLRLf7`_qjJXn9KIE-=dntcDocNiT@KnLIQJw#`%UF-tQLzQ6}6XQFIFTl^%^8w!f z7&h3k1-5f6Z9$sP$#V-eeFnyB1>Rx1fF*nJ3=X{RUQ?$>3vZL-<-7RWMvfQYjRHQP zuaR!0uYm#j1lU2J06Xau;8XMo@XH(@d`|2Yo`DfKSsN;4`!b_*IS_z8~4K&Kx^@w?X~b4`<*Lju*b8cxJO* z@cl)|Z5MnevU`JF(mVmXZjkS)UX$;}__-U}a~AgSb2j`e0pH1QRQhj({`4W*-bfz; zZ=er>N9jZ0a~xN|=V=r01=<9Bkv0Ke;&{3NI^6Ij4S!Pi{-v*OGj(|y`kv!6gBQ;X zSpPqRx|cfaf}c|eApLxRYs34Oj^1RKW5QRgAwKs0r5ASE1)uNuoace=8(~vCo>`sl zGJ4SD+IdU0w!`w%|I%D5mh6{u86!SBL2m7V{Te^RxJ1e3I|b>B zYO#cU)idji?ANCupX);1JsEf)$C(@7o$SSDr)bYcw3*7!+2rGMHlV5gRJF#rm@+R< zOF?}r+LJtU#k|z~Y%L3MGxpbsSuf}g#GgnzcUhh`Ge1|Oj~|}(n(jkR9yn87%=XHBB&RIzfv+?<_EPSRc4l&j`V=K?pNu@~(QtTD)fp)2$47+A7fL#q4u<@NsNw9G` z<>p?In+o3KIj_%8os+R|`kZVjH#ui%wr5WEzGT)RZOKiB+~hgUdXoE;l$Q+IN%)+q z4SSP@m6tqaz38zxqlbpORae}E)F1W3S5HE z2=c65-ivb@ke`d?vuxF^<~h6J)BO7?^K-F08#g2DEQmJEl}J6@nv3oEmf^X8<+C&w z+nwKlvm)!~XfC$T^VJO2XKF6$!86B9*5_z=yEQy|?M_X&S&y$Pqh5=Hn((r|P;*hg zQapFeVtujZqMpm{(8M*YFVkGqx1wJYb68)gxfma)ze^KbH&-puT-1Lho>w&H;ZL6F zn-ev8mTyjgA6X86@(kZRQI0# z&~rBP&@Y2|=rxyl=p!Nn{QDg&tpjiG!`}`0fPK1&;kY4D!+gAnVds!&Wj@KoaLSN~ zFz+%koQk&|%%_!{2E~V4i&Hy z+-Aze{~N!fwq^OYwY6)S>L>c~&rQ?+({S?%M_yJ!q4j;=R<$)gtUP%+<}5aA99r0@ z2symiR=momE1V9*&m7@N$Gog@XkoT0x9Tl^RV;s>hqA4DYusAs`vkwGzlHNq&u3GM z-GP9HHUxRY0RHW)H zu=uaB3KUxETet<~mwh*Z7J&hIwW_jYAn7dqEjQhaGD~+wDxpvDTlQOZR=ZZd6N#(w zzpMB^ZxJf|BtMIPg`aw$Uc5OUtltB)euW|htFiej6#Uf*{ITgOn>N>8h!n3+{#t2< zSuFqMZ%ADJ?NS@WRPz(^xGXetlSM}V0L3Jcf9lUsuu1C|C@hR971pnci(91HFBFzF nS9;Ux)$b^pa|31qd~}is0M;U)dP5F%O&PHEAcK8&yl&7A>Nd#!oYuM&KNou>?{-(s88Mk%CC?Abplglm)B? zj2`41NTw#nZUsNd^C6L(Y$PV}$IPR6%+A=ONV|}>BK07xLc%}R13P6($iD|!PN1cu zqa!(x9AT^!bs*sn(b22WN1tZ9gYJsz;fTu;2Pyf%0`@T7r9O!^U$sdB0`zQ-#tMB>9 zQNK7lEL-xau1;9m)RK;TaV9v1klz~_PFpO*!`CGZ?jLiz`RL`3C$ zfu#cL1hxWcKK2S65%_%|&AFojPYV11h=1%K1^!N;A4;gcUSO-hr2^7#~9V5JoVqA=12FzSA!)kq$sx1e|r(sCpZ z(s{_*gM=n#Ko-edf<)zGz=x4`Ad$@{fbSrELS=Mn$-kI=aiMMM*yc#rXm4*Eld@CP z)4nz}5$lf(C5Phu$$@xBe{9>}D0U^toXkr!z43wWIP{5nT0@*SzBS%GIuh&ZkF(>V zjn*)4>xqvg!SueUFTPMe+?`4ejSQwbhT|g>TE7%@%26Z!?;Dp5~+3YQz}?;q@rK|RJnw2?oPS2eTklgqQ4*qtcTJi$1U{ORB;zw7gXUo)7m?(9 z)P&n3v0GyJu<-ut1)ebS#Ea=fdbv{a%LN`w6JyIj8$uh=uNQnYCmK_DgvAQV#Cu^l zCroAEpQQI;!B4UpO|=uYn!`OD>5GrBlaqA5f053mrcQkL(4I{?O}@yM(fDXw7yu8! z=U-f~+lM^qq_J&GK}Ir}T#8=PdcI7CIlgQGcq|{U7W~}D=ypePDgRu*m^Za8LX!ZG zHi>tS;N^Wznd3`qXAia*6aLhlgS#-3hh~d|}WK?|LC44|$RSgHlVEM!B5oE6W)g z9Zq!g#3$Ry*pDH{^6gO})AX%r73rh?U1F0ty^@0i9bGYKr`?FL-%OJAdm)Q#ZA@{q z{!ssVlLN8-xK^V1b0<{6ass&kuRTKWV#}*h>$9 zK7@9nKQ4I1+DaxDnvT5^e{6U-p2AN1>q-1y3Vt!imzn}n{G4*Be#`jkf4iW64)SD& zm>($!;0~OEx(oafOEv2Py|uUDBZFCI(pyD6eU?$ZbzXZ=$fwWFOV3%yL>u?pm^p55 zi8_)&dkw9e4@I51U(yC-t|#etnM^0>=yB7b4NnMlB<~7)Q}1AEbBsQyqJoCzb84`A zb3XT6m{O$fV6C(0YmCj7Nwzt3W6)a@WA@W;;b zQMUve?zTMA##kOL02|9|1xPH<{D{aS!7|Gur)ROeMu3Cm+2ONnmPb3Zleu$P9*K4F zimAD*z*6F71+8eHCm-7?ISG%46&O52$CUy;)ll@Yd_UiMNiX(N`b6e(idlhmZz^SZ zlr3kTEQ6?6g(;I}sKam)IqAqYrjXT6V=ZJEFx%pnso8KExv= zNfIPU6OurecBL&z?HC#ZqnKk*Ki~tS(?MPweXT5i&2pA8Rs$_ z=^SulWvBhn=ORhS6=U}1Fp1|#y4|2woHS|JpulBhr%{U@kl;0@c($#bMnpy{O#s?0 z=wwQx<}xrkm-O73CaSfV@{?zV4R+_G;f1tpxYCz%$tD*~5ZGbOCtA<2hxcLfoFcMy z(9a+V>&s&|_`JndU}M(&!Yp92VT}{X=VfAmEtrdGDQ!>72Fbd(4_J?&X3WyC&BF}7 zOtFN?FId7fEwO}&%FgoWpeSEhMGlsaMVmEYNftP4#uOr!j433+ZnR_5Ho$8$V1*&^ z_0s0X#!~9SpDdKu!qG%QzK~fyD6>#6p@zl>ocu4DLGmSIt@i>w<`<_oXK^7014^uF!niBGSe|NJQlkSS$<6$HN8O-@yg}zFdSvEC*PKAOod0!U*D*_B){LC_P^$-AK^8(qDGRe2 z#0Y4&{rb3QW&7 zGt05uS`k@s;%`15FVlXD?oy=bM305$s9)%h*?RfkR$7&KEX08Ghs41IF*||eNO}aO zYt5pCllf@bq-Tlt8!yHov&dR${nI1#Nyz>wd=|gezqbD|(nI6*r|J`KVmE@1^!-O4 z(nSedi1}QChs6L}$Z0`IZhjDLA)vY!xFY9QV}eD6oB@QFyQ zZz$E#J%}Y-vp*6`^$p*D$B{^^dt@}$-x2HXjt>tX!u__VV{o8<8yb3gQmE>{HKaR! zps#GGr*FXd+-3Dd9y%21j}7#V z#`@w1Zy1UXEL;A|B561|luUS(iI*eUA1|HxmJO@Dd%-Lz#` zp9_~NC*E)DgXo(ZKCHtX^DORDvKLrs&ykt2{zEU*CANd3gYD$#V!JrvI_*2^3omK% zHQJ7n|BdQpbBHI*bT9D${lo(-CLUnhq?$Vj)bQE+AKw=tZ{9$mb=Cey#l zvjfwwl6`fiW|2dZq5}zg^n-*UrL^1GlF(fHGVRVKE5io*XuDzMCL<~(cCcgNx%THZ z7E+F~M*qc(6%5W`3WoL+866{?NOu!NUccM zBF#g(25An`RY=W9O-PMM5u|#gI;0w;YNRkyB~l2f9H|tk7%7N!R-0>oAL%`$caTma zy@m89((77gD6OTjG2K$I>(so~J?A7lb7mIHy#EsVKPSr}%}2eR>Sag5z*+8FC}*K; zI9v(IaXw*pe3-DaU1wjxE@)?WpMAw4u`$SN1)T$QX@|R7MLwJIZg=7~M}FP4C_7Oe zcX;Zu^Txk>4azdg-v;IY4cVEH#ChQ7s)BUoCzIz&Xd=j>!uhI&P^>uR1 zLdeCv*0})a1}*~T0!N_pI^+@LaV`epdnV^nU;%ImFdsM!n(L8QkY5JGcX7@Yz(U}1 zpcj||%?-#GA-@tB1l|Y?09OJ1z%8KpFUXf6-v%rN-UKWGt_BtZhd}ckv2@LvXc2XMhXfnIwBpY&Tj-jBI&bW_eobDuj5NBNZ9OWUO=GY=@ z?kyqh6?XT@%%`3tKEPS#Q*YA1%K*hgCp704r{>yHs#QYAMq4tA_KixhZvgqe0p$Az zu-q42-E^20ol&9^J0TUF@dJ&;Yvw$;sq~DoSYj`8M1%nQP94)LY2N`>!?UMo??Jwf z=l87t@G#ROqz~9c^uT>Y4?JkmBY&9ZL3e`bM~M!2jOc*JEjr{+WF#X=ds*h=U8k7s z;q&Qv*Rafhk!-~{@p5zlFLxsP#>-0<^D?bzUS7V8mmj4d0`ad}$;)Xv2T^%-8!vy% z<@{bB%X|<{kUifOb>8Aq zUPm@QSlL5IchTLLn976C7jYF7l z(l`(u?DkpXKxNn&)L#)kti`n8ejVrj<366X7a!losk+wl=kOj=uufU6alf`SalPml zpKFunLnUalL0bjP1y(9i%^K?}WwBO`dI##K16@FC+^d!4+H_^5W{rCo?RKE6A{frxwuOMqp-8G*1?AE?$!QC3hc0~P^;N|#oo^k~IOvsR*9r8NXH;UpvU`4!NO@_e+YRW@>799V7W3+t5B}hW(69xra+Tc3_V_U?u=5q zOfG@EkkYD6RTgNakQ->I_m@H5Y_u26S|^u7eg*h^)2sa<&=#UTFk_`W6||M03xd81 z?af@?IynrQX=n@1toK)=-6!g&qpk+Bl$mw@TGT5fr(q5EHzMTl_a?0l?JZ~{8_1V7 z)CZK6I_2?|0`l$pV`x7NeSYuqRQeABguN%1n-N+T_ zMz26O3ObTIrkHDr>k@LuNCwtfkoq?Rd*ZAhPE67F13`(AT}9-#+N(@k{mhp)yBOyp zv=^K0KFIMk2pfG&Asz+&P=tKwzN`*9d0haqmD-3Y`vCLh&h#S>*?3`% zMmnJDvO4H6>majm+O?+4X67xJUe0xKnaK&6vq|RczFzv#6FYh=ID ztL0BCmG||nQup^QR}b|qQy=eJqIyw(FtAEL5LmA74=mHm`x0t^_JO`mHPp9Go!Ylr zt((7IZJEDDeQbW4dU*aywGiz`0_*i-frNfE(5V;CA5(+0@5~=kOXqJ=%jS2f)h+$% z^p+mAre&jA+tRN3(Efa&Uw<;N4r^|SKC{J88(X%kvs$*QO)V+42<;~W+x5o-tM!)x zV|r!Ft!h=vh#GDgP^Y!@stVd)4&16g5m=)i4-DxuTJBWqTXv`oE#qpWMN{#;^4aw` zm;0KRHysMJ>2%&Tu39-qX^u8M7uY1qi|6>8S2sNtSSiYD`2D|_>96ziG0w`!BQ%FI zIL_TT$MbVHu-s}#9ycVkgSMK^au{fN3=e_nk^KdEllUsivr zA5-_}2h`>IQMFUwuP)P{RN+H)iT=2{SAR(z)1Of9*N>|Y=!euc{W1Eo1|pz;`BuxYdQI{yDSV_?g*m;H6z^$7mpYg7zoO z_VFjp_VJ@;`}nhrbyE8Qvwg>7X8R7@q=3i0e;aO0&K%Iai1$GW(>U0;fUlbR zZ+*dRH(oN^jaSTe<26(Nt&f}SK z7CQI;qq`(|oZ$k#^(#THns?*4-h3dkWow*V~pd!?%ICHuxl$ z+M`7nJ7XZgkh{Sz<*L2f=l&!!>vHif`%lg_B_+wdAt;%3h3s!`_C@nH6ia^tzRwY4 za0S+DZq=u~4%*q**`=R;FA&WQY}9gjdoKGa>Rkaz`pKfAs5{W9<*7j}kGB=FKTf3B8TbLHr)UKSl6+1%IL7{~`Dv68wJ+{s%ANFBSY{g1=nwR|x(efd2vT z|5xzd4_>lkvi^|ZpDOq(1%H*`r!mOiP%7oCn!b* z=Sqn^06(?NuuGl|p@}iMuc0hDWkaQOpBR&T*y2%3wI6`?{^@pU@63v50epkE3@~Q7 zY%l8bDTOm6bXvCSONxv5~o+?S&Q)P}vSoCL_=ufri&venB zdm1)Gch5A(pO=Lmk6;LjEON$@8Ge;@dJFX3l`-zNAa!EYD*aq#zm zzZ<+=;JtJ_WWk>$_#J{jTktm}J6*G{>vmtXYaxU=4e0 zThHGDH4mDY>&)S0_fEzUON3*7$i#wH6Fr?KP9gr=a1SGXUgPwzU_g?vRt7xr)7RzNiHL$Utmu2c1B ztDf40y_DB^n5nyj+Ge1w<_5^X9lQ?tf+~{^@(V&H-4tr8MVp6o;eK9&y!+}d?D@P8 zZjy^Wcp6Y&waBEYM!poX$WO3i3i*lK16g6Tg^NtOX~=u7?_%UXv}1SOdVVKlRiVBB zeI^@F&aXr{?-wRd1@dm#!YV&GkB!bvvZ23VI_k^61sdomM}7+WO!k%{AA&5>0lIv$ ziR>*yea}LZp6-!urAdA+5Y*}HS%S8F_>=lb`iYl(LU&R38w=#01&a0ir+2uBwivV? z$R|5!TsaTasm?4h_(NZ92?T-1lyX&QIaS8->21$VpGaF3(D)BU+e*(>|E_%v_pGq^L` zoWU(YtrvO3sDcz*=y{`3J`Ua&!FvLCyOX$+QQV+stt1}{wBy{kPJ00|UxLh+aThy< zyO<@*4>^9wq}W2wOH^D%^+T@+*T-`K_PG_ZyD8)IjT<39w8&mx3zl-D-b+g9O02vA({jJr3+*lW9WXEY()JJ z$!6e>-08F5rE&HnHn$J{-w*%OT>2q&KXf(vhBoigO7MR|z6w*@LumWa+-|0A`pum@ zuCqu&+~b*Z)oZ0-C2;o{DOe5M^M({8U+#TZ3i7d9VV3U~bPq0)g2eX#<^uU7INxjD zf4mH_aNPY0*>sMTtc&^{oZDu$SFvthU(b5U*WMLjGiKScfXDC(Z>W~2PeHZGq~|Yc zLSBFsk^TNz^*om8n~!)S>1kl)R3Dffk?P-Vl*p$(#1bptm?KsF{2GbYOvC&piG1N} zspLE(rHGM%cchG7nFspu;wrVPlG*Mx@2?|;=KXRcfcJrkj=w|)EMil+?X_VZdo7$% zEtR&^NM%>oN&flu673g(Z$~7uE2uVd8;TY-NhAaJNUnRd(A154Eu!tHR~SCIfMg4y z&^an}jzTB-IgGWU{~Ug6X_jbC7hZjpMDy7YHpi<{v2V?HQdkP zqJ@0!236Pz-xMv3aJz8te4P9qZkf$}FjmNL5=RW9n0~SaEMZUbc-&2<-^cvy2(J$? zoPg0@%8runYu-+o{AKKEik(sHhGJzDGo&%7DXNkwMniEwij`4(km7I@&!RD?X|c-` z>!KJL#knY^MsY5R!BISs;&l{Hq}Uq81u2$CaY2gPQ9O}iKNL@-coM|~DHcdEL5dqv z?2_VTGk_F(s|Ql7t^r7~ye?oVup3A*yB;9L`{F=~2lfIf{?rGgnAScZ#Vz*(DZY6C zNO7pgfE3$02&9+FJfyLdjpuFz3sL z26Mi2%;fX8G&YORld|sFlC$;bIcI!XsRQVUwUx?1Ik~P>0!kaYN~{0vu2VMl@fk*p$;%xr%QrchkpbK6jtC=PE&09@Q5`!g)$?%qH@= z(#L1A3(&r(ShKNTfv*YE=%X_>$aR1wx8!t{qojDuL2~j@SK@QIsa`1#yGwjyoCbN4 z(z93^$K19BXY?NHoWHt`gluF5V7j%AZ9&uM#hk&oMytCWZHihN_726>W| zQ)t?h4O!Vmb@=JvM`yAjKU>MyoWd?A>~fMU?`gYp!mdhg7pGAwxhyHmw95%uPT1vy zEGOhU6_1u9?8<>%IV4LyZO@sotD4)zX_RU%%bso8l>=EhuuFoh9LVQ1@Kp|M;&L3Q zo3N>x+ca5@oMYO=<-jI8$${+4>~a2ad$Mvbwnrv8kbRjwu0L##WrM8vHM^O3jczlFR-KNoq6{_3n~t3}^}yhT47d5eA) z@)rHftZ1i2-+;VDKO-xerTDZ?i>Ed#nz0!t>HXTA>vE!5GBdldOWc7hjji6*ZiCyIB<&oap7 zG+x9^z#~DvyDTS)_qZ;!6`E}hwB?rMK(EsOgU%6=&b@u9+>QcJKXPe3=lS{@QF zC5L9si8LYtZ2hk*6I7RFxIW3r(l=h*gdP7s^xiUy3=HBo^bx#7{K{$NN)*9YgqaLUN#w@n0z8ReMG+lH>m|04Bg~ z=1ly*@g3)m=-QR)ilqxL_T<+qk^i%iaA7hZD;IFne#MxNFo29!^H+=bKccR;N#*tiP||bh|8|AY z$;3myL7e!%uW;MG?7zLTC@&Rx@edd;6Zxn9oRL&ozhJb`@R~|jUGH$z3;hku>dl4G kv_|z!LG#J72|jWXd**txOdefzeHLE;^d3FYQ@vT<2YEsHpZAFHg-ITI|0SGvpCKI&e!eq_;b^qbWbJ|r#+6_9i_XY`TzUw z1C_NToiFo!^UdTX&;MP{Irp4%mv`@ZkJ6gucD+EDSBBU<{lDHhtgd)5O>}g%^tFcq zyLP_udz%n8;THcs#iSjHi70AVS6|PX&A%QVE(GT4NaNmy`wZ@vaXWE;6Zh2wQcf0W zV00rDhudsPh*RLFyj0wjGYPlQG2D0IZo|C+cQtPOU$j6^oj1}SLzWY0 zwb9fR?hN+|F&$+fkr(NBNtJ*pGACfWdHEI2QCJKlZ>h?ctNap$D-~`~*ru>U;a-KO z6%H!=zQUg<{9A?ZDg2GX-z#)L3F?ufu!tF4r7Hj7KgZhM5e#=W!J+hrB9%UJAaB{8 zj5PD~4>4b1t-{R;SAAg0PD7r3Wy;P9_U!L$Mpl&Jw%TBOye69$3{aEBqEv!~MF#Un=~q!ZikXMo49|)JdE1$8`BmS>N56r1a|iA+7-ee+^5R9 zj%Bn3+XLObieYgGNU_7z{7D(4y^`DU5{cB8!_K6=N3n7_JR8M?%3~`0-=#aZFN%^IuH6ISvb@h_GCf zuDLxByd#K*!(7l=JXMMZ!-?(6M(LO9JXT9W>;$bJb!@9w@o`KPMsO*OJ;;;ydUsw^ zRh$~p?#qgwvI@;+ujy)bcTb=-)GPjGM4P{eX|us>6Av4%(QMP?3*6op>I*3a;34?% zfqX#SKbU>~smVgnPP!z0GZ6C-|~JL*8B`BME8BfI^XmhQ(4&&e(Fg`+C}% zT0$fB6yg=gv3&bICDZh+sTJF!eV@?D9A4qB&ZeC~w9eHCbL+R)Wu+obJ$V;Kq*~+I zw=3KkY!BZV615}vHz@w=x+718%zNaxi9%-`ch6Kw7(*tHY+ zeX5S__l7!qxZZP}=e5L2pkxMCm1W4^W>(?9Hmvs!aRz0F=mdG$MKa0?vEc4cVrxPq zaRS&xQZ+ymN#-LWiGp>JM5jAMQXwEtB-!D!Ng|0Wv{NL;izJG5$%2doG1+P)QB1Bz z1+Qc*t8@}Bx0oE232s-CQ{{Tg#xO7@TPLD4k;G)Wa63%e8%%DF#ki=G4N%&o=oISb zjBbH|C=|5#byi26(FACfh{oM=XS5l_QSNC5aYr}f0m@uF@91WTmbs`+xT4&DM>$#` z!xi;H8fV~Gt=PtG#fDaF*Cdf{VoBP#k~B!tu1Nyjpli_5X)`(@ivEg^(hhh6J;nU+ zFnc{+*ugtpY(|GgVMTm2O*qg_JZzf;huegG6o)fvLoH8~QK5sw!T*BN6`gSd9x`dD zTos3eL)_vJjk4#&Sqb~Mz)MkG^@5J4nJXGM7!PjD;lWh2=b|K;vLmI*6s6mvti_&^ z-G&BS(Mf}-hsNyjO{RFUe=~bTM=b{c*9GoD*=w#Sdgl|CI|oU%1%rF!$gn~0_(6DK zP>;F>M|0^W7Y7LRu*MT-F0_>TjvP}Y+luxDB<*+GqjJ<@t8Ek3=)xEfderJAN|$-T z3(61L2DL%^pdO{9SPL-kK#l!AI86B>DyJi+D&38#%0Y>#N-DcZ;)YPaK8NB&GA5_v znkEi#*rHQNtVO3#f<3w!8;~e?ZBb|u)#Pkhmxu*qx(oktAio7}CIvmAi)2tbP_CiG zF8|9>#yQ9phNE;#%5{2-E=g~W-x)4+Cpu89GAAz;kpn^kBn;jn#D^>tqC{5imn#NG z02F4i9^HbSIyA8Qg}rGTg#QM`AX^d9cydarZq|A%8Zg8auKMJOcERl<|KUdX1e65LzAAQR9jeg4ud5j;)s6&&C z3^ZALrKZ9rK1G`3Q>1Cv&Hzll7GJWSOBT|qb*t-Et~fb7T!J+Bvst+B!cG0@*nL40 zt4EZvTpTjXNw*aD$mi)uZGydca`ke6tGjKQB z>#tw2M6=ndIm&q1#Z{?`nG>Q~C8FES#0pHSYEh1!s74R5UrhZix=$j94KEAL-o0** zSv&f_)tr5}EJVl3i{hYy8ihbQl9$5hdNXU`NIvQsy;aqJDi*uVEEhoYQtfHT{V{wN zzh&RLf9!3cs6Vzn{$kRYEAoXdw?iAZgfxezl zPgBc&cqZJ8MKsvF=QRxCYbw6^?=PCUkve`ga7S=&Xjh~QUCQ36{<4}~z39(S?>CTZ zZSE`p@W!+&C}`caucD;bnuS(>*{mszsXFT7`jKMCY*y>wiq$4b17HeQFl#+koTRsI z#-F(EJ)p`CKlzy%bG|j_K`t5AbK#S1llRZ|Ao}xl9<}_lVw} zz^=`S|NXykY2x@r^#1?1cY=ssa6OrDOgw2jChk9a)OGyGQP(4fk2+oMXnewy1LC3R zQEUaGQE}|T6r1gUO?>aN@Z@Q3@$iNFv=6eP+J}Z)9KYZek6dtf>jw6zSA_TnM@qNT z7`7d|!2L&I^saaIVFLLTx)lnAh4-j>g>HpHVc`K)uh6YfC@egv>J_>b3WbG-RJ}sC zLZPtmURAHqtxzZ|yie6DbSo4J3-4F;3f&5Y!omksy+XG_p|J4Ns$QX6p-@J_>b3WbFasd|NOg+d|LiYsxp z8U|-x;8<{K{cS8lIXVP2$195 zq*wDGa{_vd|55a_C!ojpA4Q)v0X@e5DEjOP=rR6B(dSG+kMTc>e$E8+82_W_b0?t3 z_#Z`|Hvv7y|0w#o6VPM)kD{M90X@e5DEj;f=rR6B(HBfWkMTc>J}?12#{Ve#8z-R0 z_>ZMOae?6{&fhV|GsgdQ`n4eZ1J8%*F`f@a<2)aV|HS9Rd{f^spC@BI9}vtMcYPY` z`A|9m{aDY3vI*$NdOqAV0sUCdhw=&N$9g{CgPw8i9qai}IRX7x&xe~Qpdah`P&EPl zSkH$A6VQ+Ke88b+TzkiQJ}jDme$?{;`fE>c3t^nl)Y+S5kp@+0X^h!{9UJi^nzG30lnH6@%(W8`LG2aEqPz?;#?qh z_|!SUTh2Zk>)GPNd1Bc1*ad;digl(i+Ye%&h4OXg^MSlpzgu=%cJusjU2nyQ`1-i? zF@99^8z!KS=_f^x`182(W5$7^-!uVz%s5l@cnvnL{Frg9=r>P5A2UxBJ-TUJ`D&et z=?A<=8<$?KTQT%_e=#n-TDM~8w@pB=)~y(NyyqELzFN0p=ilJ|sfL^Uz zG4wkopjYz)?+kIiR{jr~^c=Sw&qTLEq2@{q{mu#K)%iJwzIg(AwLglXZ<&Bz?T=#U zLle-e{ZS14t_kSX{wRjNbpm>|Ke|RQ(sG6o08V1eD}I{BejdxO2h&os?oan-xqPW5 zjQMa);hK|>Hsf+sJZF>ZO&f|(<{sHsVN(~k>MJ7qipbay<;2kMo`7EMrDEv!OhB*p zQZe-H6VR)@R1AH`1oUbz6+_=S0lnHw#n5+6K(F>vG4$ON(5q*Pd3MGm>Gq8qi@Nsg zxZUitDB@8u?L^p>X8&+ZjM;x`?!@r*OrW2dJ2CXV=AO@GE0Sx>nC+-J6vNjizx}*o zbCl}i>Zj&X4BuWM?)QF>H7<{uPcb}qm^vog{=qRWpPE+|-$L=wm3yXZkeoOB z_)5olMHfSQHEk{=&h44Qn1SVS+9C!lzUhCm$-B}!I3M+d9kvGNZ&3N{fKU0&4q2U zOsyH0#eZCO*=?F!=S93@1?6#knLNex6L`y_CRPrgdM1p{7n>xVIo?)?{)KE~ljyG{ zxeI?l~KBdxIQ&Q#gn)TF| z$o;SEzf)gsi(>7#L(#gtX=1NRZ%Uso4x~G?*2L>2tKy$Pv*Alzjh>CG+Kc=;&*>HNYoBsx6 zSl12Cr9z`p_( z0bd2;TUqCwp!o*U^O62Kuo(DXfTh4!fF;0vp!pioHzWNruoCzZZ~^cVw*tBS+nW6lWZxu!*Qu?QN+}u!`eL@^OIgm zZqwpk2y4!-gtf#o*s)+;_2daH^>p|rm`CxLM?VH?zywV*28Xp5hP5<&J%<0EdMQlV zm=9sLH+#Aa8%;M z;Q@&cg$E@*7`_U;1HR-uyu7el>{aQ%t6ePmRQhL2mWf`Key0%u5a=?9=bTsQ#i>YN zKw8c>Ew0=r(u#*)scECn%(C=yZ?3;s9NYGeCim6 zMAT=cO_TN8h^SvdM12(z^|{n*5&NP32krOuYlB*J4a@pIHOU^eW09v%ZGwG1 z2<-oXY14-6gAUSdxV_Fn8Jmg@I$D6$u$ASTI_ex7n1^jFug!bJQBCYy@92Ny$VHYd z&Nj;y-)@(@ONt(Gw4uBZGDy3m!|qtjJY=xEIPWP(A+c|&qyPIyF0!m7+bk=&{gU2} zd_H(tURGq5mvvmyOIQvWtPkY9(+vUj{d(k+b_>}O4_w7YT%u>;_F_`IZ^fX;sA|j%;6}k=?M&%dttDa!X%wXpj@~ zv>7d)-A1dY)1dzrRy^g{<>@xcAfq&_i4tF%!9H2F-R>y$?KW)S+3k72s6c&r7xs;) zs|;PzZ}N2-HJ)Ch+OyZ7F1f*j`cBUpBkYM9ZJq-L+nihRk|Pg%xvMoX$G6JJ^{p{D zW;TcG9Ob@lDZ9gS%xL!Y_`;0EnqeiFaF-gBQROhINoW=KRqRw}p zvDo*3q+huGl3we%%cwKft|8p zwr7cv=~-+n@ZD)F^xb7FL3v@bCW?H}%eO znD%dfMPG$-e;wNKp&ehfS$@Ya_0=fPT#9ylXveqMEWi6>UHU2b9TP)8!kC2LYwnZi zuRp3w|M*1)?arvH^=8ymn|7vuiuK?f@-8uE$2r72PrH!;+97YPk%9c|nk5G7Giqv$ z*`9rpZjPkuG_paL;V~p__9)srjd_@Vxl+~=BM|FFg$$s<=Zg3u!-A(!@Bz*w%WxjT!6!e@^)L{YA1)y8Fa!BzU&6DYW|_ftaE))kD6W3-tviF*C}Lhx2G`8u@JCwtJuTX7&^J5< zde75FPR$CrZY~S8Xls3^j5WY4)K}iC39dmE$k+M~88yIcls7)3i5$;qqtSQ5Xh7LI z-_yogU=HeT#@fv_s}gyx;kCdyC|~}pxehlXzutG+SO>hBG`N?u47c=0u_&?DS?XOJ zHp^c}Irowau)jVT)SQcePXf88tU>y4v*xS=eg@M)Ca0(=Iz1$YSMw*v14ZU>%5c@ywi z;HS_=5a|P`YX%+!hJa^K*9v?NcqeGWNJmk(2Y3%p7UBKso`#}>$+CW`Dupf92 z@Eqz60>2F02bz14z6*8t1MddnUwXX#6ND6;Hi^YAxbB&2LV@K6~HWKSo&Kfhm%&~G0-a-3bHMX-1_T7ZC zimntv|GdflHT(mtpnrgst-d#nknekt^CP2G>h*>ZQoI%5t?Wq=e$&U5)h1ST`Q9-) zd~bv2U89S%*yEM6?Y!A@6Bpy=>!@u@-o%?`4BFJwUxcPye$W`k(F4|G*_% zd@rD#SBzUF?|EYju-W&zZ0j@NU834TAIi3XOM<>Z@O;N;mOQT+K_J^YtlDBf{eU*1 zpMbUOC*ZO@zMmRl-%sS&J4xF8?B~BR_K+X8J&Ceq)D`{*eHHyrIrKl}tiWFIArE~*o_aj5hP;Q3 zdg_I-{WR$xOu@6_i1f=dO3n^7mT2!A%3feK?FH5jd5;=PA%i-c+5#OQ>oj<2cLUaa z+VL#%wa}lkFm9@7J7v*!%A)O*#j{xX+7!o-_qfrZ^g5$t4SBB^VdcZ;M##gssN(pd zJo<(5=oiZ4`SA4Gb&h`DzsvqOdrj8wjeaHT`4O_v?^PT_ltq707X3w8)U9%3isOD? zVn1y>r)1shbIQ5#WhEy%!e8H4{sKyW0i{l7Hm-w>$^G{$8(+Jom#hC?rPrkq@+_ZG z9(_i6^cm%CgI=$#jmYux_loCTC6BsT{vj{@LtgsF;(d3c$@>qA_v#2<%OB*WKgdge zkeB{=U`vYZ@AniB`})5rIRhj7@IB=Rp!5S!`r+&r^bLIZ^AY_2ID+4@oBXt!{Ir|= zJa7Jd?Qv=Me^)&Jq~x$|%Wm@0Zt~J@i}#;4n!Nu*@%~~2uVpuRX*YRkH+kvrt6L&c z?_Vk&+WkM3oWT)xe^=QJly(E9-oMy_wqf_LM)1Esg5R>6{Ir|=w43}q-~MXtd1?1Q zE1q8~Ic(dqo4mA}ytLcm{q;tZ_kStg4@U4>c9WNOlb3c|ydP{ad4HpLKUBO|N7(!w zWiwFP43uN#@b(mG^GAw@KKmCXhy0e!#>v~n4E;P}j(w7sHMMS0l z&YdD|SLvUndPTQNzmt|OhP#CkorHiL+Wzg9Q@SRu+->as<$ct(Z2N~g$NhWTBQlQm z%k9Tyyz0a4=N+W~-S$&@KCrMxld-Mh`tveh(r{jvaif|{Szfl%%vaXGCSztNYib?k z;5%Kj)4|x!Yc&TP%YZ+xIVEEqzpDAru^IV~YEt4DV;iWyqLcni{d+p;->ugq{Xf-b zO8Q^d*UA{#$Mrj99Pfb!vz=27Cg0fxlkaMS$@hx}lkbBDlkc|;2lPdVcP&J`>q(pu z7~5Kae3goS9bWmGeo~d+i1Gl+sn^phujrpq+L8xAHyxuqt1Q@+Byz-tVo{ z9A8r9^(bGAa@zgNm6?tKRX!i(#VBWN=);w@j!&!dB9s@R+>i3#tvsMVpvqUHd=<(W zv$NtdjN3e=>Q|zE1^E!~xEp1RtDI7GH=(W!b$21pIL!U3ycFdnD8EnTZ$W+&^3SOJ zM&vgj|Fp{AjC>{X_o{pa^5w`MQu!w2Z$tiBmEVs1HsnvMd>!(&$RAYs8sw{yKcMoh z$nQe_Ih79~--7%Zm0ym0Bl7pCd;{{!kdLZ-7xJCRKdkZlU1W&%<@&pXF=?_np z^2$2Q`m~@OKQ|e@h#mG7{PQ-E>dQ4ezPXY%Gc;A7igI6pCcM6U!{-YajJH#t^6+fk zlb7pFMI15p#;tOV%Y_d(xA}g6KAE09U+R#)-PAcNXtrG$qK(muHjm#Bo=n5;DV8zi zxp|j#%~N8eq0K27nsEF4a;*sD*&S1SnZ^w$Psa}lPV*HTls~g*zMk$Yk-Fw=pQ(rz_%r6~ldvYlVXdH#0)4ZkJ!M6g zq;Fhkch&+;%=A?mvwRDsPD_gHjs%ov)F5t!7#icYEB!;{4P(rvkq9tbp%U z$@2x}uP8P78_{p<(d@E$Rv*D;dB_qx2K;6jq9OQ8}y$b(>w{(|oL!4b8 z-Y&~;J#UsTx>L6!KCk(9!Unucz|Z(d`nm&V{mMs8#Jdbx-ui}#&97lhgFaCt#i89v z_|+KpZ~W9`@1!ZoW{iE3aI!4vh7@o7v=p-}USJn8a7EZndO;m07smVQ>QfqRJ$w;Rmod8S#x_~aA z1Ly$iKpm(7HJ}ri3{1uRn2NrOgM1g}c@p&Ddy(Xt=?3La0o`=814cLnSwe`&0Hg{CK2VS zhD(+&MtZt28EFsZqf_!^8dF&Z`Z&DXaY=f&;gs~Lh8=oOshJ5rr=g?FS>rZHI~n6v zuW=e~j7z7d4f?o^6wvB;&oCL~NgS`BOYr4@H^qnt?_|hH##o;!b%Q_gp20yn%rgzV zi0>G7MK|R28*b_V+99vkNI+U3PJG0sZJtzv)fsiJ0Xi#PJglmyW}k zAOr6>W+TpSL)=p=u)FQVMRvD?SYvm`5$o)3omg*oPa-b0yPd=ayE~q^-0t2?TxoYR zt}9mC-J6JO?QX_<#d^DY1979>%{Z{Q#qM55++ue#J}hp9JTuOU-$<1)NKM6AT`F#x zz%v%&v3{PhfEg+dn#uDM^0Q|l7RQ)#gU9aXb9ENZHZBK3;^tXT^PA|ZHZicn#M`1K zwhWjU8Z>d&RTB?$4b57s;Wyf_zh2Mh$}znAis0SZA*^kC@jmK4yvKRK;ND;++7xIr z1IT9$&vejD#`%C6&uYLNKV;(!m|JaP(+(3`g^5`_%YkkV^EhYv{U+vBo49p{iEU96 z!viKhF=*n`S4}*ZjdLIM@?n4n^~IRbKU z*39&qcw@DRJ9e0OEDD4jj}Dl4a?r%nS55pf+s;HA8pf`Q-{M`y`z>0>6?2I)U-ceuqwi{SI`g*lYs(9r?NRF>s!WrQS*(BfpJ41a9Xy3k8tnvT68M z5xSrcx%Zfdw0xfoOhEr~J<9 z{^j6B*biO1kna4hCOUx$-!}cU59xj1(!?aZL)Za*=2q-REbxLc3G$L^(v5V?i^5h- z=*k|h>q&UO%4h0+@E-Y%*;b$+;^3aJ4DTB0H|Xi2-+&1!9{Mo-hWtac7kFI7HXotA z$e*CSz|Y1*7y4#5^rtR-96b! zYtbV}Q!nbg4}Lg~eCzk21IEK=l@2F>ZEu-0M_?EI_bAFfUx444^XZ1oC$J~_;ai=s zhyFo(x6wbq7WxO+ME?MH&<@1@q#eLE+5rsH4&aj<2cLuN+irw@==aYfy#r%li|XT} zs*m~JfqHxa^&aNtc3nmRpRaHkwE-^C}l9529I1bjeWBfW#Z1_tR9U@LtBY@<(r z&(SBqXE{Fj4rIqy8Q*yS@}?h}@}GcBw1Mw6+Av=Ez9ZOR$9us+V;A&0343U>eAkCQ z;yaAzR@(9J*9NW>g*CB3*|P!mFeW%q`nVi7XmcCS8|(w5cd-wEt?UC}8^_Lf&?mGB zc$W46pQk;*uX610{m8b}=Gfu84eG~!I0c_@yzm{x^Be7g?=Qk0yWl&KU2E-<=4sfq zUcRe(O}-oBcQ>@>H0`e*nZ_xqQ>y2aGxEc89cJ%bN>2CV;|LEX!(cERryf=Is@oA5r1-^cfbwBH-*xl@#tc>0AT*DQh z%E?!4@tcxmpDodrmX>Iw&z*K$uPLOB zY=g0ZM@O{L>bVQCK?CF6Y@-ZqRD?^k1!$wHv`x10INIR%8Vy65o8Jpk{u7XYbGS;Y zgdLTv`wz|Rk73PSx*#IkVvP6Xh_>jbO4Uv!+F9FEqLrhaRi)jsom0wBPb)udzr9M^ zX8GygH20DP`=ngPh)<7@TeE+k#%~xGDA|0cAbn9K7O<~6r=61hdKU7zF4W#X9UF3d z&xhYa_Tk$p+OrOArtmwPJbY&ZnyOD#X`GA6vvRd$)bBuhl4quvm6DgGWg>3I{yH}8 zyzW5!iL^5p`6FhCDy0o z`>#xVQx=C9Ypt;vXV_bD9^HzwTmjCY`8f04h_hP&XSHU;Uv?t?67pw5&VgO^(_!PgmlI**WXjFCE;j|dNi*Jw=x4) z5UYSjh`D6o?22){+@ay0N(@{{oy~n5&cdbGgR(qHbCZ7hP58xUpld4j=|JZK{&p|U zzSuwW8OV1bJR|2}Z_np<0e-rgXXBzE;-~u8exk4{5^3`U1^O{YtR!n8x}d%}qTQ-K~imSYN8Ssc(6Y zCT6g{LUS`dP#)}nR(dbW*&B=Fc1AxnTOt9=AmyI^UyP$dFVHtdFVBhdFUgez5F*kSXz7E z*^7TWdN7}AV#M1o2ANMYF_PXd zt};K}#K=svEABze8PC$c+<)=GU&g>+#=svr2I8=C@OpvU8(aw{SU=;6=a_j_DMFXZ zpHTQOzaQ>m^0$f*8ya~{w*;&FHE8Bf1N+r)%KD4S1BHRYYk&3b8r7(TY!7cQqxg5Y zBQF~=|C!&N6@kt!{7s_(enb~P-75mEoqd6}U{9M+|7Ce^Lb^-5~~ zms2l!^a0{zh%n;w`IcRyNd)^y8nJ zrvE45<_IH9o97c{%1RHftPOxJ(gpc(E;~%BLxu48)%;!cND$tZ`^z zmMXXEEq+xj|K1K|TlLnswb1_weoKD~XQ7^ZQ;Xl4Cl*@sM2V3$SZU%M+_cN$w|*zt z!fMowysAfLkiHQ&`L9hk%Q4E(YrjKp@sW7Mg`Y!{ytILrHNULijqf&#udM@?|8Ovr z*FyZ4WfuPjYJPrz--+Snwj5<EdR^DA#v?*kJ=z+>r>QCGwB`a};dS`U?~mR`Vl$Tx*uc#pRnxQGowhm(`mVen(Zb_nHat(Mh5hzp}xL S9$mBCAtwOOU!JXJ+pfC@;WYWU#IU~J=T2x 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 R*RF8L3BWTI>1nqR{}(|r;#vRz literal 0 HcmV?d00001 diff --git a/attention/vmfb/attention_B1_H64_SQ2048_SKV4096_DH128_f8.vmfb b/attention/vmfb/attention_B1_H64_SQ2048_SKV4096_DH128_f8.vmfb new file mode 100644 index 0000000000000000000000000000000000000000..02b3cb45a745179778f16be6d67f6528cfd415c3 GIT binary patch literal 19476 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 literal 0 HcmV?d00001 diff --git a/attention/vmfb/attention_B1_H64_SQ4096_SKV1024_DH128_f16.vmfb b/attention/vmfb/attention_B1_H64_SQ4096_SKV1024_DH128_f16.vmfb new file mode 100644 index 0000000000000000000000000000000000000000..78620f6ef570ab1b9c4a2d9433cc043de18bca17 GIT binary patch literal 30100 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 literal 0 HcmV?d00001 diff --git a/attention/vmfb/attention_B1_H64_SQ4096_SKV1024_DH128_f8.vmfb b/attention/vmfb/attention_B1_H64_SQ4096_SKV1024_DH128_f8.vmfb new file mode 100644 index 0000000000000000000000000000000000000000..d04129b194b2a9e9bfeaf637436a4fcd27e735d2 GIT binary patch literal 19476 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 QdYMB`0G_`{PrHTqzhY$#od5s; literal 0 HcmV?d00001 diff --git a/attention/vmfb/attention_B1_H64_SQ4096_SKV2048_DH128_f8.vmfb b/attention/vmfb/attention_B1_H64_SQ4096_SKV2048_DH128_f8.vmfb new file mode 100644 index 0000000000000000000000000000000000000000..1539ecb2f0671e61ae21c1fe9dd25e09edf010ba GIT binary patch literal 19476 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

Gv+El1aCBNwZA4YZ@2HBwN#(l1X>Xg0(W~u36H7 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 literal 0 HcmV?d00001 diff --git a/attention/vmfb/attention_B1_H64_SQ4096_SKV4096_DH128_f8.vmfb b/attention/vmfb/attention_B1_H64_SQ4096_SKV4096_DH128_f8.vmfb new file mode 100644 index 0000000000000000000000000000000000000000..e288092d3149f4d7b9a2b116da36a1cec95899b2 GIT binary patch literal 19412 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 literal 0 HcmV?d00001 diff --git a/attention/vmfb/attention_B2_H10_SQ1024_SKV1024_DH64_f16.vmfb b/attention/vmfb/attention_B2_H10_SQ1024_SKV1024_DH64_f16.vmfb new file mode 100644 index 0000000000000000000000000000000000000000..c95209d1f81e84257c1914c8b6a13038cbfe3d8f GIT binary patch literal 25044 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 literal 0 HcmV?d00001 diff --git a/attention/vmfb/attention_B2_H10_SQ1024_SKV1024_DH64_f8.vmfb b/attention/vmfb/attention_B2_H10_SQ1024_SKV1024_DH64_f8.vmfb new file mode 100644 index 0000000000000000000000000000000000000000..819957dcfbceb389f53b83042b8c9e0ed03b9238 GIT binary patch literal 18324 zcmeHv3vg6by6)=TJ58sPK$B!=Hz7bLG%>``1_Tc}KGKlpp}=4W5YRDnk`CRN7u^Yh zV(-l}V8R;#1?2sH1yDqENI(QcbOfxq%qeTinmXsy)RfM#Jac9okJrB6zxLW8fO_WK z>$z38?(AaaTaW+$*T4RMy?bvaK4FyyG2_W*+x-b;aq%RwUaYphs;MUEt**H8orN(A zbFy!H8nj(88ChdX{C+AK^T&9+5LhTPHUpswp$*|31Si4;gx@C-We?^CqZ2V3f>9G= zYr#+Q(h*2bHv}f}$A}|&*vi-@gvAIA2u~x7LBKy&1wCa7i2n;@*@0#q<>leJa3f<` z$O8#~h>jkv5-^pg7}{<;Zh`j*90DZXVIn=5|Az>fv~ z4}rfE_-_Kg6PN%cNRM2BgDHV$m`MNbUvF=FZ6I7%4ug_C1Sz*s0@7yNyCY6%vJYW_ zz!3t=1U~wuA=`yC`O1*(2}I}BRU*m$0l}<;>Z7NJ0W3pcAAuf$_X;HY((|AJtVrN! zfsYG(QXuI>53d+l$5V{W6S!Dlv%s|iw+h@Xa37F#J}U4nffs-h!UqDs6i9xc{A4f@ zW(q6>Qa_v`koqH~p9jjo?E;Sqya2>M_KCnh2(&>cj6!@UPB7si|Tq|(Dz~chX z3;amnKM9nf6v@v7lCMVrX&k106^}m+OcWsp>2Zit8;EWQ(hrL?_305vQ$L~d5eOwn zQ~#l~icoJ1drqylqN%z%7{UA`@@YQH z4h3qw4dI4hO}H*tUK5yC--Ou+I(6kGn(AO(Wf1KY`80MoZ*Xp~vZ*mpQ4?gBMH!7< zURD*H69&^~B0uw1ezY3xYuEJsL)ZqSsh_|V+~zO^ zJBU0t(%j~Po@fdq;gONza!5rVM))4ndMhKrKqKtd~WJA zyEpJ$0EgAP^U2gH1H8D0Fv~HA9T{VJ_`b1#_kI+~_ns{%yvr|>} zYL|Ks3x1MSXjI#&tKsgbcV@7WeblAS&u*)8tWhTx9h$4DPJ_=oyD8Wd6bisX7@L2- zrMCxhs*`+M7=es%I6M}urty5248y;y1U#m_ssul`F`8W-9?RGB+j%4NywnNstn9+O zUGVZYM-2bc*y+OCrAIM#1@vx|6aA-x*RXeZB-G|Tgvt&6?->fWOwTg@a!Xbo;v|#i zLHG`$!sWDf_ZG5lA1>aiaI_)NSQ%o|!RG-D@zw|#DTtE{C=?kxwwTMw{eC$OP0>(! zRj{j`Sd$>fv~7owY1r1#it3~G-Jz4wy~6c%WHR0!j>>==&x{MS2w{(f{ebe{o(m6n$@50}Dd;MHL+8+>qm+7W+E?Ii-6vo+puIXb1(Xm$fvc8^38qPej%UM&O7&47epEN+Z@AhH$@)Fpt*)d z&gUY}m@jDpGR9NtH}Uuk(9v`Cegg}UNAkXBZmO=2)COpwDit);pCk2^wSz*@KxO@) z>I$SAL>blJ7_5uZd{6T{J>$#>a{6FanTYf=MiKs6FyAMzHsmcPBk;${x+8BmCfs=` zR2yR{)afiNh2{c@rMLlBmO?9q%u+~x0!ty=+gM5=pc^t_Iy+0Di8_%bJ6H-yPvRNb z$*c#l($k&wpgu&86SFJX08c9GQN$y366u~n({3J5yI2qNfRxEnD4N2Y2|6#!;=3G1 z;%vH|sw2yH(|eMBc6}PE)DxJ=E>o#)*OQ@CchsHA=g2b9>a?@zK+wyuj8e*hkf@hI zGNlrA5*N$eJeyZW9swsbWZ*J(qTGi%ymLp(?Hxol z4P9LC;xh~4i5;*)hpam~?&gvWF6toA!}K(b-$dAwwCviah-^B;Ur54ua$0rXZTZo~ z>|f{wOx8_5k$j#e2Izvm*dcXTJ7k??-QEU_KTu=e0}iTTo|EZ(JYvX_!7*fMd4QXV z3PYAQhVrdJWMkd!EIEOhnk0b3qW2_XN$*J#ta=#?tb^C0LknGkRg+l>H8IP9KjfQf zn1+dhY$3DmpiDr%gdFk@IQd^vgXBy4wA5Sl=wF=P=)rv)=yY%)n_!GyQUn#yG|#;$ zbxdXKD@rjolo!sUVP}--Gy^eNpN8oI8kn9Te_A?VzYf+xwJ<%AI5}U(blB`EnLWg$5;`f7J$DCoYmGjvyA<;CJ1b%*PCk#SMt4n%_PXj4N&eWWp1<*t~=%OXv6jp16p zpQC2bL)M@rl>b2FlGnQh8xHtsdok^(e2d@S=&G_e~5vbYct*@@e z;hpXAMzIICAM(x#)HDUlpAFYl9WhA6vHgEnvi-kJvhzQcy!gi(?fOpzyycx4sc&k) z^~TIvjN|g^@Z4ZkIa!LG;;w+vI}34&nOSFloMQ9sR8^R~Ak5}t!Q zj865twC#0oBsjb34h7Z~SuBUV(atW{|G1HeHiTU_qn9d1Yo$^}-v7GcaMT61us(G+WxDqpHpz_)C=)j#CerQQPZX~c(YG!5KAOHo7xj}X)PCAlqObV2j|JK9nFMZ{oK~n|=s+#iedVU(a|3vE< z+;^9Pe|v`8B;{KlGjTgUfMmAi7+Vix*gIFU+iCt^OG#{PJG}q@ZCJ!4_abKZER`Id zB&MHD+Gbhp*p{?fPVx+OELppfY?J2bb4_OlENu1qm2AyRD^n#oFHN$=BnQ*2NtT5Y zTXnrzmM~82*KtUf(}AhhM49PNf11uTi7n=6W6L-?SS!cwX{`17IgG4TY)0;4mgi1m zE3Ti*mDu(fp}d884W76pIg8PuI&uqg(-@;m{E4!vrLpJRNuX*54JPPKJlanq`U=^^#nP#539kTO+Z- z);fe)2-Pt?|MigWIUCXoFNWg3{$mIe8au}}o@LI=wm91izHiUR*_N}+A}7Qxo6a&f zWAR^q8Pf6NXI%O!2J4K7OMfElH`qE<8*D8^$kn1fTHAkCwE9MZmDwKx;$qJ0D~8R!Ql0gHhSU;}7IBaS;1`zRoO zx3P}}_5h9nb_eQl%L0~zxmLOvg73M#bm_B@MfzQ6uvLmluyuN^4Qc_yHc2K7+N5#l zZ!#JmXN%9q<67Jz|6|Bv`!r;+|2AaF|EG|}^DmI~dFXM_*+3_=rDtW<47)8jD>Wp? zWVYliYp};`4e2pm{(VTd{UIbbIAii`7IVzbf)CuV*ARpPgdBt{1TR7!LSF-8b9&Z9}3fA7eD*3fv5L!Kg3V(4|U*XCw}Izkv?-&q}zCZjGs9X zDpIKYfiUlPXNHG6`XK#TYdf=Sxmoh?LvZYto0E!1a4a1&iY;5d<>u2xk8+y$sYeaI zQ$?IFqa#CCb#-AA`VH|-c43tUPI2PM51g8w!5UFUGJcWOmr-A){4#eAqdrUVX`Wn0 zeUsvw^YR(>L5goF@bWr)<$rl|E3OL(U!x1c`#--~i78|T`}}4#j;n-NQ}ZYv$Hl&~ z{f{@F!Ov9MMaa=VypftMNt9Q?SWf&D+Ko9TehTe|orp#znt_rOKLwj&%*IbW93~rS z@3pquscf($Y3EzplPUfPCOcq;kcoPo>68Y)ix9MKLeNp20ih4{OxMmC`eZ&L$y8^i zKUF6Anb|qA*3sJTq4>ZdGV#qo`zS99d9LgVnd;6OkRww%b3jCOl> zKQw)K#`fzkk{vV0o{%SiZh|GiVzd6Rlw@WOs*uSxBsVp?M5Z>9>{RH)?e*jkOjmmQ zfufr?R10$*0cHS?0~H{*@17j_Akt|_9|fiYPXKW%#ce?PlxC;$bt;R-5XK46N#g|Q zdIPlSpgje|+TbExOJQRgJ1ECZHpbB%W9$%Udw}*ZFbPO@EqyW~f8W@f0ve1p*HoYd zNbN4&Qz4fijdx#MlYn?X#8nEk0Ve~y0n30Aa2n7G+yU$Z+zIRp+y(3h+zspn+ylgW z4X(Yw-oSmpEZ}~i3wR9J9oPnR08avO&F6X@h#M}~n?SrD;W`b(b-1fUiD;9QMy*tt zqfJ)kYEzWwwW-Q{txSn&(-d7hpp<9_l~V19GF>~WJgps9DzpZ{sOb&Gaf z-Km{WcWZB`2enh`VQrVXKeksr7~83~#rCKtVms8O+HQ53wohHD?N?W8htv()VRe&s zOnpsjQ@3j;)xFy5>VEA_^{94QZPO<0*_|=<$li?ei;iSmY&n*3W!)n6qs>dy>$_Ui zUmsebmarSwCLee_VG?lK@d*i~zzfY!B}@ihUR9nj1$cF1w{BB`A8$+QRtEfJpW1C2 z@aD1JIH|;L&YX%Ro^T2~&#{cX%W)dJz;P0Lk7EhD$gz}N;y9UI)-JWSpIfv@r8(&Q zk|iq5H}5t#tJ;Ou_6y6GtJ=G*?eDd;s5HJVu2`Yc*t)c8l}hu%f3_VI>@=vPm4v z41dm=X83c~Id+-nzsug|c!6Evc%EG%|59HnIpUSc$JD5dC|}KoJ#%f{pNq*b1L=4E6eYf6Zfr6u1Hr2OREAzF*-dMD+Xqs=o zc52a~qF*kl^&M}n^i5Kq*D%?>oDEwr|Js zk-pu_$NG-6Jmq_PMby{6qRF>&h2M8z+a%w?ZIgZP?0C-Cv16WZ*N)M?<7$NlM?+RB zIU1Nr@2Uaw*;S51*oPb+V*8f-+_!(plfIM9Gkvc&hkcXP`Iwg)v>oaQ%wuCP?@h;C z7}3tCjoMDkjR({c?QL}q=EPFWopUk&E!K9j9XCo=S*2aTYiq31M_l#@cA`1xJKFLK z-?5f*Ut3GSw`au@zC+ul`VMcK=G(htyziunxmXQpC9C#0-UV;zI;(U6c>QIo^d4}^ zMyqrYc;gkTbO~6t*($x_zu&)U^kDxRD&~K+Mw_a}FxO7drl~sS+liQ0>o7l8VXl4} zb1vq5b%wS_eH`;J)&aFl+pCV#uC3YUC|!5JasA~(j9`E}pKP^Culk4i zH~R1MzwE!)zhU$s|N7Ab{cA@L@ULm^?_a$<+rM&oAAjreUjCO_{Ql)DM*Ekxtn)8f z@v?tm%Vz(A6I>}P|eeh`zo|pON)P<`fY5Lnyjr=Q?(Upy4Ip*z(1MVyK0tp zLG7zuQFF8pRF8I5&DB0q^R-{81=`1|S3Bz)s-5=1=RWw{H(xvAgU@~Nxvx<>;Df(? z@V5{C_RZB^So4?S_tawTqz}IHg|v(6DD4g35bcz2me%g8(f0W!XdS-iwf#Q$!UtdY z;0qso;d@3q=Zk4=KKR3@YlnPOwDZ1&+F>7j;v1)3LSK6Uev*rRb3@0zV3YFa7(*QI z`?(T;3xGD@LSQ%GBA^|J_XAwXz-2%uuoajN#5;Q~7ZCSLuH%ZNSrC5_aS0d$T7eoc z5x4~C04@b40h@s-z~#X1z?XnMfGxnDz!kt$;7VW`a1~Git^sBM*8)}GI$$s0%fL+F z24HXCM&PT;H?h--1N#@Jc2-Hn{w70vOL1vulq~Fda<#XWJnVb&wRe;P>{+^F&yucX zfp;f(=^XTm@^$PD<=faP<-6EE1^rA(#(u|+eT|I$kqvvLOze63YVC>}`<@)FL-AlQ ziwJVJB+LswCqH@hBuWL5S>sA@%bsHI*LFG%0^7@yI^7=JKdHpN6q(S`+ z_%Y9(2)c!M|B|p3hYbgCy;1*ctQu5ayTmB3#qAQ6*KRQCpRF6^b<2$My46N`-6o^{ z*^7{aT~E{#E0g`J6c4J%zKOd2ZZ{b0eJ-`MIylIdN;3bK+}V&WYQ)oD;X> zoJi-(r*P&Z|826&z4`>QF}9!hfd^R5=QpRLsrZGI>OV;7a-2hn59ve12RuB(z#~Nl z9wj+*7&}ICfNi7)@HpuKJVAN@Pm&(M*GV4m4Uz{u)v6AUtydq4tyCYzy!L2pi8?Cw zf;uL)PMr{YSuKgZsFubyffseZV9(^Zj%u174;2(Vh>fe&9z$4;%f8&eRbM2f`@M z;>)mxEXSO$ebm~%oPBX^^VBHDHb)up7#tJJ4stB`l>*(h5HJoQwR(K$I& znIz9wi((7a5wQj8<1sn|yL$DPV`_11kvb)&sbw*Kw(eCaZ&aU&>3q%lHb&=ZSD*Xk zO<2De+6OK z7qu^aSP7SNvBi*cU~`o9MR|@-a*>?8@e)7xJBQ`SIY{S^l`v19xH10`$whKvkVEZH zA6CKToTxP9v~7*D0chI`v!jg8LLS85%8oL!i*wizc_7l~o`~Wi=!v?wW;^$2PA%P0zY%UzVsSDE0rP@18CD2wHgy)w|BIDIAFJ(SbAoYICE2a88QrgH|DT~?) zTl7I&NoF{mK7j!$cwLb&gZ1U8vVI(ej$xr=7&hklu*Qrn4O!6}FRO2HV9^WxF}L*dC6(*xpp=Lw8$gK)Tz?1k#;VZy?=SWdZ4q zs}GRwxcUO=j;kM#?zr4Qx@*b?(j8O|knX1X1LTu`NKlOWO*hyR_GUbeEQjy;mCcVVT(H z^~U}z3;VG?*yr`dKCK`2e{Ss4va$cm!Tzm3_Jkhn0|#LLmWw^zJ=iDaVJ|okd&Ye1 z9q+~7umF3%LD)-rvH!add%qX32b_;R?~B+M#;`x!jD6x3>^HY!&-fbl)#Oj-W7*uF zJ$?PTKhsAJ;Qmzn_i%q^j2_7SsgAvu`_uKrAnwmz zK0S*8*^!d0-~Y9_-OfI{CMRC8+Wo09$E?q;ePzF5O=2Hhv!`9@pOlt5$B~xdNT#%! z?@3O}m}3`l2lx__u2>y@SIo|S2YN61@Nci#Nfu}vy{`1P_j1j#lS~KldZju@t|KkS zlhiAf%b_^Qv89ll3`0(@TseW{KsJ}7LXL`hNlr5I)Ksny@g}Rc%jwpmi#}?uY$G|4 zeV0Dne_S7Cxm}-bBnPtZ(ue)HJ{Ifk`Y@6M*-Yt+w%%bQ>Bn`F5^mSYLb4#=qGTDe zy4p$palNeFZr4j9S&)yN_VwYGvG|q$4&7`&tedRd@*Bf%!b@>GWF>j1BSA^0-T!rF zd6LI6TfWJSYrPa&QEcBpA^nd@ud4w zii?OJalB^<{%f*hV0JOZZGzwC1b@HmVxvv(%cKY8*?VOdC*7+W`JlC{J-J*en?W*@ zH0Btf6esphz;-(5l`vavzRS6@{@ZYU&MQ)Boq_9 zEP*~LfzwkwB@y|cp?GpP4Y(Y<3f`Lf}&}9dIL^gX^ z5IRKuT7m!mUA&&6UkgGUF8GsW3Kr>3sH9gz-Qu-E_u%2)LT_Q`|9a3#bytMfC)t@U z-kUZFEQtJ9-aBO8x_W%e>cxwcczct1XVx`&LxE_BiNBQJ7-8N>eN~__z`TvYxs9Bf zUb{qguqIMp-hj7@!*w$m|56aI$})Nr6yFmAL*O=I2L41Z7yd+I=pDuK;%O6nbz9Zk{H*pHe@2G-vIK2kr z3oMPJYV%JwEjzy(rLl zF#lf%^XsDSn2n9Ei|A`2#wI>tk@{MNfpNWa`~NnBE0@lPz9H)Tzh`iYzU#l8F)8m9 zdHV-QcZvL4KS!b}%`cElEJ`&ho%n>!Rv_vh#LU**@}}w4i-M+RR3{%9i47TTq{*Ta RpGe>XfZl;6dTKXg{|gk9Ln{CP literal 0 HcmV?d00001 diff --git a/attention/vmfb/attention_B2_H10_SQ4096_SKV4096_DH64_f16.vmfb b/attention/vmfb/attention_B2_H10_SQ4096_SKV4096_DH64_f16.vmfb new file mode 100644 index 0000000000000000000000000000000000000000..32cd9912b348c881a0343643d6b5cb6c95a359a3 GIT binary patch literal 25044 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 SNl(P_0YLA-5vHuGpg-443 literal 0 HcmV?d00001 diff --git a/attention/vmfb/attention_B2_H10_SQ4096_SKV64_DH64_f16.vmfb b/attention/vmfb/attention_B2_H10_SQ4096_SKV64_DH64_f16.vmfb new file mode 100644 index 0000000000000000000000000000000000000000..f1ba382e35346b9710dae089e74c05a4462d9b56 GIT binary patch literal 20948 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 XqW5Kr literal 0 HcmV?d00001 diff --git a/attention/vmfb/attention_B2_H20_SQ1024_SKV64_DH64_f16.vmfb b/attention/vmfb/attention_B2_H20_SQ1024_SKV64_DH64_f16.vmfb new file mode 100644 index 0000000000000000000000000000000000000000..569e328b05092ca1fcdb454cd329217408d7f1b2 GIT binary patch literal 20948 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 literal 0 HcmV?d00001 diff --git a/attention/vmfb/attention_B2_H20_SQ1024_SKV64_DH64_f8.vmfb b/attention/vmfb/attention_B2_H20_SQ1024_SKV64_DH64_f8.vmfb new file mode 100644 index 0000000000000000000000000000000000000000..8f4039c91b6889273104523ddb33b4dd667e37c2 GIT binary patch literal 18004 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 ayc`FKK9G5iX#ZXLVgM*;W9H|26a8eb literal 0 HcmV?d00001 diff --git a/attention/vmfb/attention_B2_H32_SQ1024_SKV1024_DH128_f16.vmfb b/attention/vmfb/attention_B2_H32_SQ1024_SKV1024_DH128_f16.vmfb new file mode 100644 index 0000000000000000000000000000000000000000..5674452f2157d587a81488a9a92637bed8c32442 GIT binary patch literal 30100 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≪8dG)5#q}fIiP@~z!If(i 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 L(g9u9)j@|@ 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 QmpSAF;F*f_v|EV(1F%KqQ~&?~ literal 0 HcmV?d00001 diff --git a/attention/vmfb/attention_B2_H32_SQ1024_SKV2048_DH128_f8.vmfb b/attention/vmfb/attention_B2_H32_SQ1024_SKV2048_DH128_f8.vmfb new file mode 100644 index 0000000000000000000000000000000000000000..718eaec93bb5fd819f4b4e7ec6a8a93e7794d849 GIT binary patch literal 19476 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 literal 0 HcmV?d00001 diff --git a/attention/vmfb/attention_B2_H32_SQ1024_SKV4096_DH128_f16.vmfb b/attention/vmfb/attention_B2_H32_SQ1024_SKV4096_DH128_f16.vmfb new file mode 100644 index 0000000000000000000000000000000000000000..1260f5e1658bd4ff99514d3e31d2522c7358a37f GIT binary patch literal 30100 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 JPyJ@>{{TcXdQ|`b literal 0 HcmV?d00001 diff --git a/attention/vmfb/attention_B1_H32_SQ4096_SKV2048_DH128_f16.vmfb b/attention/vmfb/attention_B1_H32_SQ4096_SKV2048_DH128_f16.vmfb new file mode 100644 index 0000000000000000000000000000000000000000..b06d21b7789ddfb86bb3461f8313975e15022368 GIT binary patch literal 30164 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 literal 0 HcmV?d00001 diff --git a/attention/vmfb/attention_B1_H32_SQ4096_SKV2048_DH128_f8.vmfb b/attention/vmfb/attention_B1_H32_SQ4096_SKV2048_DH128_f8.vmfb new file mode 100644 index 0000000000000000000000000000000000000000..8ee82f0af319661b888c0b1ba7ca1ffa86479f84 GIT binary patch literal 19476 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 HX6*k0KeBkC literal 0 HcmV?d00001 diff --git a/attention/vmfb/attention_B1_H32_SQ4096_SKV4096_DH128_f16.vmfb b/attention/vmfb/attention_B1_H32_SQ4096_SKV4096_DH128_f16.vmfb new file mode 100644 index 0000000000000000000000000000000000000000..41cd37df4efb440e84c7d6097303004ce5aa1884 GIT binary patch literal 30100 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 literal 0 HcmV?d00001 diff --git a/attention/vmfb/attention_B1_H32_SQ4096_SKV4096_DH128_f8.vmfb b/attention/vmfb/attention_B1_H32_SQ4096_SKV4096_DH128_f8.vmfb new file mode 100644 index 0000000000000000000000000000000000000000..b74b3f8b35ea0cf0d0bda4548dfb8aecb6295c68 GIT binary patch literal 19412 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 literal 0 HcmV?d00001 diff --git a/attention/vmfb/attention_B1_H40_SQ1024_SKV1024_DH128_f16.vmfb b/attention/vmfb/attention_B1_H40_SQ1024_SKV1024_DH128_f16.vmfb new file mode 100644 index 0000000000000000000000000000000000000000..612b85d3006a4b7f6363f6ebd3576920d5b3a19f GIT binary patch literal 30100 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 literal 0 HcmV?d00001 diff --git a/attention/vmfb/attention_B1_H40_SQ1024_SKV1024_DH128_f8.vmfb b/attention/vmfb/attention_B1_H40_SQ1024_SKV1024_DH128_f8.vmfb new file mode 100644 index 0000000000000000000000000000000000000000..04205f67a000880d928f3f95a54f2389471499a9 GIT binary patch literal 19412 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 literal 0 HcmV?d00001 diff --git a/attention/vmfb/attention_B1_H40_SQ1024_SKV2048_DH128_f16.vmfb b/attention/vmfb/attention_B1_H40_SQ1024_SKV2048_DH128_f16.vmfb new file mode 100644 index 0000000000000000000000000000000000000000..5b778ee8a0e64f0a16539a8e68cddf127a470404 GIT binary patch literal 30100 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