[PATCH i-g-t] tests/intel/xe_compute_preempt: Add compute-preempt-many
Nirmoy Das
nirmoy.das at intel.com
Fri Feb 23 19:39:19 UTC 2024
Add compute-preempt-many which should exercise multiple
mid-thread preemption at a time for multiple contexts.
Cc: Janga Rahul Kumar <janga.rahul.kumar at intel.com>
Signed-off-by: Nirmoy Das <nirmoy.das at intel.com>
---
lib/intel_compute.c | 24 +++++++++++++++---------
lib/intel_compute.h | 4 +++-
tests/intel/xe_compute_preempt.c | 27 ++++++++++++++++++++++++---
3 files changed, 42 insertions(+), 13 deletions(-)
diff --git a/lib/intel_compute.c b/lib/intel_compute.c
index c5d253ebc..8853b5cd3 100644
--- a/lib/intel_compute.c
+++ b/lib/intel_compute.c
@@ -1686,7 +1686,8 @@ static const struct {
};
static bool __run_intel_compute_kernel_preempt(int fd,
- struct drm_xe_engine_class_instance *eci)
+ struct drm_xe_engine_class_instance *eci,
+ unsigned int count)
{
unsigned int ip_ver = intel_graphics_ver(intel_get_drm_devid(fd));
unsigned int batch;
@@ -1719,12 +1720,16 @@ static bool __run_intel_compute_kernel_preempt(int fd,
if (!kernels->kernel || !kernels->sip_kernel || !kernels->long_kernel)
return 0;
- intel_compute_preempt_batches[batch].compute_exec(fd, kernels->long_kernel,
- kernels->long_kernel_size,
- kernels->kernel, kernels->size,
- kernels->sip_kernel,
- kernels->sip_kernel_size,
- eci);
+ igt_fork(child, count) {
+ intel_compute_preempt_batches[batch].compute_exec(fd, kernels->long_kernel,
+ kernels->long_kernel_size,
+ kernels->kernel, kernels->size,
+ kernels->sip_kernel,
+ kernels->sip_kernel_size,
+ eci);
+ }
+
+ igt_waitchildren();
return true;
}
@@ -1737,7 +1742,8 @@ static bool __run_intel_compute_kernel_preempt(int fd,
* Returns true on success, false otherwise.
*/
bool run_intel_compute_kernel_preempt(int fd,
- struct drm_xe_engine_class_instance *eci)
+ struct drm_xe_engine_class_instance *eci,
+ unsigned int count)
{
- return __run_intel_compute_kernel_preempt(fd, eci);
+ return __run_intel_compute_kernel_preempt(fd, eci, count);
}
diff --git a/lib/intel_compute.h b/lib/intel_compute.h
index fe9637b91..430bae562 100644
--- a/lib/intel_compute.h
+++ b/lib/intel_compute.h
@@ -37,5 +37,7 @@ extern const struct intel_compute_kernels intel_compute_square_kernels[];
bool run_intel_compute_kernel(int fd);
bool xe_run_intel_compute_kernel_on_engine(int fd, struct drm_xe_engine_class_instance *eci);
-bool run_intel_compute_kernel_preempt(int fd, struct drm_xe_engine_class_instance *eci);
+bool run_intel_compute_kernel_preempt(int fd,
+ struct drm_xe_engine_class_instance *eci,
+ unsigned int count);
#endif /* INTEL_COMPUTE_H */
diff --git a/tests/intel/xe_compute_preempt.c b/tests/intel/xe_compute_preempt.c
index a4e0e1454..fd245b655 100644
--- a/tests/intel/xe_compute_preempt.c
+++ b/tests/intel/xe_compute_preempt.c
@@ -22,11 +22,18 @@
* Description:
* Exercise compute walker mid thread preemption scenario
* Functionality: compute openCL kernel
+ *
+ * SUBTEST: compute-preempt-many
+ * GPU requirement: LNL
+ * Description:
+ * Exercise parallel compute walker mid thread preemption scenario
+ * Functionality: compute openCL kernel
*/
static void
-test_compute_preempt(int fd, struct drm_xe_engine_class_instance *hwe)
+test_compute_preempt(int fd, struct drm_xe_engine_class_instance *hwe,
+ unsigned int count)
{
- igt_require_f(run_intel_compute_kernel_preempt(fd, hwe), "GPU not supported\n");
+ igt_require_f(run_intel_compute_kernel_preempt(fd, hwe, count), "GPU not supported\n");
}
igt_main
@@ -44,7 +51,21 @@ igt_main
continue;
igt_dynamic_f("engine-%s", xe_engine_class_string(hwe->engine_class))
- test_compute_preempt(xe, hwe);
+ test_compute_preempt(xe, hwe, 1);
+ }
+ }
+
+ igt_subtest_with_dynamic("compute-preempt-many") {
+ xe_for_each_engine(xe, hwe) {
+ /*
+ * TODO: Render engine is getting timed out when count is high,
+ * so for now only test with compute engine
+ */
+ if (hwe->engine_class != DRM_XE_ENGINE_CLASS_COMPUTE)
+ continue;
+
+ igt_dynamic_f("engine-%s", xe_engine_class_string(hwe->engine_class))
+ test_compute_preempt(xe, hwe, 100);
}
}
--
2.42.0
More information about the igt-dev
mailing list