Skip to content

Commit 56222ed

Browse files
Json288jamesong
andauthored
Temporal Sharing Overhead test ELF flow (mobilenet) (#8866)
* Enable elf flow for temporal sharing overhead (mobilenet) test Signed-off-by: jamesong <[email protected]> * Fixed wrong elf name query Signed-off-by: jamesong <[email protected]> * code clean up Signed-off-by: jamesong <[email protected]> * Remove bo_instr and all related codes from TestCase and BO_set in TestValidateUtilities Signed-off-by: jamesong <[email protected]> * Remove mobilenet dpu sequence related queries in query_requests.h Signed-off-by: jamesong <[email protected]> * Added a to-do comment and error message for no available elf file according to comments Signed-off-by: jamesong <[email protected]> --------- Signed-off-by: jamesong <[email protected]> Co-authored-by: jamesong <[email protected]>
1 parent 9b114f1 commit 56222ed

File tree

4 files changed

+37
-65
lines changed

4 files changed

+37
-65
lines changed

src/runtime_src/core/common/query_requests.h

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -601,9 +601,9 @@ struct xclbin_name : request
601601
enum class type {
602602
validate,
603603
gemm,
604-
mobilenet,
605604
validate_elf,
606605
gemm_elf,
606+
mobilenet_elf,
607607
preemption_4x4,
608608
preemption_4x8
609609
};
@@ -624,8 +624,8 @@ struct xclbin_name : request
624624
return "preemption_4x4";
625625
case type::preemption_4x8:
626626
return "preemption_4x8";
627-
case type::mobilenet:
628-
return "mobilenet";
627+
case type::mobilenet_elf:
628+
return "mobilenet_elf";
629629
}
630630
return "unknown";
631631
}
@@ -651,8 +651,7 @@ struct sequence_name : request
651651
tct_one_column,
652652
tct_all_column,
653653
gemm_int8,
654-
aie_reconfig_overhead,
655-
mobilenet
654+
aie_reconfig_overhead
656655
};
657656

658657
static std::string
@@ -669,8 +668,6 @@ struct sequence_name : request
669668
return "gemm_int8";
670669
case type::aie_reconfig_overhead:
671670
return "aie_reconfig_overhead";
672-
case type::mobilenet:
673-
return "mobilenet";
674671
}
675672
return "unknown";
676673
}
@@ -701,7 +698,8 @@ struct elf_name : request
701698
preemption_noop_4x4,
702699
preemption_noop_4x8,
703700
preemption_memtile_4x4,
704-
preemption_memtile_4x8
701+
preemption_memtile_4x8,
702+
mobilenet
705703
};
706704

707705
static std::string
@@ -728,6 +726,8 @@ struct elf_name : request
728726
return "preemption_memtile_4x4";
729727
case type::preemption_memtile_4x8:
730728
return "preemption_memtile_4x8";
729+
case type::mobilenet:
730+
return "mobilenet";
731731
}
732732
return "unknown";
733733
}

src/runtime_src/core/tools/common/tests/TestTemporalSharingOvd.cpp

Lines changed: 7 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,7 @@ boost::property_tree::ptree TestTemporalSharingOvd::run(std::shared_ptr<xrt_core
2626
ptree.erase("xclbin");
2727

2828
// Query the xclbin name from the device
29-
const auto xclbin_name = xrt_core::device_query<xrt_core::query::xclbin_name>(dev, xrt_core::query::xclbin_name::type::mobilenet);
30-
29+
const auto xclbin_name = xrt_core::device_query<xrt_core::query::xclbin_name>(dev, xrt_core::query::xclbin_name::type::mobilenet_elf);
3130
// Find the platform file path for the xclbin
3231
auto xclbin_path = XBValidateUtils::findPlatformFile(xclbin_name, ptree);
3332

@@ -49,26 +48,7 @@ boost::property_tree::ptree TestTemporalSharingOvd::run(std::shared_ptr<xrt_core
4948
}
5049

5150
// Determine The DPU Kernel Name
52-
auto xkernels = xclbin.get_kernels();
53-
54-
// Find the first kernel whose name starts with "DPU"
55-
auto itr = std::find_if(xkernels.begin(), xkernels.end(), [](xrt::xclbin::kernel& k) {
56-
auto name = k.get_name();
57-
return name.rfind("DPU",0) == 0; // Starts with "DPU"
58-
});
59-
60-
xrt::xclbin::kernel xkernel;
61-
if (itr != xkernels.end())
62-
xkernel = *itr;
63-
else {
64-
// Log an error if no kernel with "DPU" is found and set the status to failed
65-
XBValidateUtils::logger(ptree, "Error", "No kernel with `DPU` found in the xclbin");
66-
ptree.put("status", XBValidateUtils::test_token_failed);
67-
return ptree;
68-
}
69-
70-
// Get the name of the found kernel
71-
auto kernelName = xkernel.get_name();
51+
auto kernelName = XBValidateUtils::get_kernel_name(xclbin, ptree);
7252

7353
// Create a working device from the provided device
7454
auto working_dev = xrt::device(dev);
@@ -85,14 +65,12 @@ boost::property_tree::ptree TestTemporalSharingOvd::run(std::shared_ptr<xrt_core
8565
}
8666
};
8767

88-
const auto seq_name = xrt_core::device_query<xrt_core::query::sequence_name>(dev, xrt_core::query::sequence_name::type::mobilenet);
89-
auto dpu_instr = XBValidateUtils::findPlatformFile(seq_name, ptree);
68+
const auto elf_name = xrt_core::device_query<xrt_core::query::elf_name>(dev, xrt_core::query::elf_name::type::mobilenet);
69+
auto elf_path = XBValidateUtils::findPlatformFile(elf_name, ptree);
9070

91-
if (!std::filesystem::exists(dpu_instr))
92-
{
93-
XBValidateUtils::logger(ptree, "Error", "Dpu instruction file not found");
71+
if (!std::filesystem::exists(elf_path)) {
72+
XBValidateUtils::logger(ptree, "Error", "ELF file not found");
9473
ptree.put("status", XBValidateUtils::test_token_failed);
95-
return ptree;
9674
}
9775

9876
const auto ifm_name = xrt_core::device_query<xrt_core::query::mobilenet>(dev, xrt_core::query::mobilenet::type::mobilenet_ifm);
@@ -123,7 +101,7 @@ boost::property_tree::ptree TestTemporalSharingOvd::run(std::shared_ptr<xrt_core
123101
std::vector<TestCase> testcases;
124102

125103
// Create two test cases and add them to the vector
126-
TestParams params(xclbin, working_dev, kernelName, dpu_instr, ifm_file, param_file, buffer_sizes_file, 1, num_kernel_iterations);
104+
TestParams params(xclbin, working_dev, kernelName, elf_path, ifm_file, param_file, buffer_sizes_file, 1, num_kernel_iterations);
127105
testcases.emplace_back(params);
128106
testcases.emplace_back(params);
129107

src/runtime_src/core/tools/common/tests/TestValidateUtilities.cpp

Lines changed: 18 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
#include "core/common/module_loader.h"
1414
#include "tools/common/XBUtilities.h"
1515
#include "tools/common/XBUtilitiesCore.h"
16+
#include "xrt/experimental/xrt_ext.h"
1617

1718
#include "TestValidateUtilities.h"
1819
namespace xq = xrt_core::query;
@@ -23,27 +24,22 @@ namespace xq = xrt_core::query;
2324
// - device: Reference to the xrt::device object
2425
// - kernel: Reference to the xrt::kernel object
2526
BO_set::BO_set(const xrt::device& device,
26-
const xrt::kernel& kernel,
2727
const BufferSizes& buffer_sizes,
28-
const std::string& dpu_instr,
2928
const std::string& ifm_file,
3029
const std::string& param_file)
3130
: buffer_sizes(buffer_sizes),
32-
bo_ifm (device, buffer_sizes.ifm_size, XRT_BO_FLAGS_HOST_ONLY, kernel.group_id(1)),
33-
bo_param (device, buffer_sizes.param_size, XRT_BO_FLAGS_HOST_ONLY, kernel.group_id(2)),
34-
bo_ofm (device, buffer_sizes.ofm_size, XRT_BO_FLAGS_HOST_ONLY, kernel.group_id(3)),
35-
bo_inter (device, buffer_sizes.inter_size, XRT_BO_FLAGS_HOST_ONLY, kernel.group_id(4)),
36-
bo_instr (device, buffer_sizes.instr_size, XCL_BO_FLAGS_CACHEABLE, kernel.group_id(5)),
37-
bo_mc (device, buffer_sizes.mc_size, XRT_BO_FLAGS_HOST_ONLY, kernel.group_id(7))
31+
bo_ifm (xrt::ext::bo{device, buffer_sizes.ifm_size}),
32+
bo_param (xrt::ext::bo{device, buffer_sizes.param_size}),
33+
bo_ofm (xrt::ext::bo{device, buffer_sizes.ofm_size}),
34+
bo_inter (xrt::ext::bo{device, buffer_sizes.inter_size}),
35+
bo_mc (xrt::ext::bo{device, buffer_sizes.mc_size})
3836
{
3937
XBValidateUtils::init_buf_bin((int*)bo_ifm.map<int*>(), buffer_sizes.ifm_size, ifm_file);
4038
XBValidateUtils::init_buf_bin((int*)bo_param.map<int*>(), buffer_sizes.param_size, param_file);
41-
XBValidateUtils::init_buf_bin((int*)bo_instr.map<int*>(), buffer_sizes.instr_size, dpu_instr);
4239
}
4340

4441
// Method to synchronize buffer objects to the device
4542
void BO_set::sync_bos_to_device() {
46-
bo_instr.sync(XCL_BO_SYNC_BO_TO_DEVICE);
4743
bo_ifm.sync(XCL_BO_SYNC_BO_TO_DEVICE);
4844
bo_param.sync(XCL_BO_SYNC_BO_TO_DEVICE);
4945
bo_mc.sync(XCL_BO_SYNC_BO_TO_DEVICE);
@@ -53,14 +49,15 @@ void BO_set::sync_bos_to_device() {
5349
// Parameters:
5450
// - run: Reference to the xrt::run object
5551
void BO_set::set_kernel_args(xrt::run& run) const {
56-
uint64_t opcode = 1;
52+
// to-do: replace with XBU::get_opcode() when dpu sequence flow is taken out
53+
uint64_t opcode = 3;
5754
run.set_arg(0, opcode);
58-
run.set_arg(1, bo_ifm);
59-
run.set_arg(2, bo_param);
60-
run.set_arg(3, bo_ofm);
61-
run.set_arg(4, bo_inter);
62-
run.set_arg(5, bo_instr);
63-
run.set_arg(6, bo_instr.size()/sizeof(int));
55+
run.set_arg(1, 0);
56+
run.set_arg(2, 0);
57+
run.set_arg(3, bo_ifm);
58+
run.set_arg(4, bo_param);
59+
run.set_arg(5, bo_ofm);
60+
run.set_arg(6, bo_inter);
6461
run.set_arg(7, bo_mc);
6562
}
6663

@@ -71,9 +68,11 @@ TestCase::initialize()
7168
// Initialize kernels, buffer objects, and runs
7269
for (int j = 0; j < params.queue_len; j++) {
7370
xrt::kernel kernel;
74-
kernel = xrt::kernel(hw_ctx, params.kernel_name);
71+
xrt::elf elf = xrt::elf(params.elf_file);
72+
xrt::module mod{elf};
73+
kernel = xrt::ext::kernel{hw_ctx, mod, params.kernel_name};
7574
BufferSizes buffer_sizes = XBValidateUtils::read_buffer_sizes(params.buffer_sizes_file);
76-
auto bos = BO_set(params.device, kernel, buffer_sizes, params.dpu_file, params.ifm_file, params.param_file);
75+
auto bos = BO_set(params.device, buffer_sizes, params.ifm_file, params.param_file);
7776
bos.sync_bos_to_device();
7877
auto run = xrt::run(kernel);
7978
bos.set_kernel_args(run);
@@ -118,10 +117,6 @@ read_buffer_sizes(const std::string& json_file) {
118117
buffer_sizes.inter_size = root.get<size_t>("buffer_sizes.inter_size");
119118
buffer_sizes.mc_size = root.get<size_t>("buffer_sizes.mc_size");
120119
buffer_sizes.ofm_size = root.get<size_t>("buffer_sizes.ofm_size");
121-
buffer_sizes.instr_word_size = root.get<size_t>("buffer_sizes.instr_word_size");
122-
123-
// Calculate derived value
124-
buffer_sizes.instr_size = buffer_sizes.instr_word_size * sizeof(int);
125120

126121
return buffer_sizes;
127122
}

src/runtime_src/core/tools/common/tests/TestValidateUtilities.h

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ class TestParams {
3030
xrt::xclbin xclbin; // Xclbin object
3131
xrt::device device;
3232
std::string kernel_name;
33-
std::string dpu_file;
33+
std::string elf_file;
3434
std::string ifm_file;
3535
std::string param_file;
3636
std::string buffer_sizes_file;
@@ -40,7 +40,7 @@ class TestParams {
4040
TestParams(xrt::xclbin xclbin,
4141
xrt::device device,
4242
std::string kernel_name,
43-
std::string dpu_file,
43+
std::string elf_file,
4444
std::string ifm_file,
4545
std::string param_file,
4646
std::string buffer_sizes_file,
@@ -50,7 +50,7 @@ class TestParams {
5050
: xclbin(std::move(xclbin)),
5151
device(std::move(device)),
5252
kernel_name(std::move(kernel_name)),
53-
dpu_file(std::move(dpu_file)),
53+
elf_file(std::move(elf_file)),
5454
ifm_file(std::move(ifm_file)),
5555
param_file(std::move(param_file)),
5656
buffer_sizes_file(std::move(buffer_sizes_file)),
@@ -66,12 +66,11 @@ class BO_set {
6666
xrt::bo bo_param; // Buffer object for parameters
6767
xrt::bo bo_ofm; // Buffer object for output feature map
6868
xrt::bo bo_inter; // Buffer object for intermediate data
69-
xrt::bo bo_instr; // Buffer object for instructions
7069
xrt::bo bo_mc; // Buffer object for memory controller
7170

7271
public:
7372
// Constructor to initialize buffer objects
74-
BO_set(const xrt::device&, const xrt::kernel&, const BufferSizes&, const std::string&, const std::string&, const std::string&);
73+
BO_set(const xrt::device&, const BufferSizes&, const std::string&, const std::string&);
7574

7675
// Method to set kernel arguments
7776
void set_kernel_args(xrt::run&) const;

0 commit comments

Comments
 (0)