@@ -408,4 +408,75 @@ TEST_F(
408
408
memoryThread.join ();
409
409
}
410
410
}
411
+
412
+ TEST_F (MEMORY_TEST,
413
+ GivenWorkloadWhenQueryingMemoryBandwidthCountersThenCountersIncrease) {
414
+ for (auto device : devices) {
415
+ uint32_t count = 0 ;
416
+ auto mem_handles = lzt::get_mem_handles (device, count);
417
+
418
+ if (count == 0 ) {
419
+ LOG_WARNING << " No memory handles found on this device!" ;
420
+ continue ;
421
+ }
422
+
423
+ ze_device_properties_t deviceProperties = {
424
+ ZE_STRUCTURE_TYPE_DEVICE_PROPERTIES, nullptr };
425
+ #ifdef USE_ZESINIT
426
+ auto sysman_device_properties = lzt::get_sysman_device_properties (device);
427
+ ze_device_handle_t core_device =
428
+ lzt::get_core_device_by_uuid (sysman_device_properties.core .uuid .id );
429
+ EXPECT_NE (core_device, nullptr );
430
+ device = core_device;
431
+ #endif // USE_ZESINIT
432
+ EXPECT_EQ (ZE_RESULT_SUCCESS,
433
+ zeDeviceGetProperties (device, &deviceProperties));
434
+ std::cout << " test device name " << deviceProperties.name << " uuid "
435
+ << lzt::to_string (deviceProperties.uuid );
436
+
437
+ // Allocate device memory for workload
438
+ const size_t buffer_size = 32 * 1024 * 1024 ;
439
+ ze_device_mem_alloc_desc_t device_desc = {};
440
+ device_desc.stype = ZE_STRUCTURE_TYPE_DEVICE_MEM_ALLOC_DESC;
441
+ device_desc.ordinal = 0 ;
442
+ device_desc.flags = 0 ;
443
+
444
+ void *src_ptr = lzt::allocate_device_memory (buffer_size, 1 , 0 , device,
445
+ lzt::get_default_context ());
446
+ void *dst_ptr = lzt::allocate_device_memory (buffer_size, 1 , 0 , device,
447
+ lzt::get_default_context ());
448
+
449
+ ASSERT_NE (src_ptr, nullptr );
450
+ ASSERT_NE (dst_ptr, nullptr );
451
+
452
+ for (auto mem_handle : mem_handles) {
453
+ ASSERT_NE (nullptr , mem_handle);
454
+
455
+ // Get initial bandwidth counters
456
+ zes_mem_bandwidth_t bandwidth_before = {};
457
+ EXPECT_EQ (ZE_RESULT_SUCCESS,
458
+ zesMemoryGetBandwidth (mem_handle, &bandwidth_before));
459
+
460
+ // Run the workload
461
+ ze_result_t result = copy_workload (device, &device_desc, src_ptr, dst_ptr,
462
+ static_cast <int32_t >(buffer_size));
463
+ EXPECT_EQ (result, ZE_RESULT_SUCCESS);
464
+
465
+ // Get bandwidth counters after workload
466
+ zes_mem_bandwidth_t bandwidth_after = {};
467
+ EXPECT_EQ (ZE_RESULT_SUCCESS,
468
+ zesMemoryGetBandwidth (mem_handle, &bandwidth_after));
469
+
470
+ // Validate that read/write counters have increased
471
+ EXPECT_GE (bandwidth_after.readCounter , bandwidth_before.readCounter )
472
+ << " Read counter did not increase after workload" ;
473
+ EXPECT_GE (bandwidth_after.writeCounter , bandwidth_before.writeCounter )
474
+ << " Write counter did not increase after workload" ;
475
+ }
476
+
477
+ // Free device memory
478
+ lzt::free_memory (src_ptr);
479
+ lzt::free_memory (dst_ptr);
480
+ }
481
+ }
411
482
} // namespace
0 commit comments