@@ -408,4 +408,76 @@ TEST_F(
408408    memoryThread.join ();
409409  }
410410}
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+     if  (deviceProperties.flags  & ZE_DEVICE_PROPERTY_FLAG_SUBDEVICE) {
435+       std::cout << " test subdevice id "   << deviceProperties.subdeviceId ;
436+     } else  {
437+       std::cout << " test device is a root device"   << std::endl;
438+     }
439+ 
440+     //  Allocate device memory for workload
441+     const  size_t  buffer_size = 32  * 1024  * 1024 ;
442+     ze_device_mem_alloc_desc_t  device_desc = {};
443+     device_desc.stype  = ZE_STRUCTURE_TYPE_DEVICE_MEM_ALLOC_DESC;
444+     device_desc.ordinal  = 0 ;
445+     device_desc.flags  = 0 ;
446+ 
447+     void  *src_ptr = lzt::allocate_device_memory (buffer_size, 1 , 0 , device,
448+                                                 lzt::get_default_context ());
449+     void  *dst_ptr = lzt::allocate_device_memory (buffer_size, 1 , 0 , device,
450+                                                 lzt::get_default_context ());
451+ 
452+     ASSERT_NE (src_ptr, nullptr );
453+     ASSERT_NE (dst_ptr, nullptr );
454+ 
455+     for  (auto  mem_handle : mem_handles) {
456+       ASSERT_NE (nullptr , mem_handle);
457+ 
458+       //  Get initial bandwidth counters
459+       auto  bandwidth_before = lzt::get_mem_bandwidth (mem_handle);
460+ 
461+       //  Run the workload
462+       ze_result_t  result = copy_workload (device, &device_desc, src_ptr, dst_ptr,
463+                                          static_cast <int32_t >(buffer_size));
464+       EXPECT_EQ (result, ZE_RESULT_SUCCESS);
465+ 
466+       //  Get bandwidth counters after workload
467+       auto  bandwidth_after = lzt::get_mem_bandwidth (mem_handle);
468+ 
469+       //  Validate that read/write counters have increased after workload
470+       EXPECT_GE (bandwidth_after.readCounter , bandwidth_before.readCounter )
471+           << " Read counter did not increase after workload"  ;
472+       EXPECT_GE (bandwidth_after.writeCounter , bandwidth_before.writeCounter )
473+           << " Write counter did not increase after workload"  ;
474+       EXPECT_GE (bandwidth_after.maxBandwidth , bandwidth_before.maxBandwidth )
475+           << " Max bandwidth did not increase after workload"  ;
476+     }
477+ 
478+     //  Free device memory
479+     lzt::free_memory (src_ptr);
480+     lzt::free_memory (dst_ptr);
481+   }
482+ }
411483} //  namespace
0 commit comments