mirror of
https://github.com/KhronosGroup/OpenCL-CTS.git
synced 2026-03-25 08:19:02 +00:00
Workitems in the last workgroup calls async_work_group_copy with different argument values depending on 'adjust'. According to spec, this results in undefined values.
This commit is contained in:
@@ -422,7 +422,9 @@ int Test_vStoreHalf_private( cl_device_id device, f2h referenceFunc, d2h doubleR
|
|||||||
"__kernel void test( __global float *p, __global half *f,\n"
|
"__kernel void test( __global float *p, __global half *f,\n"
|
||||||
" uint extra_last_thread )\n"
|
" uint extra_last_thread )\n"
|
||||||
"{\n"
|
"{\n"
|
||||||
" __local ushort data[3*(", local_buf_size, "+1)];\n"
|
" __local ushort data[3*(",
|
||||||
|
local_buf_size,
|
||||||
|
"+1)];\n"
|
||||||
" size_t i = get_global_id(0);\n"
|
" size_t i = get_global_id(0);\n"
|
||||||
" size_t lid = get_local_id(0);\n"
|
" size_t lid = get_local_id(0);\n"
|
||||||
" size_t last_i = get_global_size(0)-1;\n"
|
" size_t last_i = get_global_size(0)-1;\n"
|
||||||
@@ -432,9 +434,18 @@ int Test_vStoreHalf_private( cl_device_id device, f2h referenceFunc, d2h doubleR
|
|||||||
" if(last_i == i && extra_last_thread != 0) {\n"
|
" if(last_i == i && extra_last_thread != 0) {\n"
|
||||||
" adjust = 3-extra_last_thread;\n"
|
" adjust = 3-extra_last_thread;\n"
|
||||||
" } "
|
" } "
|
||||||
" vstore_half3",roundName,"( vload3(i,p-adjust), lid, (__local half *)(&data[0]) );\n"
|
" vstore_half3",
|
||||||
|
roundName,
|
||||||
|
"( vload3(i,p-adjust), lid, (__local half *)(&data[0]) );\n"
|
||||||
" barrier( CLK_LOCAL_MEM_FENCE ); \n"
|
" barrier( CLK_LOCAL_MEM_FENCE ); \n"
|
||||||
" async_event = async_work_group_copy((__global ushort *)(f+3*(i-lid)), (__local ushort *)(&data[adjust]), lsize*3-adjust, 0);\n" // investigate later
|
" if (get_group_id(0) == (get_num_groups(0) - 1) &&\n"
|
||||||
|
" extra_last_thread != 0) {\n"
|
||||||
|
" adjust = 3-extra_last_thread;\n"
|
||||||
|
" }\n"
|
||||||
|
" async_event = async_work_group_copy(\n"
|
||||||
|
" (__global ushort*)(f+3*(i-lid)),\n"
|
||||||
|
" (__local ushort *)(&data[adjust]),\n"
|
||||||
|
" lsize*3-adjust, 0);\n" // investigate later
|
||||||
" wait_group_events(1, &async_event);\n"
|
" wait_group_events(1, &async_event);\n"
|
||||||
"}\n"
|
"}\n"
|
||||||
};
|
};
|
||||||
@@ -524,7 +535,9 @@ int Test_vStoreHalf_private( cl_device_id device, f2h referenceFunc, d2h doubleR
|
|||||||
"__kernel void test( __global double *p, __global half *f,\n"
|
"__kernel void test( __global double *p, __global half *f,\n"
|
||||||
" uint extra_last_thread )\n"
|
" uint extra_last_thread )\n"
|
||||||
"{\n"
|
"{\n"
|
||||||
" __local ushort data[3*(", local_buf_size, "+1)];\n"
|
" __local ushort data[3*(",
|
||||||
|
local_buf_size,
|
||||||
|
"+1)];\n"
|
||||||
" size_t i = get_global_id(0);\n"
|
" size_t i = get_global_id(0);\n"
|
||||||
" size_t lid = get_local_id(0);\n"
|
" size_t lid = get_local_id(0);\n"
|
||||||
" size_t last_i = get_global_size(0)-1;\n"
|
" size_t last_i = get_global_size(0)-1;\n"
|
||||||
@@ -534,15 +547,23 @@ int Test_vStoreHalf_private( cl_device_id device, f2h referenceFunc, d2h doubleR
|
|||||||
" if(last_i == i && extra_last_thread != 0) {\n"
|
" if(last_i == i && extra_last_thread != 0) {\n"
|
||||||
" adjust = 3-extra_last_thread;\n"
|
" adjust = 3-extra_last_thread;\n"
|
||||||
" }\n "
|
" }\n "
|
||||||
" vstore_half3",roundName,"( vload3(i,p-adjust), lid, (__local half *)(&data[0]) );\n"
|
" vstore_half3",
|
||||||
|
roundName,
|
||||||
|
"( vload3(i,p-adjust), lid, (__local half *)(&data[0]) );\n"
|
||||||
" barrier( CLK_LOCAL_MEM_FENCE ); \n"
|
" barrier( CLK_LOCAL_MEM_FENCE ); \n"
|
||||||
" async_event = async_work_group_copy((__global ushort *)(f+3*(i-lid)), (__local ushort *)(&data[adjust]), lsize*3-adjust, 0);\n" // investigate later
|
" if (get_group_id(0) == (get_num_groups(0) - 1) &&\n"
|
||||||
|
" extra_last_thread != 0) {\n"
|
||||||
|
" adjust = 3-extra_last_thread;\n"
|
||||||
|
" }\n"
|
||||||
|
" async_event = async_work_group_copy(\n"
|
||||||
|
" (__global ushort *)(f+3*(i-lid)),\n"
|
||||||
|
" (__local ushort *)(&data[adjust]),\n"
|
||||||
|
" lsize*3-adjust, 0);\n" // investigate later
|
||||||
" wait_group_events(1, &async_event);\n"
|
" wait_group_events(1, &async_event);\n"
|
||||||
"}\n"
|
"}\n"
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if(g_arrVecSizes[vectorSize] == 3) {
|
if(g_arrVecSizes[vectorSize] == 3) {
|
||||||
programs[vectorSize][0] = MakeProgram( device, source_v3, sizeof(source_v3) / sizeof( source_v3[0]) );
|
programs[vectorSize][0] = MakeProgram( device, source_v3, sizeof(source_v3) / sizeof( source_v3[0]) );
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
Reference in New Issue
Block a user