clc: rework optional subgroup feature

OpenCL 3.0 core requires __opencl_c_subgroups to be set, the OpenCL
cl_khr_subgroups extenions can only be enabled if and only if the driver
guarentees independent forward progress between subgroups.

See CL_DEVICE_SUB_GROUP_INDEPENDENT_FORWARD_PROGRESS for more information.

Signed-off-by: Karol Herbst <git@karolherbst.de>
Reviewed-by: Nora Allen <blackcatgames@protonmail.com>
Reviewed-by: Alyssa Rosenzweig <alyssa@rosenzweig.io>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/22893>
This commit is contained in:
Karol Herbst
2023-05-10 14:03:06 +02:00
committed by Marge Bot
parent 17e749dc00
commit 1e655b2f25
4 changed files with 11 additions and 0 deletions

View File

@@ -58,7 +58,12 @@ struct clc_optional_features {
bool images_write_3d;
bool integer_dot_product;
bool intel_subgroups;
/* OpenCL core subgroups */
bool subgroups;
/* OpenCL extension cl_khr_subgroups, which requires independent forward
* progress
*/
bool subgroups_ifp;
};
struct clc_compile_args {

View File

@@ -927,6 +927,10 @@ clc_compile_to_llvm_module(LLVMContext &llvm_ctx,
c->getTargetOpts().OpenCLExtensionsAsWritten.push_back("+cl_intel_subgroups");
}
if (args->features.subgroups) {
c->getTargetOpts().OpenCLExtensionsAsWritten.push_back("+__opencl_c_subgroups");
}
if (args->features.subgroups_ifp) {
assert(args->features.subgroups);
c->getTargetOpts().OpenCLExtensionsAsWritten.push_back("+cl_khr_subgroups");
}
#endif

View File

@@ -901,6 +901,7 @@ impl Device {
integer_dot_product: true,
intel_subgroups: false,
subgroups: false,
subgroups_ifp: false,
}
}
}

View File

@@ -437,6 +437,7 @@ int main(int argc, char **argv)
.fp16 = true,
.intel_subgroups = true,
.subgroups = true,
.subgroups_ifp = true,
},
.args = util_dynarray_begin(&clang_args),
.num_args = util_dynarray_num_elements(&clang_args, char *),