Skip to content

Commit 3ec130b

Browse files
authored
[CI][Benchmark] Add compute USM allocation benchmarks (#17968)
This PR introduces USM memory allocation benchmark scenarios to compute benchmark suite. Retargeting #17623 to the sycl branch.
1 parent 7a5d387 commit 3ec130b

File tree

1 file changed

+107
-0
lines changed

1 file changed

+107
-0
lines changed

devops/scripts/benchmarks/benches/compute.py

Lines changed: 107 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -187,6 +187,15 @@ def benchmarks(self) -> list[Benchmark]:
187187
MemcpyExecute(self, 400, 1, 102400, 10, 1, 1, 1),
188188
MemcpyExecute(self, 400, 1, 102400, 10, 0, 1, 1),
189189
MemcpyExecute(self, 4096, 4, 1024, 10, 0, 1, 0),
190+
UsmMemoryAllocation(self, RUNTIMES.UR, "Device", 256, "Both"),
191+
UsmMemoryAllocation(self, RUNTIMES.UR, "Device", 256 * 1024, "Both"),
192+
UsmBatchMemoryAllocation(self, RUNTIMES.UR, "Device", 128, 256, "Both"),
193+
UsmBatchMemoryAllocation(
194+
self, RUNTIMES.UR, "Device", 128, 16 * 1024, "Both"
195+
),
196+
UsmBatchMemoryAllocation(
197+
self, RUNTIMES.UR, "Device", 128, 128 * 1024, "Both"
198+
),
190199
]
191200

192201
return benches
@@ -716,3 +725,101 @@ def bin_args(self) -> list[str]:
716725
f"--ioq={self.ioq}",
717726
f"--ctrBasedEvents={self.ctrBasedEvents}",
718727
]
728+
729+
730+
class UsmMemoryAllocation(ComputeBenchmark):
731+
def __init__(
732+
self, bench, runtime: RUNTIMES, usm_memory_placement, size, measure_mode
733+
):
734+
self.runtime = runtime
735+
self.usm_memory_placement = usm_memory_placement
736+
self.size = size
737+
self.measure_mode = measure_mode
738+
super().__init__(
739+
bench, f"api_overhead_benchmark_{runtime.value}", "UsmMemoryAllocation"
740+
)
741+
742+
def get_tags(self):
743+
return [runtime_to_tag_name(self.runtime), "micro", "latency", "memory"]
744+
745+
def name(self):
746+
return (
747+
f"api_overhead_benchmark_{self.runtime.value} UsmMemoryAllocation "
748+
f"usmMemoryPlacement:{self.usm_memory_placement} size:{self.size} measureMode:{self.measure_mode}"
749+
)
750+
751+
def explicit_group(self):
752+
return f"UsmMemoryAllocation"
753+
754+
def description(self) -> str:
755+
what_is_measured = "Both memory allocation and memory free are timed"
756+
if self.measure_mode == "Allocate":
757+
what_is_measured = "Only memory allocation is timed"
758+
elif self.measure_mode == "Free":
759+
what_is_measured = "Only memory free is timed"
760+
return (
761+
f"Measures memory allocation overhead by allocating {self.size} bytes of "
762+
f"usm {self.usm_memory_placement} memory and free'ing it immediately. "
763+
f"{what_is_measured}. "
764+
)
765+
766+
def bin_args(self) -> list[str]:
767+
return [
768+
f"--type={self.usm_memory_placement}",
769+
f"--size={self.size}",
770+
f"--measureMode={self.measure_mode}",
771+
"--iterations=10000",
772+
]
773+
774+
775+
class UsmBatchMemoryAllocation(ComputeBenchmark):
776+
def __init__(
777+
self,
778+
bench,
779+
runtime: RUNTIMES,
780+
usm_memory_placement,
781+
allocation_count,
782+
size,
783+
measure_mode,
784+
):
785+
self.runtime = runtime
786+
self.usm_memory_placement = usm_memory_placement
787+
self.allocation_count = allocation_count
788+
self.size = size
789+
self.measure_mode = measure_mode
790+
super().__init__(
791+
bench, f"api_overhead_benchmark_{runtime.value}", "UsmBatchMemoryAllocation"
792+
)
793+
794+
def get_tags(self):
795+
return [runtime_to_tag_name(self.runtime), "micro", "latency", "memory"]
796+
797+
def name(self):
798+
return (
799+
f"api_overhead_benchmark_{self.runtime.value} UsmBatchMemoryAllocation "
800+
f"usmMemoryPlacement:{self.usm_memory_placement} allocationCount:{self.allocation_count} size:{self.size} measureMode:{self.measure_mode}"
801+
)
802+
803+
def explicit_group(self):
804+
return f"UsmBatchMemoryAllocation"
805+
806+
def description(self) -> str:
807+
what_is_measured = "Both memory allocation and memory free are timed"
808+
if self.measure_mode == "Allocate":
809+
what_is_measured = "Only memory allocation is timed"
810+
elif self.measure_mode == "Free":
811+
what_is_measured = "Only memory free is timed"
812+
return (
813+
f"Measures memory allocation overhead by allocating {self.size} bytes of "
814+
f"usm {self.usm_memory_placement} memory {self.allocation_count} times, then free'ing it all at once. "
815+
f"{what_is_measured}. "
816+
)
817+
818+
def bin_args(self) -> list[str]:
819+
return [
820+
f"--type={self.usm_memory_placement}",
821+
f"--allocationCount={self.allocation_count}",
822+
f"--size={self.size}",
823+
f"--measureMode={self.measure_mode}",
824+
"--iterations=1000",
825+
]

0 commit comments

Comments
 (0)