From 6c69e1710d4327e4931a92188db65872d94a71e0 Mon Sep 17 00:00:00 2001 From: Jack Lo Date: Wed, 24 Apr 2024 02:07:54 -0700 Subject: [PATCH] Major update to section-4, especially 4c --- aie_kernels/aie2/scale.cc | 58 +++++- .../matrix_multiplication/makefile-common | 17 +- .../matrix_multiplication/single_core/aie2.py | 2 +- .../basic/vector_scalar_add/aie2.py | 100 +++++----- .../basic/vector_scalar_mul/Makefile | 14 +- .../basic/vector_scalar_mul/aie2.py | 18 +- .../basic/vector_scalar_mul/test.cpp | 9 +- programming_examples/utils/README.md | 26 ++- programming_examples/utils/parse_eventIR.py | 4 +- .../assets/aie-ml_shift_adder_path.png | Bin 0 -> 9607 bytes programming_guide/assets/aie-ml_srs_ups.png | Bin 0 -> 12132 bytes .../assets/aie-ml_vector_unit.png | Bin 0 -> 14400 bytes .../assets/aie_compute_details1.png | Bin 0 -> 127669 bytes .../assets/aie_vector_scalar_ml_opt1.png | Bin 0 -> 60299 bytes .../assets/trace_vector_scalar_add1.png | Bin 0 -> 53276 bytes programming_guide/quick_reference.md | 6 +- programming_guide/section-4/README.md | 2 +- .../section-4/section-4a/README.md | 2 +- .../section-4/section-4a/aie2.py | 6 +- .../section-4/section-4a/answers/aie2.py | 6 +- .../section-4/section-4b/Makefile | 17 +- .../section-4/section-4b/README.md | 45 +++-- .../section-4/section-4b/aie2.py | 11 +- .../section-4/section-4b/test.cpp | 1 - .../section-4/section-4b/test.py | 22 +-- .../section-4/section-4c/README.md | 180 +++++++++++++++--- python/utils/README.md | 9 +- 27 files changed, 382 insertions(+), 173 deletions(-) mode change 100755 => 100644 programming_examples/basic/vector_scalar_mul/Makefile mode change 100755 => 100644 programming_examples/basic/vector_scalar_mul/aie2.py create mode 100644 programming_guide/assets/aie-ml_shift_adder_path.png create mode 100644 programming_guide/assets/aie-ml_srs_ups.png create mode 100644 programming_guide/assets/aie-ml_vector_unit.png create mode 100755 programming_guide/assets/aie_compute_details1.png create mode 100755 programming_guide/assets/aie_vector_scalar_ml_opt1.png create mode 100644 programming_guide/assets/trace_vector_scalar_add1.png diff --git a/aie_kernels/aie2/scale.cc b/aie_kernels/aie2/scale.cc index c212ed2514..dce4635a37 100755 --- a/aie_kernels/aie2/scale.cc +++ b/aie_kernels/aie2/scale.cc @@ -19,6 +19,7 @@ #include +// Scalar scale template template void scale_scalar(T *a, T *c, T factor, const int32_t N) { event0(); @@ -28,35 +29,74 @@ void scale_scalar(T *a, T *c, T factor, const int32_t N) { event1(); } + +// Vectorized scale template // Assume N is multiple of 16 template -void scale_vectorized(T *a, T *c, T factor, const int32_t N) { - constexpr int vec_factor = 16; +void scale_vectorized(T *a, T *c, int32_t factor, const int32_t N) { event0(); + constexpr int vec_factor = 32; T *__restrict pA1 = a; T *__restrict pC1 = c; const int F = N / vec_factor; + T fac = factor; for (int i = 0; i < F; i++) - chess_prepare_for_pipelining chess_loop_range(16, ) { + chess_prepare_for_pipelining chess_loop_range(16, ) + { aie::vector A0 = aie::load_v(pA1); pA1 += vec_factor; + aie::accum cout = aie::mul(A0, fac); + aie::store_v(pC1, cout.template to_vector(0)); + pC1 += vec_factor; + } + event1(); +} + +// Vectorized scale tempalte for int32_t (acc64 used) +// Assume N is multiple of 16 +template <> +void scale_vectorized(int32_t *a, int32_t *c, int32_t factor, const int32_t N) { + event0(); + constexpr int vec_factor = 32; + int32_t *__restrict pA1 = a; + int32_t *__restrict pC1 = c; + const int F = N / vec_factor; + for (int i = 0; i < F; i++) + chess_prepare_for_pipelining chess_loop_range(16, ) + { + aie::vector A0 = aie::load_v(pA1); + pA1 += vec_factor; aie::accum cout = aie::mul(A0, factor); - aie::store_v(pC1, cout.to_vector(0)); + aie::store_v(pC1, cout.template to_vector(0)); pC1 += vec_factor; - } + } event1(); } + extern "C" { -void vector_scalar_mul_aie(int32_t *a_in, int32_t *c_out, int32_t *factor, - int32_t N) { +// 16-bit datatype +void vector_scalar_mul_int32_scalar(int32_t *a_in, int32_t *c_out, + int32_t *factor, int32_t N) { + scale_scalar(a_in, c_out, *factor, N); +} + +void vector_scalar_mul_int32_vector(int32_t *a_in, int32_t *c_out, + int32_t *factor, int32_t N) { scale_vectorized(a_in, c_out, *factor, N); } -void vector_scalar_mul_aie_scalar(int32_t *a_in, int32_t *c_out, +// 32-bit datatype +void vector_scalar_mul_int16_scalar(int16_t *a_in, int16_t *c_out, int32_t *factor, int32_t N) { - scale_scalar(a_in, c_out, *factor, N); + scale_scalar(a_in, c_out, *factor, N); } +void vector_scalar_mul_int16_vector(int16_t *a_in, int16_t *c_out, + int32_t *factor, int32_t N) { + scale_vectorized(a_in, c_out, *factor, N); +} + + } // extern "C" diff --git a/programming_examples/basic/matrix_multiplication/makefile-common b/programming_examples/basic/matrix_multiplication/makefile-common index fd6a438ea0..5e41886d79 100644 --- a/programming_examples/basic/matrix_multiplication/makefile-common +++ b/programming_examples/basic/matrix_multiplication/makefile-common @@ -38,6 +38,8 @@ M?=512 K?=512 N?=512 +trace_size=16384 + mlir_target?=build/aie_${M}x${K}x${N}.mlir xclbin_target?=build/final_${M}x${K}x${N}.xclbin insts_target?=build/insts_${M}x${K}x${N}.txt @@ -83,14 +85,19 @@ run: ${targetname}.exe ${xclbin_target} ${insts_target} #sign export XRT_HACK_UNSECURE_LOADING_XCLBIN=1 && \ ${powershell} ./$< -x ${xclbin_target} -i ${insts_target} -k MLIR_AIE -M $M -K $K -N $N ${runargs} -.PHONY: clean -clean: - rm -rf build _build ${targetname}.exe +trace: ${targetname}.exe ${xclbin_target} ${insts_target} # sign + export XRT_HACK_UNSECURE_LOADING_XCLBIN=1 && \ + ${powershell} ./$< -x ${xclbin_target} -i ${insts_target} -k MLIR_AIE -M $M -K $K -N $N -v 1 --warmup 0 --iters 1 -t ${trace_size} + ../../../utils/parse_trace.py --filename trace.txt --mlir ${mlir_target} --colshift 1 > parse_trace_mm.json .PHONY: parse_trace parse_trace: - ../../../utils/parse_eventIR.py --filename trace.txt --mlir ./build/aie.mlir --colshift 1 > trace_eventIR.json + ../../../utils/parse_trace.py --filename trace.txt --mlir ${mlir_target} --colshift 1 > parse_trace_mm.json + +.PHONY: clean +clean: clean_trace + rm -rf build _build ${targetname}.exe .PHONY: clean_trace clean_trace: - rm -rf tmpTrace trace_eventIR.json + rm -rf tmpTrace parse*.json diff --git a/programming_examples/basic/matrix_multiplication/single_core/aie2.py b/programming_examples/basic/matrix_multiplication/single_core/aie2.py index c985bbef3e..4f2420fd1d 100644 --- a/programming_examples/basic/matrix_multiplication/single_core/aie2.py +++ b/programming_examples/basic/matrix_multiplication/single_core/aie2.py @@ -25,7 +25,7 @@ def my_matmul(): word_size_out = 2 vectorized = True - enable_tracing = False + enable_tracing = True trace_size = 16384 A_sz_in_i32s = M * K * word_size_in // 4 diff --git a/programming_examples/basic/vector_scalar_add/aie2.py b/programming_examples/basic/vector_scalar_add/aie2.py index 7c99acd401..5b07ba096c 100644 --- a/programming_examples/basic/vector_scalar_add/aie2.py +++ b/programming_examples/basic/vector_scalar_add/aie2.py @@ -13,63 +13,67 @@ def my_vector_bias_add(): - with mlir_mod_ctx() as ctx: - @device(AIEDevice.ipu) - def device_body(): - memRef_16_ty = T.memref(16, T.i32()) - memRef_8_ty = T.memref(8, T.i32()) + @device(AIEDevice.ipu) + def device_body(): + memRef_16_ty = T.memref(16, T.i32()) + memRef_8_ty = T.memref(8, T.i32()) - # Tile declarations - ShimTile = tile(0, 0) - MemTile = tile(0, 1) - ComputeTile2 = tile(0, 2) + # Tile declarations + ShimTile = tile(0, 0) + MemTile = tile(0, 1) + ComputeTile2 = tile(0, 2) - # AIE-array data movement with object fifos - # Input - of_in0 = object_fifo("in0", ShimTile, MemTile, 2, memRef_16_ty) - of_in1 = object_fifo("in1", MemTile, ComputeTile2, 2, memRef_8_ty) - object_fifo_link(of_in0, of_in1) + # AIE-array data movement with object fifos + # Input + of_in0 = object_fifo("in0", ShimTile, MemTile, 2, memRef_16_ty) + of_in1 = object_fifo("in1", MemTile, ComputeTile2, 2, memRef_8_ty) + object_fifo_link(of_in0, of_in1) - # Output - of_out0 = object_fifo("out0", MemTile, ShimTile, 2, memRef_16_ty) - of_out1 = object_fifo("out1", ComputeTile2, MemTile, 2, memRef_8_ty) - object_fifo_link(of_out1, of_out0) + # Output + of_out0 = object_fifo("out0", MemTile, ShimTile, 2, memRef_16_ty) + of_out1 = object_fifo("out1", ComputeTile2, MemTile, 2, memRef_8_ty) + object_fifo_link(of_out1, of_out0) - # Set up compute tiles + # Set up compute tiles - # Compute tile 2 - @core(ComputeTile2) - def core_body(): - # Effective while(1) - for _ in for_(8): - elem_in = of_in1.acquire(ObjectFifoPort.Consume, 1) - elem_out = of_out1.acquire(ObjectFifoPort.Produce, 1) - for i in for_(8): - v0 = memref.load(elem_in, [i]) - v1 = arith.addi(v0, arith.constant(1, T.i32())) - memref.store(v1, elem_out, [i]) - yield_([]) - of_in1.release(ObjectFifoPort.Consume, 1) - of_out1.release(ObjectFifoPort.Produce, 1) + # Compute tile 2 + @core(ComputeTile2) + def core_body(): + # Effective while(1) + for _ in for_(8): + elem_in = of_in1.acquire(ObjectFifoPort.Consume, 1) + elem_out = of_out1.acquire(ObjectFifoPort.Produce, 1) + for i in for_(8): + v0 = memref.load(elem_in, [i]) + v1 = arith.addi(v0, arith.constant(1, T.i32())) + memref.store(v1, elem_out, [i]) yield_([]) + of_in1.release(ObjectFifoPort.Consume, 1) + of_out1.release(ObjectFifoPort.Produce, 1) + yield_([]) - # To/from AIE-array data movement + # To/from AIE-array data movement - memRef_64_ty = T.memref(64, T.i32()) - memRef_32_ty = T.memref(32, T.i32()) + memRef_64_ty = T.memref(64, T.i32()) + memRef_32_ty = T.memref(32, T.i32()) - @FuncOp.from_py_func(memRef_64_ty, memRef_32_ty, memRef_64_ty) - def sequence(inTensor, notUsed, outTensor): - ipu_dma_memcpy_nd( - metadata="out0", bd_id=0, mem=outTensor, sizes=[1, 1, 1, 64] - ) - ipu_dma_memcpy_nd( - metadata="in0", bd_id=1, mem=inTensor, sizes=[1, 1, 1, 64] - ) - ipu_sync(column=0, row=0, direction=0, channel=0) + @FuncOp.from_py_func(memRef_64_ty, memRef_32_ty, memRef_64_ty) + def sequence(inTensor, notUsed, outTensor): + ipu_dma_memcpy_nd( + metadata="out0", bd_id=0, mem=outTensor, sizes=[1, 1, 1, 64] + ) + ipu_dma_memcpy_nd( + metadata="in0", bd_id=1, mem=inTensor, sizes=[1, 1, 1, 64] + ) + ipu_sync(column=0, row=0, direction=0, channel=0) - print(ctx.module) - -my_vector_bias_add() +# Declares that subsequent code is in mlir-aie context +with mlir_mod_ctx() as ctx: + my_vector_bias_add() + res = ctx.module.operation.verify() + if(res == True): + print(ctx.module) + else: + print(res) diff --git a/programming_examples/basic/vector_scalar_mul/Makefile b/programming_examples/basic/vector_scalar_mul/Makefile old mode 100755 new mode 100644 index 8099ac5b83..5fa63a260e --- a/programming_examples/basic/vector_scalar_mul/Makefile +++ b/programming_examples/basic/vector_scalar_mul/Makefile @@ -11,8 +11,8 @@ include ../../makefile-common VPATH := ../../../aie_kernels/aie2 targetname = vectorScalar -#data_size = 4096 -data_size = 512 +data_size = 4096 +#data_size = 512 #data_size = 1024 trace_size = 8192 @@ -38,7 +38,7 @@ build/final_${data_size}.xclbin: build/aie_${data_size}.mlir build/scale.o cd ${@D} && aiecc.py --aie-generate-cdo --no-compile-host --xclbin-name=${@F} \ --aie-generate-ipu --ipu-insts-name=insts_${data_size}.txt $(<:%=../%) -build/final_trace_${data_size}.xclbin: build/aie_trace.mlir build/scale.o +build/final_trace_${data_size}.xclbin: build/aie_trace_${data_size}.mlir build/scale.o mkdir -p ${@D} cd ${@D} && aiecc.py --aie-generate-cdo --no-compile-host --xclbin-name=${@F} \ --aie-generate-ipu --ipu-insts-name=insts_${data_size}.txt $(<:%=../%) @@ -62,16 +62,16 @@ run_py: build/final_${data_size}.xclbin build/insts_${data_size}.txt trace: ${targetname}_${data_size}.exe build/final_trace_${data_size}.xclbin build/insts_${data_size}.txt ${powershell} ./$< -x build/final_trace_${data_size}.xclbin -i build/insts_${data_size}.txt -k MLIR_AIE -t ${trace_size} - ../../utils/parse_eventIR.py --filename trace.txt --mlir build/aie_trace__${data_size}.mlir --colshift 1 > parse_eventIR_vs.json + ../../utils/parse_trace.py --filename trace.txt --mlir build/aie_trace_${data_size}.mlir --colshift 1 > trace_vs.json trace_py: build/final_trace_${data_size}.xclbin build/insts_${data_size}.txt ${powershell} python3 test.py -x build/final_trace_${data_size}.xclbin -i build/insts_${data_size}.txt -k MLIR_AIE -t ${trace_size} -s ${data_size} - ../../utils/parse_eventIR.py --filename trace.txt --mlir build/aie_trace_${data_size}.mlir --colshift 1 > parse_eventIR_vs.json + ../../utils/parse_trace.py --filename trace.txt --mlir build/aie_trace_${data_size}.mlir --colshift 1 > trace_vs.json clean_trace: - rm -rf tmpTrace trace.txt + rm -rf tmpTrace trace.txt parse*json trace*json clean: clean_trace - rm -rf build _build ${targetname}_*.exe + rm -rf build _build ${targetname}*.exe diff --git a/programming_examples/basic/vector_scalar_mul/aie2.py b/programming_examples/basic/vector_scalar_mul/aie2.py old mode 100755 new mode 100644 index d6ca3d0813..3617f2e2a5 --- a/programming_examples/basic/vector_scalar_mul/aie2.py +++ b/programming_examples/basic/vector_scalar_mul/aie2.py @@ -16,8 +16,10 @@ def my_vector_scalar(vector_size, trace_size): + word_size_in = 2 N = vector_size - N_in_bytes = N * 4 + N_in_i32s = N * word_size_in // 4 + N_in_bytes = N_in_i32s * 4 N_div_n = 4 # chop input vector into 4 sub-vectors n = N // N_div_n @@ -27,17 +29,17 @@ def my_vector_scalar(vector_size, trace_size): @device(AIEDevice.ipu) def device_body(): - memRef_ty = T.memref(n, T.i32()) + memRef_ty = T.memref(n, T.i16()) memRef_ty2 = T.memref(1, T.i32()) # AIE Core Function declarations scale_scalar = external_func( - "vector_scalar_mul_aie_scalar", + "vector_scalar_mul_int16_scalar", inputs=[memRef_ty, memRef_ty, memRef_ty2, T.i32()], ) scale = external_func( - "vector_scalar_mul_aie", inputs=[memRef_ty, memRef_ty, memRef_ty2, T.i32()] + "vector_scalar_mul_int16_vector", inputs=[memRef_ty, memRef_ty, memRef_ty2, T.i32()] ) # Tile declarations @@ -78,7 +80,7 @@ def core_body(): yield_([]) # To/from AIE-array data movement - tensor_ty = T.memref(N, T.i32()) + tensor_ty = T.memref(N_in_i32s, T.i32()) scalar_ty = T.memref(1, T.i32()) @FuncOp.from_py_func(tensor_ty, scalar_ty, tensor_ty) @@ -92,15 +94,15 @@ def sequence(A, F, C): size=trace_size, offset=N_in_bytes, ) - ipu_dma_memcpy_nd(metadata="out", bd_id=0, mem=C, sizes=[1, 1, 1, N]) - ipu_dma_memcpy_nd(metadata="in", bd_id=1, mem=A, sizes=[1, 1, 1, N]) + ipu_dma_memcpy_nd(metadata="out", bd_id=0, mem=C, sizes=[1, 1, 1, N_in_i32s]) + ipu_dma_memcpy_nd(metadata="in", bd_id=1, mem=A, sizes=[1, 1, 1, N_in_i32s]) ipu_dma_memcpy_nd(metadata="infactor", bd_id=2, mem=F, sizes=[1, 1, 1, 1]) ipu_sync(column=0, row=0, direction=0, channel=0) try: vector_size = int(sys.argv[1]) - if vector_size % 64 != 0 or vector_size <= 512: + if vector_size % 64 != 0 or vector_size < 512: print("Vector size must be a multiple of 64 and greater than or equal to 512") raise ValueError trace_size = 0 if (len(sys.argv) != 3) else int(sys.argv[2]) diff --git a/programming_examples/basic/vector_scalar_mul/test.cpp b/programming_examples/basic/vector_scalar_mul/test.cpp index e147d91fa4..fe81d3ba9e 100644 --- a/programming_examples/basic/vector_scalar_mul/test.cpp +++ b/programming_examples/basic/vector_scalar_mul/test.cpp @@ -22,7 +22,8 @@ // Configure this to match your buffer data type // ------------------------------------------------------ // using DATATYPE = std::uint8_t; -using DATATYPE = std::uint32_t; +// using DATATYPE = std::uint32_t; +using DATATYPE = std::uint16_t; #endif const int scaleFactor = 3; @@ -67,7 +68,7 @@ int main(int argc, const char *argv[]) { XCL_BO_FLAGS_CACHEABLE, kernel.group_id(0)); auto bo_inA = xrt::bo(device, IN_SIZE, XRT_BO_FLAGS_HOST_ONLY, kernel.group_id(2)); - auto bo_inFactor = xrt::bo(device, 1 * sizeof(DATATYPE), + auto bo_inFactor = xrt::bo(device, 1 * sizeof(int32_t), XRT_BO_FLAGS_HOST_ONLY, kernel.group_id(3)); auto bo_outC = xrt::bo(device, OUT_SIZE, XRT_BO_FLAGS_HOST_ONLY, kernel.group_id(4)); @@ -85,8 +86,8 @@ int main(int argc, const char *argv[]) { bufInA[i] = i + 1; // Initialize buffer bo_inFactor - DATATYPE *bufInFactor = bo_inFactor.map(); - *bufInFactor = scaleFactor; + int32_t *bufInFactor = bo_inFactor.map(); + *bufInFactor = (DATATYPE)scaleFactor; // Zero out buffer bo_outC DATATYPE *bufOut = bo_outC.map(); diff --git a/programming_examples/utils/README.md b/programming_examples/utils/README.md index 8a73c46207..2cb70cb7c5 100644 --- a/programming_examples/utils/README.md +++ b/programming_examples/utils/README.md @@ -15,8 +15,8 @@ These utilities are helpful in the current programming examples context and incl - [Open CV Utilities](#open-cv-utilities-opencvutilsh) ([OpenCVUtils.h](./OpenCVUtils.h)) - [Clean microcode shell script](#clean-microcode-shell-script-clean_microcodesh) ([clean_microcode.sh](./clean_microcode.sh)) +- [Trace parser](#trace-parser-parse_tracepy) ([parse_trace.py](./parse_trace.py)) - [Trace parser - eventIR based](#trace-parser---eventir-based-parse_eventirpy) ([parse_eventIR.py](./parse_eventIR.py)) -- [Trace parser, custom](#trace-parser-custom-parse_tracepy) ([parse_trace.py](./parse_trace.py)) ## Open CV Utilities ([OpenCVUtils.h](./OpenCVUtils.h)) OpenCV utilities used in vision processing pipelines to help read and/or initialize images and video. Currently supported functions include the following. Please view header for more specific function information. @@ -32,8 +32,24 @@ OpenCV utilities used in vision processing pipelines to help read and/or initial ## Clean microcode shell script ([clean_microcode.sh](./clean_microcode.sh)) Shell script to do in-place cleanup of microcode files (e.g. core_*.lst). When viewing microcode, it's helpful for some of the extra information like hardware and software breakpoints to be removed so it's easier to see back-to-back lines of microcode. +## Trace parser ([parse_trace.py](./parse_trace.py)) +The text file generated by the host code (`test.cpp` or `test.py`) are formatted as 32-bit hex values, one per line. This python script parses the raw trace packet data and creates a waveform json file for view on Perfetto http://ui.perfetto.dev. The script syntax is: + +```bash +parse_trace.py --filename trace.txt --mlir build/aie_trace.mlir --colshift 1 > parse_eventIR_vs.json +``` + +* **--filename** : Input trace packet text file. This is generated during the running of our python host code +* **--mlir** : MLIR source. This is needed to parse what events and tiles we are monitoring to generate labels for our waveform visualizer. +* **--colshift** : runtime column shift. This specifies how much the actual design was shifted from the default position when it was scheduled and called. The reason we need this is becuase even if our design is configured for column 0, the actual loading and execution of the design may place it in column 1, 2, 3 etc. We account for this shift since the parser needs to match the actual column location of the generated trace data. Usually 1 is the right value. **NOTE** - the underlying tools currently default to column 1 to avoid using column 0 on Ryzen AI since that column does not have a shimDMA and is therefore avoided at the moment. + + ## Trace parser - eventIR based ([parse_eventIR.py](./parse_eventIR.py)) -The text file generated by the host code (`test.cpp` or `test.py`) are formatted as 32-bit hex values, one per line. This python script executes a number of steps in order to transform it from trace packet text file into a waveform json file. The script syntax is: +The text file generated by the host code (`test.cpp` or `test.py`) are formatted as 32-bit hex values, one per line. This python script executes a number of steps in order to transform it from trace packet text file into a waveform json file. + +**NOTE** - There seems to be some inconsistencies in the results generated by this parser. As of now, it is used to compare to existing the `hwfrontend` tool only. + +The script syntax is: ```bash parse_eventIR.py --filename trace.txt --mlir build/aie_trace.mlir --colshift 1 > parse_eventIR_vs.json @@ -90,9 +106,3 @@ to ``` which reduces the timer from 11,091,042 cycles to 381,175 seems to fix it. -## Trace parser, custom ([parse_trace.py](./parse_trace.py)) -This is our custom trace packet parser based on the trace packet spec, but it's currently a work in progress as some inconsisteancies with the generated waveform have cropped up. It is run in the same way as `parse_eventIR.py` but does not generate the intermediate directory `tmpTrace` or the other intermediate files use by `parse_eventIR.py`. - -```bash -parse_eventIR.py --filename trace.txt --mlir build/aie_trace.mlir --colshift 1 > parse_eventIR_vs.json -``` diff --git a/programming_examples/utils/parse_eventIR.py b/programming_examples/utils/parse_eventIR.py index b7c989ca3c..9b11975e17 100755 --- a/programming_examples/utils/parse_eventIR.py +++ b/programming_examples/utils/parse_eventIR.py @@ -18,7 +18,7 @@ rowoffset = 1 # TODO tmeporary workaround to figure out row offset for AIE2 for tiles DEBUG = False -verbose = False +verbose = True eventIRFile = "eventIR.txt" tmpTraceDirName = "tmpTrace" @@ -733,6 +733,8 @@ def lookup_event_name_by_type(trace_type, code): if trace_type == 0: if code == 0x1: event = "True" + elif code == 23: # 0x17: + event = "MemoryStall" elif code == 24: # 0x18: event = "StreamStall" elif code == 26: # 0x1A: diff --git a/programming_guide/assets/aie-ml_shift_adder_path.png b/programming_guide/assets/aie-ml_shift_adder_path.png new file mode 100644 index 0000000000000000000000000000000000000000..5723cd6b6f7853f387fd96f8e6649403c7a6c420 GIT binary patch literal 9607 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 azC9*(1TMJI62PCQ(4a4sWy__F0{$0N5U=b2 literal 0 HcmV?d00001 diff --git a/programming_guide/assets/aie-ml_srs_ups.png b/programming_guide/assets/aie-ml_srs_ups.png new file mode 100644 index 0000000000000000000000000000000000000000..1d45408bfe00af8e0eb3a3de51714f147173f3c8 GIT binary patch literal 12132 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�bom~i(AbH7m=i}@>m2^6!811WBO!93_Tx13S%4Pxs zbOVHk!SWS7u363ohw-W#9A$rqz zUmi}PBhmE?@ zk_DR25--cDFX2ys+V|*`eGoxt&klcZx6O}J2jPG$PQ2RYtMd-i&C1a|B$FEFRhHj6P@jJPn@)xGW zVSA#eX39Ps=B$=8(*JWL`W^xO+u@V`CjlXXJtzRCT%zPuas4gsvJSh!8#CR5tY9XB z#2@$#5V{Ry0e0rV#tcJ1`j!jJJq+_3zK9Y$JEdn`JsiKx?o37Sv(@|GQ%-GBsQksw zsPwP4py&ZOpF>x1L5wbSsU`wweoQTMdOUc9_#k;HS5#B*Hlw?XP6IKwRzx10GKX$c>+qALm}0kA}lc6mDiw6BSqh_w`Ou ze33~=NN8eW;>>mQ?+0Bs8T_JThGxP@=0%oGU|=9n2)Mb`ai@{o%&CGXq|AX9<_M8b zc9yM|*QCFo(JG)5TWA8QHX;-lalUmk#LC8rd-G+=BC}I#3qolt^EICGq_RJ73(ZDNr<}65GyblkEN~* KRjPzohWr;ks(C~J literal 0 HcmV?d00001 diff --git a/programming_guide/assets/aie-ml_vector_unit.png b/programming_guide/assets/aie-ml_vector_unit.png new file mode 100644 index 0000000000000000000000000000000000000000..2151f8feccb36bb3efc5b160a3be6dff55759eba GIT binary patch literal 14400 zcmdse2UOErw~}zW46D_2zwRX04gE1pe)`ea_zd_uG5>>JL>piVHU`kdTm2D9B4| zkdU0d0)8mYp9W9J>FnQvKd0O@6-g43!fHxd#^ z6Y=L%i%W(j35j68g0!U8W0RF}aa)+7&#vq9CUZwK)*}CgjS=qFFHaryI7VJX@7`+5 z`_zC6j1^Wld{r4D()j8$S=-o!GgmIWHofY|cutDlTe5-T>P6X~w=UdBd3gQmm_)-3 z^5TY?Zung0qGo@8u6^dBdy?j)+Fi}LOig4}^&&nii$A`Un}mcTB@wEtt1BlbS8e;O zCMq^I_Mpo=H7`FuJUo0muwe;GPoIpzED492#NTRZYHCXMKp<|WUpG;kz#bj>!~0fO zSGSC1A0ZxAt4X4z#IMzK+4A}9u8wzgLC8E^>=3QPrInR;1fhAa&SB%qYHR(G$b6?W zTYG!AUBtWsoGL0SBX?td&a((A|^Yvw)dQY+SN&)hv zlw@aTry`a7wJRq{Q6)wh0X57Ei+L@Z($pm7#CU#UlLRIJ6DfH*aTnW=l0{NcNWQi* zT24blGa?~eQMkk!1?BmGt(YCL{SAAWp3IYEcXu}-Az?(qB?9_10y^dTkW2!x)t8O7 zxaq#pe=EJI;o)7V1Fz;tkR8_u&Qb)L%r%zYMm5wgWDr+qYeEN;dkh`&EJf)c3_MGA zeuv44*WQHRN)Ie8EsfLs@tkc?fL_tbz}^4cX7@WgB;0gHi#FC*$GMrxEpS*<%a>zl zqgWpG^M1jKS;9Ky@>dRCH|wPB2UM(+OHlDO>erhDIo#Qm|+btyu z%ScD5{Z}8=&W%+qCw{ef_MG*tfD�e$haP%n~!aarzV2)uS+Ko0(Cs&QvgkZ|;bS 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 oh~twPfRg|AmzCfC#__3r0}gZt1K%w8Uw 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

oq@qFJW1`Y;kj@4u8;iVw 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 literal 0 HcmV?d00001 diff --git a/programming_guide/assets/aie_vector_scalar_ml_opt1.png b/programming_guide/assets/aie_vector_scalar_ml_opt1.png new file mode 100755 index 0000000000000000000000000000000000000000..712fa2881444449f8b3dc1589f6947edf5914681 GIT binary patch literal 60299 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

4ik1 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 literal 0 HcmV?d00001 diff --git a/programming_guide/assets/trace_vector_scalar_add1.png b/programming_guide/assets/trace_vector_scalar_add1.png new file mode 100644 index 0000000000000000000000000000000000000000..fd6e9e8e42e74270ab8c2c331496cbbfc70e1807 GIT binary patch literal 53276 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 $@ @@ -32,18 +34,23 @@ else cp _build/${targetname} $@ endif -run-g: ${targetname}.exe build/final.xclbin build/insts.txt - ${powershell} ./$< -x build/final.xclbin -i build/insts.txt -k MLIR_AIE -t 8192 +run: ${targetname}.exe build/final.xclbin build/insts.txt + ${powershell} ./$< -x build/final.xclbin -i build/insts.txt -k MLIR_AIE run_py: build/final.xclbin build/insts.txt ${powershell} python3 test.py -x build/final.xclbin -i build/insts.txt -k MLIR_AIE -trace: - ../../../programming_examples/utils/parse_eventIR.py --filename trace.txt --mlir build/aie.mlir --colshift 1 > parse_eventIR_vs.json +trace: ${targetname}.exe build/final.xclbin build/insts.txt + ${powershell} ./$< -x build/final.xclbin -i build/insts.txt -k MLIR_AIE -t ${trace_size} + ../../../programming_examples/utils/parse_trace.py --filename trace.txt --mlir build/aie.mlir --colshift 1 > trace_4b.json + +trace_py: build/final.xclbin build/insts.txt + ${powershell} python3 test.py -x build/final.xclbin -i build/insts.txt -k MLIR_AIE -t ${trace_size} + ../../../programming_examples/utils/parse_trace.py --filename trace.txt --mlir build/aie.mlir --colshift 1 > trace_4b.json clean_trace: - rm -rf tmpTrace trace.txt + rm -rf tmpTrace trace.txt trace*json clean: clean_trace rm -rf build _build ${targetname}.exe diff --git a/programming_guide/section-4/section-4b/README.md b/programming_guide/section-4/section-4b/README.md index 71a3b8fdac..e57029ae0c 100644 --- a/programming_guide/section-4/section-4b/README.md +++ b/programming_guide/section-4/section-4b/README.md @@ -13,7 +13,7 @@ * [Section 4 - Vector Programming & Peformance Measurement](../../section-4) * [Section 4a - Timers](../section-4a) * Section 4b - Trace - * [Section 4c - Kernel Vectorization](../section-4c) + * [Section 4c - Kernel Vectorization and Optimization](../section-4c) ----- @@ -102,7 +102,7 @@ packetflow(1) { ## 2. Configure host code to read trace data and write it to a text file -Once the trace units are configured and enabled, we want the host code to read the trace data from DDR and write it out to a text file for post-run processing. +Once the trace units are configured and enabled, we want the host code to read the trace data from DDR and write it out to a text file for post-run processing. To give a better sense of how this comes together, this section provides an example design sourc files and Makefile whose kernel is based off the [Vector Scalar Add example](../../../programming_examples/basic/vector_scalar_add/). ### AIE structural design code ([aie2.py](./aie2.py)) In order to write the DDR data to a text file, we need to decide where we want the DDR data to first be stored and then read from that location, before writing to a text file. This starts inside the [aie2.py](./aie2.py) file where we use the `configure_simple_tracing_aie2` function call to configure the trace units and program the shimDMA to write to one of the 3 inout buffers. There are many ways to configure our structural design to write this data out but one pattern is the following: `inout0` is for input data, `inout1` is for output data, and `inout2` is for output trace data as illustrated below: @@ -124,37 +124,38 @@ As described in [python/utils](../../../python/utils) for `trace.py`, we configu | 1 | inout1 | | 2 | inout2 | -An example of this is in the [Vector Scalar Multiply example](../../../programming_examples/basic/vector_scalar_mul/aie2.py), where it uses the 2nd pattern above (input A, input B, output C + trace). In the vector scalar multiply case, A is used for the input vector and B for the scalar factor. Since we're sharing the trace data with the output buffer on `inout2`, we set `ddr_id=2`. In addition, we set the offset to be the output data buffer size since the trace data is appended after the data (`offset=N_in_bytes`). +An example of this is in the Vector Scalar Multiply example ([aie2.py](../../../programming_examples/basic/vector_scalar_mul/aie2.py)), where it uses the 2nd pattern above (input A, input B, output C + trace). In the vector scalar multiply case, A is used for the input vector and B for the scalar factor. Since we're sharing the trace data with the output buffer on `inout2`, we set `ddr_id=2`. In addition, we set the offset to be the output data buffer size since the trace data is appended after the data (`offset=N_in_bytes`). For our local design ([aie2.py](./aie.py)), we have variation of the 2nd pattern but the second inout buffer is unused (input A, unused, output C + trace). `ddr_id=2` is still used since our output buffer is mapped to `inout2` and our trace data offset is specified as `C_sz_in_bytes`. Once [aie2.py](./aie2.py) is configured to output trace data through one of the 3 inout buffers with matching `ddr_id` config and `offset`, we turn our attention to the host code to read the DDR data and write it to a file. -**NOTE**: In the [Vector Scalar Multiply example](../../../programming_examples/basic/vector_scalar_mul/aie2.py) and associated [Makefile](../../../programming_examples/basic/vector_scalar_mul/Makefile), we provide a Makefile target `run` for standard build and `trace` for trace-enabld build. The trace-enabled build passes the trace buffer size as an argument to [aie2.py](./aie2.py) which conditionally enables the trace `flow` and calls `configure_simple_tracing_aie2` as long as `trace_size` is > 0. +**NOTE**: In our example design, the [aie2.py](./aie2.py) and associated [Makefile](./Makefile), we provide a Makefile target `run` for standard build and `trace` for trace-enabld build. The trace-enabled build passes the trace buffer size as an argument to [aie2.py](./aie2.py) which conditionally enables the trace `flow` and calls `configure_simple_tracing_aie2` as long as `trace_size` is > 0. This is also true for the [Vector Scalar Multiply example](../../../programming_examples/basic/vector_scalar_mul). ### (2a) C/C++ Host code ([test.cpp](./test.cpp)) The main changes needed for [test.cpp](./test.cpp) is the increase in the output buffer size to account for the trace buffer size, being careful to read only the output buffer portion when verifying correctness of the results. We also need to be sure to pass the correct buffer offset which points to the trace buffer data when calling `write_out_trace`. -You can see in the Vector Scalar Multiply example [test.cpp](../../../programming_examples/basic/vector_scalar_mul/test.cpp) that trace_size is set based on an input argument of `-t $(trace_size)` which is defined and passed in the [Makefile](../../../programming_examples/basic/vector_scalar_mul/Makefile). The `trace` target from the [Makefile](../../../programming_examples/basic/vector_scalar_mul/Makefile) is shown below. +You can see in [test.cpp](.test.cpp) that trace_size is set based on an input argument of `-t $(trace_size)` which is defined and passed in the [Makefile](.Makefile). The `trace` target from the [Makefile](./Makefile) is shown below. ```Makefile -trace: ${targetname}_${data_size}.exe build/final_trace_${data_size}.xclbin build/insts_${data_size}.txt - ${powershell} ./$< -x build/final_trace_${data_size}.xclbin -i build/insts_${data_size}.txt -k MLIR_AIE -t ${trace_size} - ../../utils/parse_eventIR.py --filename trace.txt --mlir build/aie_trace__${data_size}.mlir --colshift 1 > parse_eventIR_vs.json +trace: ${targetname}.exe build/final.xclbin build/insts.txt + ${powershell} ./$< -x build/final.xclbin -i build/insts.txt -k MLIR_AIE -t 8192 + ../../../programming_examples/utils/parse_trace.py --filename trace.txt --mlir build/aie.mlir --colshift 1 > trace_4b.json ``` -Following the invocation of the executable, we call the `parse_eventIR.py` python script which we will cover in more detail in step 3. -Within the Vector Scalar Multiply example [test.cpp](../../../programming_examples/basic/vector_scalar_mul/test.cpp), we redefine OUT_SIZE to be the sum of output buffer size (in bytes) and the trace buffer size. +Following the invocation of the executable, we call the `parse_trace.py` python script which we will cover in more detail in step 3. +Within the [test.cpp](./test.cpp), we redefine OUT_SIZE to be the sum of output buffer size (in bytes) and the trace buffer size. ```c++ - int OUT_SIZE = OUT_VOLUME * sizeof(DATATYPE) + trace_size; + int OUT_SIZE = INOUT2_SIZE + trace_size; ``` -All subsuquent references to the output buffer size should use `OUT_SIZE`. The exception is when we want to verify the output results which should be bounded by the original output buffer size, in this case `IN_VOLUME`. +All subsuquent references to the output buffer size should use `OUT_SIZE`. The exception is when we want to verify the output results which should be bounded by the original output buffer size, in this case `INOUT2_VOLUME`. Finally, the function to write the trace output to a file as defined in `aie.utils.trace` is `write_out_trace` and we need to pass it the pointer in the output buffer where the trace data begins, the trace buffer size and the trace file name (default is `trace.txt`). ```c++ - test_utils::write_out_trace(((char *)bufOut) + IN_SIZE, trace_size, - vm["trace_file"].as()); + test_utils::write_out_trace( + ((char *)bufInOut2) + INOUT2_SIZE, + trace_size, vm["trace_file"].as()); ``` ### (2b) Python Host code ([test.py](./test.py)) -In the [Makefile](../../../programming_examples/basic/vector_scalar_mul/Makefile), we also have a `trace_py` target which calls the python host code `test.py`. Here in addition to the `-t ${trace_size}`, we also define the `-s ${data_size}` which is the data size (in uint32) for our Vector Scalar Multiply kernel. +In the [Makefile](./Makefile), we also have a `trace_py` target which calls the python host code `test.py`. Here in addition to the `-t ${trace_size}`, we also define the `-s ${data_size}` which is the data size (in uint32) for our Vector Scalar Multiply kernel. ```Makefile trace_py: build/final_trace_${data_size}.xclbin build/insts_${data_size}.txt ${powershell} python3 test.py -x build/final_trace_${data_size}.xclbin -i build/insts_${data_size}.txt -k MLIR_AIE -t ${trace_size} -s ${data_size} @@ -177,10 +178,9 @@ Finally, we read `trace buffer` from the entire_buffer starting a the offset of ``` ## 3. Parse text file to generate a waveform json file -Once the packet trace text file is generated (`trace.txt`), we use a python-based trace parser ([parse_eventIR.py](../../../programming_examples/utils/parse_eventIR.py)) to interpret the trace values and generate a waveform json file for visualization (with Perfetto). +Once the packet trace text file is generated (`trace.txt`), we use a python-based trace parser ([parse_trace.py](../../../programming_examples/utils/parse_trace.py)) to interpret the trace values and generate a waveform json file for visualization (with Perfetto). ```Makefile - ../../utils/parse_eventIR.py --filename trace.txt --mlir build/aie_trace__${data_size}.mlir --colshift 1 > parse_eventIR_vs.json -json + ../../../programming_examples/utils/parse_trace.py --filename trace.txt --mlir build/aie_trace.mlir --colshift 1 > trace_vs.json ``` This leverages the python parse scripts under [programming_examples/utils](../../../programming_examples/utils/). Follow [this link](../../../programming_examples/utils/) to get more details about how to use the python parse scripts and how they are coded. @@ -194,7 +194,14 @@ Open https://ui.perfetto.dev in your browser and then open up the waveform json * Check matching packet IDs for packet-routed flows. The packet flow ID must match the configured ID value in Trace Control 1 register or else the packets don't get routed. ## Exercises -1. Ask questions about routing congestion for circuit switch and packet switch routes? +1. Let's give tracing a try. In this directory, we're been examining a design based off the `Vector Scalar Add` example. Run `make trace` to compile the design and generate a trace file and run the `prase_trace.py` script on it to generate the `trace_4b.json` waveform file. Open this in http://ui.perfetto.dev. if you zoom into the region of interest with the W and S to zoom in and out respectively and A adn D to pan left and right. You should seem a wave like the following: + + + + Based on this wave, You can mouse over each chunk of continguous data for `PortRunning0` (input dma port) and `PortRunning1` (output dma port). What is the chunk size? How many input and output chunks are there? This shoudl match iteration loop bounds in our exmple design. + +1. **TODO** Additional questions about routing congestion for circuit switch and packet switch routes for trace packets? + ----- [[Prev]](../section-4a) [[Up]](../../section-4) [[Next]](../section-4c) diff --git a/programming_guide/section-4/section-4b/aie2.py b/programming_guide/section-4/section-4b/aie2.py index 15e58e0343..9bd2c08c88 100644 --- a/programming_guide/section-4/section-4b/aie2.py +++ b/programming_guide/section-4/section-4b/aie2.py @@ -75,14 +75,9 @@ def sequence(inTensor, notUsed, outTensor): trace_utils.configure_simple_tracing_aie2( ComputeTile, ShimTile, - channel=1, - bd_id=13, ddr_id=2, size=trace_size, offset=C_sz_in_bytes, - start=0x1, - stop=0x0, - events=[0x4B, 0x22, 0x21, 0x25, 0x2D, 0x2C, 0x1A, 0x4F], ) ipu_dma_memcpy_nd( @@ -97,4 +92,8 @@ def sequence(inTensor, notUsed, outTensor): # Declares that subsequent code is in mlir-aie context with mlir_mod_ctx() as ctx: my_first_aie_program() # Call design function within the mlir-aie context - print(ctx.module) # Print the python-to-mlir conversion + res = ctx.module.operation.verify() # Verify mlir context + if(res == True): + print(ctx.module) # Print the python-to-mlir conversion + else: + print(res) diff --git a/programming_guide/section-4/section-4b/test.cpp b/programming_guide/section-4/section-4b/test.cpp index 004b243134..ee01cc00cf 100644 --- a/programming_guide/section-4/section-4b/test.cpp +++ b/programming_guide/section-4/section-4b/test.cpp @@ -217,7 +217,6 @@ int main(int argc, const char *argv[]) { if (trace_size > 0) { test_utils::write_out_trace( ((char *)bufInOut2) + INOUT2_SIZE, - // test_utils::write_out_trace(((char *)bufTrace), trace_size, vm["trace_file"].as()); } diff --git a/programming_guide/section-4/section-4b/test.py b/programming_guide/section-4/section-4b/test.py index b6c0d99c02..a36dc5d5a7 100644 --- a/programming_guide/section-4/section-4b/test.py +++ b/programming_guide/section-4/section-4b/test.py @@ -10,6 +10,7 @@ import time import aie.utils.test as test_utils +import aie.utils.trace as trace_utils # ------------------------------------------------------ # Configure this to match your design's buffer size @@ -35,12 +36,12 @@ def main(opts): instr_text = [l for l in instr_text if l != ""] instr_v = np.array([int(i, 16) for i in instr_text], dtype=np.uint32) - OUT_SIZE = INOUT2_SIZE + opts.trace_size + OUT_SIZE = INOUT2_SIZE + int(opts.trace_size) # ------------------------------------------------------ # Get device, load the xclbin & kernel and register them # ------------------------------------------------------ - (device, kernel) = init_xrt_load_kernel(opts) + (device, kernel) = test_utils.init_xrt_load_kernel(opts) # ------------------------------------------------------ # Initialize input/ output buffer sizes and sync them @@ -95,23 +96,20 @@ def main(opts): continue # Copy output results and verify they are correct - out_size = INOUT2_SIZE + opts.trace_size - print("out_size:", out_size) - output_buffer = bo_inout2.read(out_size, 0).view(INOUT2_DATATYPE) - dout_buffer = output_buffer[0 : INOUT2_VOLUME - 1] - trace_buffer = output_buffer[INOUT2_VOLUME - 1 :] + entire_buffer = bo_inout2.read(OUT_SIZE, 0).view(np.uint32) + output_buffer = entire_buffer[:INOUT2_VOLUME] if opts.verify: if opts.verbosity >= 1: print("Verifying results ...") ref = np.arange(2, INOUT0_VOLUME + 2, dtype=INOUT0_DATATYPE) - # e = np.equal(output_buffer, ref) - e = np.equal(dput_buffer, ref) + e = np.equal(output_buffer, ref) + # e = np.equal(dput_buffer, ref) errors = errors + np.size(e) - np.count_nonzero(e) # Write trace values if trace_size > 0 - # if opts.trace_size > 0: - # print("Do something with trace!") - # test_utils.write_out_trace(trace_buffer, opts.trace_size, opts.trace_file) + if opts.trace_size > 0: + trace_buffer = entire_buffer[INOUT2_VOLUME:] + trace_utils.write_out_trace(trace_buffer, str(opts.trace_file)) npu_time = stop - start npu_time_total = npu_time_total + npu_time diff --git a/programming_guide/section-4/section-4c/README.md b/programming_guide/section-4/section-4c/README.md index 79a96a564b..6d863fe7bb 100644 --- a/programming_guide/section-4/section-4c/README.md +++ b/programming_guide/section-4/section-4c/README.md @@ -8,16 +8,18 @@ // //===----------------------------------------------------------------------===//--> -# Section 4c - Kernel Vectorization +# Section 4c - Kernel Vectorization and Optimization * [Section 4 - Vector Programming & Peformance Measurement](../../section-4) * [Section 4a - Timers](../section-4a) * [Section 4b - Trace](../section-4b) - * Section 4c - Kernel Vectorization + * Section 4c - Kernel Vectorization and Optimization ----- -Now that we are able to measure the total application time ([section-4a](../section-4a/)) and have examined the kernel performance via tracing ([section-4b](../section-4b)), we will take a closer look at kernel vectorization. We will be using the [vector-scalar multiply example](../../../programming_examples/basic/vector_scalar_mul/) again to illustrate kernel vectorization concepts. Go ahead and read the design example summary for [vector-scalar multiply](../../../programming_examples/basic/vector_scalar_mul/) first to get an idea of the different components of this example design. Then, let's take a closer look at the kernel source file ([scale.cc](../../../aie_kernels/aie2/scale.cc)). +Now that we are able to measure the total application time ([section-4a](../section-4a/)) and have examined the kernel performance via tracing ([section-4b](../section-4b)), we will take a closer look at kernel vectorization. We will be using the [vector-scalar multiply example](../../../programming_examples/basic/vector_scalar_mul/) to illustrate kernel vectorization concepts. + +Go ahead and read the design example summary for [vector-scalar multiply](../../../programming_examples/basic/vector_scalar_mul/) first to get an idea of the different components of this example design. Then, let's take a closer look at the kernel source file ([scale.cc](../../../aie_kernels/aie2/scale.cc)). In [scale.cc](../../../aie_kernels/aie2/scale.cc), we see that the scalar code is relatively straight forward: ```C++ @@ -33,6 +35,7 @@ void scale_scalar(T *a, T *c, T factor, const int32_t N) { Here, the code iterates over the input vector (`a`) and multiplies each element from the vector with a scalar value (`factor`) before storing the results in output vector (`c`). The simple C/C++ code for this consists of a for-loop, with a simple read and scalar multiply operation inside the loop. +### AIE API To vectorize this, we first need to familiarize ourselves with the AIE API which abstracts the underlying AIE processor and associated low-level intrinsics with an higher level C++ API. Documentation for AIE API (2023.2 Vitis tools) can be found [here](https://www.xilinx.com/htmldocs/xilinx2023_2/aiengine_api/aie_api/doc/modules.html). To view details on the vector x scalar mutlipler, on the left pane, navigate to *AI Engine API User Guide -> API Reference -> Arithmetic* and select the first `aie::mul` which shows a `Vec * E` where `E` is an elementary data type like a scalar int. To be able to use this AIE API function in our kernel code, we first need to include the AIE API headers. @@ -40,6 +43,7 @@ To be able to use this AIE API function in our kernel code, we first need to inc #include ``` +#### Vector Registers Then, we declare a vector as follows: ```C++ aie::vector my_vector @@ -47,7 +51,7 @@ aie::vector my_vector * T - data type, such as `int32_t` * vec_factor - vector size, such as 16. -The size of the vector depends on the type. For example, the standard vector register in AIE2 is 512 bits. For `int32_t`, that means we can store 16 of them. Extending this to the other supported data types, we have the following abbreviated table: +The size of the vector depends on the type. For example, the standard vector register in AIE2 is **512 bits**. For `int32_t`, that means we can store 16 of them in 1x 512b vector register. Extending this to the other supported data types, we have the following abbreviated table: | Data type | Vector size | |-----------|-------------| @@ -58,77 +62,193 @@ The size of the vector depends on the type. For example, the standard vector reg A more complete table of supported vectors can be found in the AIE API User Guide [here](https://www.xilinx.com/htmldocs/xilinx2023_2/aiengine_api/aie_api/doc/group__group__basic__types.html). Note that if the listed data types * vector size ends up being larger than 512-bits, that just means it's stored in 2+ vector registers instead of just one. +#### Vector Load + We can load the vector register from local L1 memory with the `aie::load_v` function, defined as follows: ```C++ T *__restrict pA1 = a; aie::vector A0 = aie::load_v(pA1); ``` -Here, `__restict` is used to qualify the pointer to indicate that it's a restrict pointer and therefore memory access to that pointer can be more optimally arranged by the scheduler. This is because restrict says that sequential access to the pointer will not access the same memory location and can therefore be treated as independent. +Here, we use `__restict` to qualify the pointer to indicate that it's a restrict pointer which says that the pointer is the only thing that accesses the underlying object. It eliminates the potential for pointer aliasing, enabling better optimization by the compiler. +#### Vector Multiply The vector load has a template argument `vec_factor` to match the one used in the `aie::vector` declaration. +At this point, it would be good to take a closer look the AIE Archtecture as being able to optim + Finally, we get to the `aie::mul` call which takes a vector and a scalar as arguments and stores the result in an accumulator register desginated by: ```C++ - aie::accum cout + aie::accum cout ``` -The accumulator data type in this case is 16x 64-bit accumulator. We store the computed results back to local memory using the vector store function `aie::store_v` as shown: +The accumulator data type in this case is 32x 32-bit accumulator. We store the computed results back to local memory using the vector store function `aie::store_v` as shown: ```C++ T *__restrict pC1 = c; - aie::store_v(pC1, cout.to_vector(0)): + aie::store_v(pC1, cout.template to_vector(0)): ``` -Here, the accumulator type can be shift-round-saturated back to a vector register with the `.to_vector(0)` call where `T` is the vector register type and the single integer argument `(0)` is the shift amount. +Here, the accumulator type can be shift-round-saturated back to a vector register with the `.template to_vector(0)` call where `T` is the vector register type and the single integer argument `(0)` is the shift amount. The entire vector block is then: ```C++ template -void scale_vectorized(T *a, T *c, T factor, const int32_t N) { - constexpr int vec_factor = 16; +void scale_vectorized(T *a, T *c, int32_t factor, const int32_t N) { event0(); + constexpr int vec_factor = 32; T *__restrict pA1 = a; T *__restrict pC1 = c; const int F = N / vec_factor; + T fac = factor; for (int i = 0; i < F; i++) - chess_prepare_for_pipelining chess_loop_range(16, ) { + chess_prepare_for_pipelining chess_loop_range(16, ) + { aie::vector A0 = aie::load_v(pA1); pA1 += vec_factor; - aie::accum cout = aie::mul(A0, factor); - aie::store_v(pC1, cout.to_vector(0)); + aie::accum cout = aie::mul(A0, fac); + aie::store_v(pC1, cout.template to_vector(0)); pC1 += vec_factor; - } + } event1(); } ``` In this first example, the vectorization strategy was relatively straight forward. Instead of iterating over a vector of values and doing a single scalar multiply, we load a vector of input values, iterate over a smaller loop to perfrom a vector*scalar operation using the AIE API functions, and then store the vector of results back to local memory. -## Exercises -1. Let's take a look at the trace for our vector scalar design. First, let's edit our [vector_scalar_mul design](../../../programming_examples/basic/vector_scalar_mul/) so that the [aie2.py](../../../programming_examples/basic/vector_scalar_mul/aie2.py) source file has `vectorized=False`. In the soruce code, we simply select the scalar version of the kernel function. Then run `make trace`. After the trace compilation is complete, open `parse_eventIR_vs.json` in https://ui.perfetto.dev and measure the delta between `event 0` and `event 1`. Note that in the Perfetto waveform, 1 ms is equal to 1 clock cycle. How many cycles did you measure? +## Vectorization Exercises +1. Let's take a look at the trace for our vector scalar design. First, let's edit our [vector_scalar_mul design](../../../programming_examples/basic/vector_scalar_mul/) so that the [aie2.py](../../../programming_examples/basic/vector_scalar_mul/aie2.py) source file has `vectorized=False`. In the [aie2.py](../../../programming_examples/basic/vector_scalar_mul/aie2.py) sourcee code, we simply select the scalar version of the kernel function. Then run `make trace`. After the trace compilation is complete, open `trace_vs.json` in https://ui.perfetto.dev and measure the delta between `event 0` and `event 1`. Note that in the Perfetto waveform, 1 us is equal to 1 clock cycle. How many cycles did you measure? + +1. Now let's turn vectorization back on by changing `vectorized=True`. But we're also going to disable an pragma guided optimization first to see its effect. In the [scale.cc](../../../aie_kernels/aie2/scale.cc), comment out the line after the `for loop` that says `chess_prepare_for_pipelining chess_loop_range(16, )`. Be sure you're editing the general template and not the `int32_t` template specialization. We'll examine that shortly. The rerun the compilation (`make clean; make trace`). Measure the delta between `event 0` and `event 1` again. What value do you see now? + + That's quite an improvemnt, ~20X reduction in compute latency. However, there's more optimization that can be had with vetor code and that involves compilation pragmas. + +1. Go back to [scale.cc](../../../aie_kernels/aie2/scale.cc) and uncomment the line with `chess_prepare_for_pipelining chess_loop_range(16, )`. The rerun the compilation (`make clean; make trace`). Measure the delta between `event 0` and `event 1` again. What value do you see now? + + Now, we're really seeing some savings (another factor ~6X savings or ~140X compare to the scalar version) The line we added help guide the compiler to find optimal schedules. In particular for kernel loops, `chess_prepare_for_pipelining` and `chess_loop_range(16, )` are particularly useful. + * `chess_prepare_for_pipelining` - Used in the innermost loop to tell the compiler to enable software pipelining. This is necessary for subsequent loop optimization pragmas to be useful + * `chess_loop_range(MIN, MAX)` - An extremely helpful pragma. This tells the compiler how many minimum or maximum iterations we expect this loop to have. We often paramterize loop bounds based on size and even if the upper bound is declared as a const, it's still a runtime computed value. Giving the MIN value is particular helpful because it guides the scheduler to know how many iterations we have and can therefore properly schedule the loop instructions. + +## Optimization - Coding for the Architecture + +At this point, We've vectorized our code to better leverage the AIE hardware and saw signficant performance gains, but is our design fully optimized? How do we know if we've used the powerful AIE hardware to its full potential? This requires a deeper understanding of the underlying AIE architecture and coding for performance with the hardware in mind. For this next section, we will focus on **AIE2** (aka AIE-ML) that's at the heart of the Ryzen AI NPU. AIE2 is optimized for ML workloads which means matrix mulitplication style compute would leverage the hardware the best. We will also start our exploration by continuing with the vector-scalar multiply example. While it is true that vector-scalar multiply isn't matrix multiply, it does provides a good starting point in understanding what design considerations are needed to code optimal designs. + +### The Vector Unit - Loads + +The first step in optimizing our code even further is to have a picture of the AIE Vector Unit which can be found in the [AIE-ML architecture manual (am020)](https://docs.amd.com/r/en-US/am020-versal-aie-ml/Fixed-Point-Vector-Unit). Below is a diagram of the vector unit from the manual. + + + +As we can see, vector registers are loaded from 2 parallel Load Units, each capable of loading 256 bits per clock cycle from local L1 memory. We have 12 512-bit vector registers which feed into each Permute block and eventually, the Multiplier block. It is important then to always think in terms of 2 256-bit parallel loads per clock cycle. If, for example, you try to load 2048-bits of data per clock in order to do your compute, you will be less efficient as that would require more than 1 cycle. Another important note is that the loads must come from different L1 memory banks or else a bank conflict will occur. The bank conflict penalty is small but would reduce opitimal performance. + +### The Vector Unit - Multiply and Add (MAC) + +Once data is loaded and permuted, it passes to the Mutliplier block which supports a wide list of AIE data types. The multiply results then pass through an optional post-add step (very common for matrix multiply) before eventualy being stored in the accumulator registers. There are 9x 512-bit accumulator registers. Accumulator registers are larger so data precision can be maintained. A well optimized piece of code woudl schedule 1 vector MAC (VMAC) every cycle. + +### The Vector Unit - SRS and Stores + +Once data has been computed (either in 1 cycle or accumulated over a number of cycles), the results can be then be written back out to local L1 memory via the Store Unit. This mirrors the 2 Load Units except there is a just 1 Store Unit. Bridging between the accumulator registers and vector registers or local L1 memory utilizes the SRS Unit (shift-round-saturate) which shifts, rounds and saturates with a number of configurable rounding and saturation modes. + + + +The SRS path is on the right of the diagram above with the corollary path, the Upshift (UPS) path on the left. + +### The Vector Unit - Shift/ Shuffle/ Adder Path + +Finally, we have an additional parallel processing path which performs shift, shuffle, simple addition, comparison and a host of other functions. This path runs in parallel with the main integer vector datapath and may be tasked to do the aforementioned functions without the need of the VMAC datapath if a VMAC is not needed in our code. + + + +It is very helpful to have in mind this processing datapath and the way in which data is loaded and stored to/from local memory. The next step then is to see how close we are to the ideal performance in our application and then examine the results in more detail to better understand where we might be able to improve. + + +### Multiplier Utilization Efficiency + +Now that we have a better understanding of the architecture, let's take a closer look at hardware efficiency.The following diagram shows the various AIE architecture blocks we talked about along with a table of generalized compte. + + + +**NOTE** - Matrix multiplication mode table is in the AIE API User Guide [here](https://www.xilinx.com/htmldocs/xilinx2023_2/aiengine_api/aie_api/doc/group__group__mmul.html). Another way to see the total number of MACs for different bit precisions is the `Table: Supported Precision Width of the Vector Data Path` in the [AM020 spec](https://docs.amd.com/r/en-US/am020-versal-aie-ml/Functional-Overview). + +This table tells us that for 16-bit x 16-bit compute, we have 64 MACs avaialable per cycle. However, these MACs are targetign Matrix Multiplication (with its accompanying post-addition steps). In practice, we have 32 accumulator lanes available. That means for eltwise operations, we can only use 32 MACs per cycle. + +#### MAC efficiency +Using this information and our Vector Scalar Multiply example, we know that each call to the kernel passses in an array of 1024 16-bit data. With 32 MACs available, our `vector_factor` is 32 and therefore, we would ideally need 1024 / 32 = 32 cycles to process this amount of data given our 32 MACs per clock eltwise vector MAC cofiguratoin. Our final optimized cycle count for the kernel was 72 cycles or roughly 2x the ideal number of cycles. + +Total MAC efficiency is a product of the (MAC schedule efficiency) x (per clock MAC utilization efficiency). +* MAC schedule efficiency - Ideal MAC cycles / Actual MAC cycles (e.g. 32/ 72 = 44%) +* per clock MAC utilization efficiency - # of MACs used/ total # of MACs avaialable (e.g. 32/ 64 = 50%) +Therefore, the total MAC efficiency is 44% x 50% = 22%.. + +Let's file that result away but look at our algorithm from load/ store bandwidth perspective. + +#### Load/ Store Bandwidth efficiency + +To process a vector of 32 int16 values times a scalar, let's ignor the scalar load and focus only on the vector one. 32 int16 = 512-bits which would take 2x 256-bit loads or 2 cycles per MAC. It might be possible to do it in a single cycle if the data is striped across banks perfectly. We also need to store 2x 256-bits which must take 2 cycles since we only have 1 Store Unit. This means that even if we could do a VMAC every cycle, we need 2 cycles to load the inputs an store the outputs. This explains why our optimized vector results was 72, since based on this 2 cycle requirement, our minimum cycles for our data size is 64 cycles. The remaining 6 cycles is loop preamble, loop postamble and function initailzation and cleanup overhead. + +#### Data routing efficiency +So we saw why load/sore bandwidth is the bottleneck in our 16-bit Vector Scalar Multiply example for the compute. But what about data movement via streams and DMAs. We need to process 1024 chunks of 16-bit data or 512 32-bit quantities. Because our stream switch move data in 32-bit granuliarity, we need 512 cycles in order to load in the data to L1 and to move the data out of L1 to L2/L3. + +#### Hardware efficiency summary + +| Component | # of Cycles | Efficiency | +|-----------|-------------|------------| +| MAC | 72 | 22% | +| Load/Store| 64 | 50% / 100% | +| DMA | 512 | 100% | + +Looking at this table, we quickly see that the data movement is the bottleneck. + +## Optimization Exercises - Part 1 +1. Rerun the final optimized code and take a look at the resulting waveform. + + + + Mouse over the blocks of PortRuning0 and PortRunning1, what is the measured number of cycles per chunk? This matches what we expected to see. But note how it's obvious from the waveform how dominant data movement is as compared to compute. + + +**TODO** - Looking at int32 version? matmul? + + +## Diving Deep - Examining the Microcode +Let's take a look again at the results of our [vector_scalar_mul design](../../../programming_examples/basic/vector_scalar_mul/). Let's also take go back one step comment out `chess_prepare_for_pipelining chess_loop_range(16, )` and rerun the compilation (`make clean; make trace`). + +At this point, we can actually take a look at the `microcode`. The `microcode` is the precise schedule of instructions that our AIE executes in order to run the kernel program. This microcode can usually be found under `build/core_0_2.elf.lst` where the two numbers for the core indicates its column and row position respectively. So if your design has multiple cores, then each core will have its own .lst file. If you were to open the file, you will see a lot of information. Comment lines will have a . in front of it. The other lines are the instructions and are structured as follows: -1. Now let's turn vectorization back on by changing `vectorized=True` and rerun our build (`make clean; make trace`). Measure the delta between `event 0` and `event 1` again. What value do you see now? +Instruction Line Number ---- Encoded Instruction ---- 1 or more slots of ISA commands -## Multiplier Efficiency +| Example ISA commands | Description | +|----------------------|-------------| +| NOP .. | No op | +| JL #XXX | Jump and link to instruction line # | +| MOV r1, r2 | Move register values from r2 to r1 | +| LD .. | Scalra load | +| ST .. | Scalar store | +| VLDA | Vector load unit A, | +| VLDB | Vector load unit B, | +| VMUL .. | Vector mulitply | +| VMAC .. | Vector mutliple and accumulate | +| VST .. | Vector store | +| VSRS .. | Vector SRS | +| VSHUFFLE .. | Vector shuffle | -Let's take a closer look at hardware efficiency. In particular, we examine how often we are maximally utilizing all the multipliers in our fixed-point vector datapath. The AI Engine fixed-point vector datapath operates at 100% efficiency when we can schedule a vector MAC every clock cycle. The MAC itself operates at 100% efficiency if all the MAC units are being used. The overall MAC utilization efficiency then is a product of these two percentages. For example, if we have 1x vector MAC every 2 cycles, and we use 50% of our vector MACs each cycle, then 50% * 50% is a total mac efficiency of 25%. +Fully analzying and understanding this microcode is beyond the scope of this programming guide but we We will focus on key parts of this microcode, labled by 3 types of comments in particular, -The AIE fixed-point vector datapath is optimized for matrix multiplication, and as a result, has a post-addition block with a smaller number of output lanes. What this means is that element-wise MACs generally run less efficiently since the hardware does not have enough output lanes for all MACs. So for 16-bit x 16-bit, we can do 64x MACs but with 32 output lanes, element-wise multiply for 16-bit x 16-bit has a MAC utilization efficiency of 50%. +`.label vector_scalar_mul_aie` followed by `.function_start` - The start of the function we're interested in. The name after label is the function name but this might have additional characters if the function is generated from a template. -If we examine the matrix multiplication mode table in the AIE API User Guide [here](https://www.xilinx.com/htmldocs/xilinx2023_2/aiengine_api/aie_api/doc/group__group__mmul.html), we see that for 16-bit x 16-bit matmul in AIE2 (aka AIE-ML), we support 4x4x4 mode which does 64 MACs each cycle. Another way to see the total number of MACs for different bit precisions is the `Table: Supported Precision Width of the Vector Data Path` in the [AM020 spec](https://docs.amd.com/r/en-US/am020-versal-aie-ml/Functional-Overview). There, we again see 64 MACs for 16-bit x 16-bit. For 32-bit x 32-bit, we have 16 MACs per cycle. So element-wise multiply for 32-bit x 32-bit does in fact have a per cycle MAC utilization efficiency of 100% which is not the case for element-wie multiplies of smaller bit precisions. +`.label ZLS_...` - The start of a zero-overhead loop -Going back to our vector-scalar design, we are processing 4096 samples totak, but only 1024 samples every iteration of our kernel. From the previous exercises, you saw that the scalar implementation takes about ~10,000 cycles to process while the vector implementaion only takes ~600 cycles. This is an speedup factor of over **16X**! That's a signficant gain but we'd like to look more closely to see if we can squeeze out even more performance. +`.label ZLE_...` - The end of a zero-overhead loop. **NOTE** The line after this label is the last line within the loop, not just the lines strictly between `ZLS` and `ZLE`. In general, labels pertain the line after the label. -### Crunching the numbers -Looking at the optimal MAC utilziation for 32-bit x 32-bit, we expect 1024 cycles to actually only take 64 cycles (1024/ 16) if it were possible to do a vector MAC every cycle. This seemingly gives our vector implementation a total MAC utilization efficiency of ~11%. In a non-ideal kernel, we have cycle overheads in the way of loop preamble and postamble as well as general function overhead. It is also true that these overheads become a smaller percentage of the total compute time if we are process a larger set of data. But this static overhead does not fully explain the unexpectedly small MAC utilization efficiency we see at first glance. +Let's examine this more closely in our example. -### Data movement +## Optimization Exercises - Part 2 +1. Open `build/core_0_2.elf.lst` and take a look through the file. You'll see a lot of helpful comments but it may be a bit too much comments to be able to see patterns in the microcode clearly. Run a simple cleanup script from the vector_scalar_mul example directory -The other consideration when looking at vectorization and performance is data movement. The time to compute must be balanced with the time to move data so that neither becomes the bottleneck. Looking at our example once again, we are moving data via objectFifos through the stream switch. Each stream switch channel moves 32-bits of data every clock cycle. This means to move 1024 32-bit data, it would require 1024 cycles. This makes it seem like our kernel throughput should be 1024 cycles. + `../../utils/clean_microcode.sh build/core_0_2.elf.lst` -But in our example, we are actually ping-ponging our data movement so that we are moving the next set of 1024 words while the first set is being computed on. So we would expect the kernel to be able to compute the data in a fraction of the data movement time (though we are still limited to 1024 cycles throughput). The real reason our compute is larger than 64 cycles is because both sets of data in our objectFifo are in the same local memory bank and thus access conflicts are occuring, which increases our total compute time. Also, the actual inner loop microcode schedule from the compiler is closer to 80% efficient instead of 100%. All these factors then add up to a total compute cycle count that's larger than our back-of-the-envelope ideal number. + This will remove some of the extra comments. Open up the `core_0_2.elf.lst` file again and search for `.label vector_scalar_mul_aie`. Then scroll down until you see the first `.label ZLS ..` line. Count the number of lines until you reach the first `.label ZLE ..` line and add 1 to that total (since the line after ZLE is within the loop). How many lines are in this inner loop? -## Conclusions +1. Now look at each line (including the one after ZLE) and count how many lines contain a `VMUL` or `VMAC` in it? What number do you get? -Having walked through this example, we can see the importance of matching the algorithm to the hardware in order to achieve maximum utilization efficiency. This generally means matmul style ops gives us the best MAC efficiency, not only because it matches the built-in vector matmul in the fixed-point vector datapath, but also because matmul has higher data re-use which lowers the data movement component so that data movement time and compute time are more closely aligned. +1. The number you got gives us a rough idea of how optimized the innermost loop of our algorithm is. In this case, we have 1 VMAC out of 15 cycles or ~6% MAC utilization. If the inner loop take 15 cycles and we iterate 32 times, how many cycles should this version take and how close are we to the measured cycle count? ----- diff --git a/python/utils/README.md b/python/utils/README.md index 7ca2e20088..7771cc2c84 100644 --- a/python/utils/README.md +++ b/python/utils/README.md @@ -16,10 +16,10 @@ import aie.utils.trace as trace_utils ``` Thereafter, functions defined in the file can be called via `trace_utils.configure_simple_tracing_aie2(...)`. -- [Test utilities](#Test-utilities) ([test.py](./test.py)) -- [Trace utilities](#Trace-utilities-(trace.py)) ([trace.py](./trace.py)) -- [XRT utilities](#XRT-utilities) ([xrt.py](./xrt.py)) -- [Machine Learning (ML) utilities](#Machine-Langauge-(ML)-utilities-(ml.py)) ([ml.py](./ml.py)) +- [Test utilities](#test-utilites-testpy) ([test.py](./test.py)) +- [Trace utilities](#trace-utilites-tracepy) ([trace.py](./trace.py)) +- [XRT utilities](#xrt-utilites-xrtpy) ([xrt.py](./xrt.py)) +- [Machine Learning (ML) utilities](#machine-language-ml-utilites-mlpyss) ([ml.py](./ml.py)) ## Test utilites ([test.py](./test.py)) Test/ Host code utilities. @@ -147,6 +147,7 @@ There is an extensive lists of trace events but here, we will only describe a fe | Lock stall |0x1A| 26 | | Core Port Running 1 |0x4F| 79 | | Core Port Running 0 |0x4B| 75 | +* A more exhaustive list of events for core tile, core memory, memtile and shim tile can be found in [this header file](https://github.com/Xilinx/aie-rt/blob/main-aie/driver/src/events/xaie_events_aie.h). However, not all events are yet supported in `parse_eventIR.py` at this time. **NOTE**: The "Core Instruction - Event 0/1" are special intrinsics you can add to your kernel code to trigger an event during the running of your core program. Within the kernel code, they look like: ```c++