Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 12 additions & 4 deletions example/gemm/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ function(add_aie_gemm_xclbin m k n NUM_COLUMNS B_COL_MAJ C_COL_MAJ TRACE_SIZE AR
add_aie_design(${XCLBIN_NAME}
XCLBIN_ONLY
PYTHON gemm.py
PYTHON_FLAGS --dev ${DEVICE} -M ${DUMMY_M} -K ${DUMMY_K} -N ${DUMMY_N} -m ${m} -k ${k} -n ${n} --n-aie-cols ${NUM_COLUMNS} --b-col-maj ${B_COL_MAJ} --c-col-maj ${C_COL_MAJ} --dtype_in ${INPUT_DATA_TYPE_PYTHON} --dtype_out ${OUTPUT_DATA_TYPE_PYTHON} --trace_size ${TRACE_SIZE} ${EMULATE_STR} --prio-accuracy --output-file-path ${CMAKE_BINARY_DIR}/aie/${XCLBIN_NAME}.mlir
PYTHON_FLAGS --dev ${DEVICE} -M ${DUMMY_M} -K ${DUMMY_K} -N ${DUMMY_N} -m ${m} -k ${k} -n ${n} --n-aie-cols ${NUM_COLUMNS} --b-col-maj ${B_COL_MAJ} --c-col-maj ${C_COL_MAJ} --dtype_in ${INPUT_DATA_TYPE_PYTHON} --dtype_out ${OUTPUT_DATA_TYPE_PYTHON} --trace_size ${TRACE_SIZE} ${EMULATE_STR} ${PRIO_ACC_STR} --output-file-path ${CMAKE_BINARY_DIR}/aie/${XCLBIN_NAME}.mlir
AIE_CORE_KERNELS ${ARCHIVE_NAME}
EXTRA_AIECC_FLAGS --dynamic-objFifos
OUTPUT_XCLBIN GEMM_XCLBIN_${XCLBIN_NAME})
Expand All @@ -43,7 +43,7 @@ function(add_aie_gemm_design M K N m k n NUM_COLUMNS B_COL_MAJ C_COL_MAJ TRACE_S
add_aie_design(${EXAMPLE}
INSTS_ONLY
PYTHON gemm.py
PYTHON_FLAGS --dev ${DEVICE} -M ${M} -K ${K} -N ${N} -m ${m} -k ${k} -n ${n} --n-aie-cols ${NUM_COLUMNS} --b-col-maj ${B_COL_MAJ} --c-col-maj ${C_COL_MAJ} --dtype_in ${INPUT_DATA_TYPE_PYTHON} --dtype_out ${OUTPUT_DATA_TYPE_PYTHON} --trace_size ${TRACE_SIZE} ${EMULATE_STR} --prio-accuracy --output-file-path ${CMAKE_BINARY_DIR}/aie/${EXAMPLE}.mlir
PYTHON_FLAGS --dev ${DEVICE} -M ${M} -K ${K} -N ${N} -m ${m} -k ${k} -n ${n} --n-aie-cols ${NUM_COLUMNS} --b-col-maj ${B_COL_MAJ} --c-col-maj ${C_COL_MAJ} --dtype_in ${INPUT_DATA_TYPE_PYTHON} --dtype_out ${OUTPUT_DATA_TYPE_PYTHON} --trace_size ${TRACE_SIZE} ${EMULATE_STR} ${PRIO_ACC_STR} --output-file-path ${CMAKE_BINARY_DIR}/aie/${EXAMPLE}.mlir
EXTRA_AIECC_FLAGS --dynamic-objFifos
OUTPUT_INSTS GEMM_INSTS)

Expand All @@ -69,7 +69,8 @@ function(add_aie_gemm_design M K N m k n NUM_COLUMNS B_COL_MAJ C_COL_MAJ TRACE_S
"PASS!"
METRICS
"Latency" [=[Latency \(us\): (?P<metric>\d+)]=]
"Bandwidth" [=[Effective Bandwidth: (?P<metric>[\d\.e\+-]+) GB/s]=])
"Bandwidth" [=[Effective Bandwidth: (?P<metric>[\d\.e\+-]+) GB/s]=]
"GFLOP/s" [=[Throughput:\s*(?P<metric>[\d\.e\+-]+) GFLOP/s]=])
endfunction()

set(M_LIST "2048")
Expand All @@ -86,15 +87,22 @@ set(ARCHIVE_NAME "gemm_${m}x${k}x${n}_archive.a")
set(AIE_BUILD_DIR ${CMAKE_BINARY_DIR}/aie)
set(ARCHIVE_PATH "${AIE_BUILD_DIR}/${ARCHIVE_NAME}")

set(PRIO_ACCURACY True)
set(EMULATE_BFLOAT16_MMUL_WITH_BFP16 False)
set (B_COL_MAJ 0)
set (C_COL_MAJ 0)

set(MM_KERNEL_DEFINES "DIM_M=${m}" "DIM_K=${k}" "DIM_N=${n}" "bf16_f32_ONLY" "ROUND_CONV_EVEN")
set(MM_KERNEL_DEFINES "DIM_M=${m}" "DIM_K=${k}" "DIM_N=${n}" "ROUND_CONV_EVEN")
if (EMULATE_BFLOAT16_MMUL_WITH_BFP16)
set(EMULATE_STR --emulate-bf16-mmul-with-bfp16)
list(APPEND MM_KERNEL_DEFINES "AIE_API_EMULATE_BFLOAT16_MMUL_WITH_BFP16")
endif()
if (PRIO_ACCURACY)
set(PRIO_ACC_STR --prio-accuracy)
list(APPEND MM_KERNEL_DEFINES "bf16_f32_ONLY")
else()
list(APPEND MM_KERNEL_DEFINES "bf16_bf16_ONLY")
endif()
if (B_COL_MAJ)
list(APPEND MM_KERNEL_DEFINES "B_COL_MAJ")
endif()
Expand Down
5 changes: 5 additions & 0 deletions example/gemm/gemm.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -160,6 +160,11 @@ int main(int argc, const char *argv[])
double bandwidth_GBps = (total_bytes / (1024 * 1024 * 1024)) / (npu_time * 1e-6);
std::cout << "Effective Bandwidth: " << bandwidth_GBps << " GB/s" << std::endl;

// Need to cast to long long since M/K/N=2048 would give 17*10^9 ops for example
unsigned long long n_ops = static_cast<unsigned long long>(M) * K * N * 2;
float throughput = n_ops / npu_time / 1e3; // GOP/s
std::cout << "Throughput: " << throughput << " GFLOP/s" << std::endl;

std::bfloat16_t *bufOut1 = bo_out.map<std::bfloat16_t *>();

// Compare with golden reference
Expand Down
Loading
Loading