Skip to content

Commit e1804d2

Browse files
committed
[DAP] Add benchmarks for tuning vector size and tile size.
1 parent 731b9a2 commit e1804d2

File tree

4 files changed

+183
-0
lines changed

4 files changed

+183
-0
lines changed

benchmarks/AudioProcessing/Operations/FIROp/CMakeLists.txt

+69
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,55 @@
1+
#-------------------------------------------------------------------------------
2+
# Generate BuddyFIRTilesVectorization
3+
#-------------------------------------------------------------------------------
4+
5+
function(build_buddy_tile_vectorization vector_size tile_size)
6+
add_custom_command(
7+
OUTPUT buddy_tile_${vector_size}_vectorization_${tile_size}.o
8+
COMMAND
9+
cat ${BUDDY_SOURCE_DIR}/benchmarks/AudioProcessing/Operations/FIROp/FIR.mlir |
10+
sed -e 's/@buddy_fir_f32/@buddy_fir_vs_${vector_size}_ts_${tile_size}_f32/g'
11+
-e 's/@buddy_fir_f64/@buddy_fir_vs_${vector_size}_ts_${tile_size}_f64/g' |
12+
${BUDDY_MLIR_BUILD_DIR}/bin/buddy-opt
13+
-vectorize-dap="fir-vec-size=${vector_size};fir-tile-size=${tile_size}"
14+
-convert-scf-to-cf
15+
-convert-vector-to-llvm
16+
-llvm-request-c-wrappers
17+
-convert-arith-to-llvm
18+
-finalize-memref-to-llvm
19+
-convert-func-to-llvm
20+
-reconcile-unrealized-casts |
21+
${LLVM_MLIR_BINARY_DIR}/mlir-translate -mlir-to-llvmir |
22+
${LLVM_MLIR_BINARY_DIR}/llc -O3
23+
-mtriple=${BUDDY_OPT_TRIPLE}
24+
-mattr=${BUDDY_OPT_ATTR}
25+
-filetype=obj
26+
-o ${BUDDY_BINARY_DIR}/../benchmarks/AudioProcessing/Operations/FIROp/buddy_tile_${vector_size}_vectorization_${tile_size}.o
27+
DEPENDS
28+
${BUDDY_MLIR_BUILD_DIR}/bin/buddy-opt
29+
${LLVM_MLIR_BINARY_DIR}/mlir-translate
30+
${LLVM_MLIR_BINARY_DIR}/llc
31+
)
32+
add_library(BuddyVs${vector_size}Ts${tile_size} STATIC buddy_tile_${vector_size}_vectorization_${tile_size}.o)
33+
set_target_properties(BuddyVs${vector_size}Ts${tile_size} PROPERTIES LINKER_LANGUAGE CXX)
34+
endfunction()
35+
36+
build_buddy_tile_vectorization(8 64)
37+
build_buddy_tile_vectorization(8 128)
38+
build_buddy_tile_vectorization(8 256)
39+
build_buddy_tile_vectorization(8 512)
40+
build_buddy_tile_vectorization(8 1024)
41+
build_buddy_tile_vectorization(8 2048)
42+
build_buddy_tile_vectorization(8 4096)
43+
build_buddy_tile_vectorization(8 8192)
44+
build_buddy_tile_vectorization(16 64)
45+
build_buddy_tile_vectorization(16 128)
46+
build_buddy_tile_vectorization(16 256)
47+
build_buddy_tile_vectorization(16 512)
48+
build_buddy_tile_vectorization(16 1024)
49+
build_buddy_tile_vectorization(16 2048)
50+
build_buddy_tile_vectorization(16 4096)
51+
build_buddy_tile_vectorization(16 8192)
52+
153
#-------------------------------------------------------------------------------
254
# Generate MLIRFIRVectorization
355
#-------------------------------------------------------------------------------
@@ -52,6 +104,23 @@ target_link_libraries(dap-op-fir-benchmark PRIVATE
52104
MLIRFIRVectorizationf32
53105
MLIRFIRVectorizationf64
54106
# Buddy DAP library
107+
BuddyVs8Ts64
108+
BuddyVs8Ts128
109+
BuddyVs8Ts256
110+
BuddyVs8Ts512
111+
BuddyVs8Ts1024
112+
BuddyVs8Ts2048
113+
BuddyVs8Ts4096
114+
BuddyVs8Ts8192
115+
BuddyVs16Ts64
116+
BuddyVs16Ts128
117+
BuddyVs16Ts240
118+
BuddyVs16Ts256
119+
BuddyVs16Ts512
120+
BuddyVs16Ts1024
121+
BuddyVs16Ts2048
122+
BuddyVs16Ts4096
123+
BuddyVs16Ts8192
55124
BuddyLibDAP
56125
# LLVM/MLIR library
57126
StaticMLIRCRunnerUtils
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
//===- FIR.mlir -----------------------------------------------------------===//
2+
//
3+
// Licensed under the Apache License, Version 2.0 (the "License");
4+
// you may not use this file except in compliance with the License.
5+
// You may obtain a copy of the License at
6+
//
7+
// http://www.apache.org/licenses/LICENSE-2.0
8+
//
9+
// Unless required by applicable law or agreed to in writing, software
10+
// distributed under the License is distributed on an "AS IS" BASIS,
11+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12+
// See the License for the specific language governing permissions and
13+
// limitations under the License.
14+
//
15+
//===----------------------------------------------------------------------===//
16+
//
17+
// This file provides the `dap.fir` operations with various types.
18+
//
19+
//===----------------------------------------------------------------------===//
20+
21+
func.func @buddy_fir_f32(%in : memref<?xf32>, %filter : memref<?xf32>, %out : memref<?xf32>) -> () {
22+
dap.fir %in, %filter, %out : memref<?xf32>, memref<?xf32>, memref<?xf32>
23+
return
24+
}
25+
26+
func.func @buddy_fir_f64(%in : memref<?xf64>, %filter : memref<?xf64>, %out : memref<?xf64>) -> () {
27+
dap.fir %in, %filter, %out : memref<?xf64>, memref<?xf64>, memref<?xf64>
28+
return
29+
}

benchmarks/AudioProcessing/Operations/FIROp/Main.cpp

+43
Original file line numberDiff line numberDiff line change
@@ -172,6 +172,49 @@ BENCHMARK_CAPTURE(DAP_OPS_FIR, buddy_tiled_vector_f64, dap::FIR<double, 1>,
172172
->Unit(benchmark::kMillisecond)
173173
->Iterations(_NUM_ITER);
174174
BENCHMARK(KFR_FIR_f64)->Unit(benchmark::kMillisecond)->Iterations(_NUM_ITER);
175+
// Benchmarks for vector size and tile size.
176+
BENCHMARK_CAPTURE(DAP_OPS_FIR, vs16_ts64_f32, _mlir_ciface_buddy_fir_vs_16_ts_64_f32)
177+
->Unit(benchmark::kMillisecond)
178+
->Iterations(20);
179+
BENCHMARK_CAPTURE(DAP_OPS_FIR, vs16_ts128_f32, _mlir_ciface_buddy_fir_vs_16_ts_128_f32)
180+
->Unit(benchmark::kMillisecond)
181+
->Iterations(_NUM_ITER);
182+
BENCHMARK_CAPTURE(DAP_OPS_FIR, vs8_ts256_f32, _mlir_ciface_buddy_fir_vs_8_ts_256_f32)
183+
->Unit(benchmark::kMillisecond)
184+
->Iterations(20);
185+
BENCHMARK_CAPTURE(DAP_OPS_FIR, vs16_ts240_f32, _mlir_ciface_buddy_fir_vs_16_ts_240_f32)
186+
->Unit(benchmark::kMillisecond)
187+
->Iterations(20);
188+
BENCHMARK_CAPTURE(DAP_OPS_FIR, vs16_ts256_f32, _mlir_ciface_buddy_fir_vs_16_ts_256_f32)
189+
->Unit(benchmark::kMillisecond)
190+
->Iterations(20);
191+
BENCHMARK_CAPTURE(DAP_OPS_FIR, vs16_ts512_f32, _mlir_ciface_buddy_fir_vs_16_ts_512_f32)
192+
->Unit(benchmark::kMillisecond)
193+
->Iterations(20);
194+
BENCHMARK_CAPTURE(DAP_OPS_FIR, vs16_ts1024_f32, _mlir_ciface_buddy_fir_vs_16_ts_1024_f32)
195+
->Unit(benchmark::kMillisecond)
196+
->Iterations(20);
197+
BENCHMARK_CAPTURE(DAP_OPS_FIR, vs16_ts2048_f32, _mlir_ciface_buddy_fir_vs_16_ts_2048_f32)
198+
->Unit(benchmark::kMillisecond)
199+
->Iterations(20);
200+
BENCHMARK_CAPTURE(DAP_OPS_FIR, vs16_ts4096_f32, _mlir_ciface_buddy_fir_vs_16_ts_4096_f32)
201+
->Unit(benchmark::kMillisecond)
202+
->Iterations(20);
203+
BENCHMARK_CAPTURE(DAP_OPS_FIR, vs16_ts8192_f32, _mlir_ciface_buddy_fir_vs_16_ts_8192_f32)
204+
->Unit(benchmark::kMillisecond)
205+
->Iterations(20);
206+
BENCHMARK_CAPTURE(DAP_OPS_FIR, vs8_ts256_f64, _mlir_ciface_buddy_fir_vs_8_ts_256_f64)
207+
->Unit(benchmark::kMillisecond)
208+
->Iterations(20);
209+
BENCHMARK_CAPTURE(DAP_OPS_FIR, vs8_ts128_f64, _mlir_ciface_buddy_fir_vs_8_ts_128_f64)
210+
->Unit(benchmark::kMillisecond)
211+
->Iterations(20);
212+
BENCHMARK_CAPTURE(DAP_OPS_FIR, vs8_ts512_f64, _mlir_ciface_buddy_fir_vs_8_ts_512_f64)
213+
->Unit(benchmark::kMillisecond)
214+
->Iterations(20);
215+
BENCHMARK_CAPTURE(DAP_OPS_FIR, vs8_ts1024_f64, _mlir_ciface_buddy_fir_vs_8_ts_1024_f64)
216+
->Unit(benchmark::kMillisecond)
217+
->Iterations(20);
175218

176219
// -----------------------------------------------------------------------------
177220
// Main Function.

benchmarks/AudioProcessing/Operations/FIROp/Utils.hpp

+42
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,48 @@ void _mlir_ciface_fir_vector_f32(MemRef<float, 1> *inputMLIRFIR,
4444
void _mlir_ciface_fir_vector_f64(MemRef<double, 1> *inputMLIRFIR,
4545
MemRef<double, 1> *kernelMLIRFIR,
4646
MemRef<double, 1> *outputMLIRFIR);
47+
void _mlir_ciface_buddy_fir_vs_8_ts_256_f64(MemRef<double, 1> *inputMLIRFIR,
48+
MemRef<double, 1> *kernelMLIRFIR,
49+
MemRef<double, 1> *outputMLIRFIR);
50+
void _mlir_ciface_buddy_fir_vs_8_ts_128_f64(MemRef<double, 1> *inputMLIRFIR,
51+
MemRef<double, 1> *kernelMLIRFIR,
52+
MemRef<double, 1> *outputMLIRFIR);
53+
void _mlir_ciface_buddy_fir_vs_8_ts_512_f64(MemRef<double, 1> *inputMLIRFIR,
54+
MemRef<double, 1> *kernelMLIRFIR,
55+
MemRef<double, 1> *outputMLIRFIR);
56+
void _mlir_ciface_buddy_fir_vs_8_ts_1024_f64(MemRef<double, 1> *inputMLIRFIR,
57+
MemRef<double, 1> *kernelMLIRFIR,
58+
MemRef<double, 1> *outputMLIRFIR);
59+
void _mlir_ciface_buddy_fir_vs_16_ts_64_f32(MemRef<float, 1> *inputMLIRFIR,
60+
MemRef<float, 1> *kernelMLIRFIR,
61+
MemRef<float, 1> *outputMLIRFIR);
62+
void _mlir_ciface_buddy_fir_vs_16_ts_128_f32(MemRef<float, 1> *inputMLIRFIR,
63+
MemRef<float, 1> *kernelMLIRFIR,
64+
MemRef<float, 1> *outputMLIRFIR);
65+
void _mlir_ciface_buddy_fir_vs_16_ts_240_f32(MemRef<float, 1> *inputMLIRFIR,
66+
MemRef<float, 1> *kernelMLIRFIR,
67+
MemRef<float, 1> *outputMLIRFIR);
68+
void _mlir_ciface_buddy_fir_vs_16_ts_256_f32(MemRef<float, 1> *inputMLIRFIR,
69+
MemRef<float, 1> *kernelMLIRFIR,
70+
MemRef<float, 1> *outputMLIRFIR);
71+
void _mlir_ciface_buddy_fir_vs_8_ts_256_f32(MemRef<float, 1> *inputMLIRFIR,
72+
MemRef<float, 1> *kernelMLIRFIR,
73+
MemRef<float, 1> *outputMLIRFIR);
74+
void _mlir_ciface_buddy_fir_vs_16_ts_512_f32(MemRef<float, 1> *inputMLIRFIR,
75+
MemRef<float, 1> *kernelMLIRFIR,
76+
MemRef<float, 1> *outputMLIRFIR);
77+
void _mlir_ciface_buddy_fir_vs_16_ts_1024_f32(MemRef<float, 1> *inputMLIRFIR,
78+
MemRef<float, 1> *kernelMLIRFIR,
79+
MemRef<float, 1> *outputMLIRFIR);
80+
void _mlir_ciface_buddy_fir_vs_16_ts_2048_f32(MemRef<float, 1> *inputMLIRFIR,
81+
MemRef<float, 1> *kernelMLIRFIR,
82+
MemRef<float, 1> *outputMLIRFIR);
83+
void _mlir_ciface_buddy_fir_vs_16_ts_4096_f32(MemRef<float, 1> *inputMLIRFIR,
84+
MemRef<float, 1> *kernelMLIRFIR,
85+
MemRef<float, 1> *outputMLIRFIR);
86+
void _mlir_ciface_buddy_fir_vs_16_ts_8192_f32(MemRef<float, 1> *inputMLIRFIR,
87+
MemRef<float, 1> *kernelMLIRFIR,
88+
MemRef<float, 1> *outputMLIRFIR);
4789
}
4890

4991
// -----------------------------------------------------------------------------

0 commit comments

Comments
 (0)