Skip to content

Commit 7c23f52

Browse files
rework test
Signed-off-by: Tikhomirova, Kseniya <[email protected]>
1 parent b307cbb commit 7c23f52

File tree

2 files changed

+34
-7
lines changed

2 files changed

+34
-7
lines changed

sycl/source/detail/program_manager/program_manager.hpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,9 @@ extern "C" __SYCL_EXPORT void __sycl_unregister_lib(sycl_device_binaries desc);
4646

4747
// +++ }
4848

49+
// For testing purposes
50+
class ProgramManagerTest;
51+
4952
namespace sycl {
5053
inline namespace _V1 {
5154
class context;
@@ -438,6 +441,8 @@ class ProgramManager {
438441
using MaterializedEntries =
439442
std::map<std::vector<unsigned char>, ur_kernel_handle_t>;
440443
std::unordered_map<std::string, MaterializedEntries> m_MaterializedKernels;
444+
445+
friend class ::ProgramManagerTest;
441446
};
442447
} // namespace detail
443448
} // namespace _V1

sycl/unittests/program_manager/arg_mask/EliminatedArgMask.cpp

Lines changed: 29 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,16 @@
66
//
77
//===----------------------------------------------------------------------===//
88

9+
#include <detail/config.hpp>
910
#include <detail/handler_impl.hpp>
1011
#include <detail/kernel_bundle_impl.hpp>
12+
#include <detail/program_manager/program_manager.hpp>
1113
#include <detail/queue_impl.hpp>
1214
#include <detail/scheduler/commands.hpp>
1315
#include <sycl/sycl.hpp>
1416

1517
#include <helpers/MockKernelInfo.hpp>
18+
#include <helpers/ScopedEnvVar.hpp>
1619
#include <helpers/UrImage.hpp>
1720
#include <helpers/UrMock.hpp>
1821

@@ -208,7 +211,6 @@ TEST(EliminatedArgMask, KernelBundleWith2Kernels) {
208211

209212
std::vector<std::unique_ptr<mock::dummy_handle_t_>> UsedProgramHandles;
210213
std::vector<std::unique_ptr<mock::dummy_handle_t_>> ProgramHandlesToReuse;
211-
212214
inline ur_result_t setFixedProgramPtr(void *pParams) {
213215
auto params = *static_cast<ur_program_create_with_il_params_t *>(pParams);
214216
if (ProgramHandlesToReuse.size())
@@ -218,18 +220,23 @@ inline ur_result_t setFixedProgramPtr(void *pParams) {
218220
ProgramHandlesToReuse.erase(ProgramHandlesToReuse.begin(), it);
219221
}
220222
else
221-
UsedProgramHandles.push_back(std::make_unique<mock::dummy_handle_t_>(mock::createDummyHandle<ur_program_handle_t>(sizeof(unsigned))));
222-
**params.pphProgram = *reinterpret_cast<ur_program_handle_t*>(UsedProgramHandles.back().get());
223-
std::cout << "**params.pphProgram = " << **params.pphProgram << std::endl;
223+
UsedProgramHandles.push_back(
224+
std::make_unique<mock::dummy_handle_t_>(sizeof(unsigned)));
225+
**params.pphProgram =
226+
reinterpret_cast<ur_program_handle_t>(UsedProgramHandles.back().get());
224227
return UR_RESULT_SUCCESS;
225228
}
226229
inline ur_result_t releaseFixedProgramPtr(void *pParams) {
227-
ur_program_handle_t& params = *static_cast<ur_program_handle_t *>(pParams);
230+
auto params = *static_cast<ur_program_release_params_t *>(pParams);
228231
{
229-
auto it = std::find_if(UsedProgramHandles.begin(), UsedProgramHandles.end(), [&params](const std::unique_ptr<mock::dummy_handle_t_>& item){ return *reinterpret_cast<ur_program_handle_t*>(item.get()) == params; });
232+
auto it = std::find_if(
233+
UsedProgramHandles.begin(), UsedProgramHandles.end(),
234+
[&params](const std::unique_ptr<mock::dummy_handle_t_> &item) {
235+
return reinterpret_cast<ur_program_handle_t>(item.get()) ==
236+
*params.phProgram;
237+
});
230238
if (it == UsedProgramHandles.end())
231239
return UR_RESULT_SUCCESS;
232-
std::cout << "releaseFixedProgramPtr = " << params << std::endl;
233240
std::move(it, it + 1, std::back_inserter(ProgramHandlesToReuse));
234241
UsedProgramHandles.erase(it, it +1);
235242
}
@@ -241,6 +248,15 @@ inline ur_result_t customProgramRetain(void *pParams) {
241248
return UR_RESULT_SUCCESS;
242249
}
243250

251+
class ProgramManagerTest {
252+
public:
253+
static std::unordered_multimap<ur_program_handle_t,
254+
const sycl::detail::RTDeviceBinaryImage *> &
255+
getNativePrograms() {
256+
return sycl::detail::ProgramManager::getInstance().NativePrograms;
257+
}
258+
};
259+
244260
// It's possible for the same handle to be reused for multiple distinct programs
245261
// This can happen if a program is released (freeing underlying memory) and then
246262
// a new program happens to get given that same memory for its handle.
@@ -250,6 +266,7 @@ inline ur_result_t customProgramRetain(void *pParams) {
250266
TEST(EliminatedArgMask, ReuseOfHandleValues) {
251267
sycl::detail::ProgramManager &PM =
252268
sycl::detail::ProgramManager::getInstance();
269+
auto &NativePrograms = ProgramManagerTest::getNativePrograms();
253270

254271
ur_program_handle_t ProgBefore = nullptr;
255272
ur_program_handle_t ProgAfter = nullptr;
@@ -273,8 +290,11 @@ TEST(EliminatedArgMask, ReuseOfHandleValues) {
273290
EXPECT_NE(Mask, nullptr);
274291
EXPECT_EQ(Mask->at(0), 1);
275292
EXPECT_EQ(UsedProgramHandles.size(), 1u);
293+
EXPECT_EQ(NativePrograms.count(ProgBefore), 1u);
276294
}
277295

296+
EXPECT_EQ(UsedProgramHandles.size(), 0u);
297+
278298
{
279299
auto Name = sycl::detail::KernelInfo<EAMTestKernel3>::getName();
280300
sycl::unittest::UrMock<> Mock;
@@ -294,6 +314,8 @@ TEST(EliminatedArgMask, ReuseOfHandleValues) {
294314
auto Mask = PM.getEliminatedKernelArgMask(ProgAfter, Name);
295315
EXPECT_NE(Mask, nullptr);
296316
EXPECT_EQ(Mask->at(0), 0);
317+
EXPECT_EQ(UsedProgramHandles.size(), 1u);
318+
EXPECT_EQ(NativePrograms.count(ProgBefore), 1u);
297319
}
298320

299321
// Verify that the test is behaving correctly and that the pointer is being

0 commit comments

Comments
 (0)