On branch master and Release_v1.1, Beignet implements a subset of the cl_intel_subgroups extension (https://www.khronos.org/registry/cl/extensions/intel/cl_intel_subgroups.txt). However, some functions do not behave according to the spec:
get_sub_group_size() is mapped to OP_SIMD_SIZE which returns the constant SIMD width. This is what get_max_sub_group_size() should return. get_sub_group_size() may be smaller than that for the last subgroup in a work group.
get_sub_group_id() is mapped to OP_SIMD_ID which returns the SIMD lane ID. However, the SIMD lane ID is the equivalent of get_sub_group_local_id().
Thanks for pointing the issue out. You are right, the current implementation doesn't fully comply with the spec.
Yejun, could you take a look at this bug and make our implementation comply?
thanks, yes, the real function should be get_max_sub_group_size and get_sub_group_local_id, i'll fix it accordingly.