mirror of
https://github.com/KhronosGroup/OpenCL-CTS.git
synced 2026-03-19 06:09:01 +00:00
Add memory_scope_all_devices testing (#999)
* Add memory_scope_all_devices testing This duplicats memory_scope_all_svm_devices testing, but it seems pretty quick so I don't think it hurts. Fixes #990 * Address clang-format failures * Address a further clang-format failure
This commit is contained in:
@@ -44,16 +44,12 @@ const char *get_memory_scope_type_name(TExplicitMemoryScopeType scopeType)
|
|||||||
{
|
{
|
||||||
switch (scopeType)
|
switch (scopeType)
|
||||||
{
|
{
|
||||||
case MEMORY_SCOPE_EMPTY:
|
case MEMORY_SCOPE_EMPTY: return "";
|
||||||
return "";
|
case MEMORY_SCOPE_WORK_GROUP: return "memory_scope_work_group";
|
||||||
case MEMORY_SCOPE_WORK_GROUP:
|
case MEMORY_SCOPE_DEVICE: return "memory_scope_device";
|
||||||
return "memory_scope_work_group";
|
case MEMORY_SCOPE_ALL_DEVICES: return "memory_scope_all_devices";
|
||||||
case MEMORY_SCOPE_DEVICE:
|
case MEMORY_SCOPE_ALL_SVM_DEVICES: return "memory_scope_all_svm_devices";
|
||||||
return "memory_scope_device";
|
default: return 0;
|
||||||
case MEMORY_SCOPE_ALL_SVM_DEVICES:
|
|
||||||
return "memory_scope_all_svm_devices";
|
|
||||||
default:
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -276,6 +272,9 @@ cl_int getSupportedMemoryOrdersAndScopes(
|
|||||||
}
|
}
|
||||||
if (atomic_capabilities & CL_DEVICE_ATOMIC_SCOPE_ALL_DEVICES)
|
if (atomic_capabilities & CL_DEVICE_ATOMIC_SCOPE_ALL_DEVICES)
|
||||||
{
|
{
|
||||||
|
// OpenCL 3.0 added memory_scope_all_devices as an alias for
|
||||||
|
// memory_scope_all_svm_devices, so test both.
|
||||||
|
memoryScopes.push_back(MEMORY_SCOPE_ALL_DEVICES);
|
||||||
memoryScopes.push_back(MEMORY_SCOPE_ALL_SVM_DEVICES);
|
memoryScopes.push_back(MEMORY_SCOPE_ALL_SVM_DEVICES);
|
||||||
}
|
}
|
||||||
return CL_SUCCESS;
|
return CL_SUCCESS;
|
||||||
|
|||||||
@@ -35,25 +35,26 @@
|
|||||||
|
|
||||||
enum TExplicitAtomicType
|
enum TExplicitAtomicType
|
||||||
{
|
{
|
||||||
TYPE_ATOMIC_INT,
|
TYPE_ATOMIC_INT,
|
||||||
TYPE_ATOMIC_UINT,
|
TYPE_ATOMIC_UINT,
|
||||||
TYPE_ATOMIC_LONG,
|
TYPE_ATOMIC_LONG,
|
||||||
TYPE_ATOMIC_ULONG,
|
TYPE_ATOMIC_ULONG,
|
||||||
TYPE_ATOMIC_FLOAT,
|
TYPE_ATOMIC_FLOAT,
|
||||||
TYPE_ATOMIC_DOUBLE,
|
TYPE_ATOMIC_DOUBLE,
|
||||||
TYPE_ATOMIC_INTPTR_T,
|
TYPE_ATOMIC_INTPTR_T,
|
||||||
TYPE_ATOMIC_UINTPTR_T,
|
TYPE_ATOMIC_UINTPTR_T,
|
||||||
TYPE_ATOMIC_SIZE_T,
|
TYPE_ATOMIC_SIZE_T,
|
||||||
TYPE_ATOMIC_PTRDIFF_T,
|
TYPE_ATOMIC_PTRDIFF_T,
|
||||||
TYPE_ATOMIC_FLAG
|
TYPE_ATOMIC_FLAG
|
||||||
};
|
};
|
||||||
|
|
||||||
enum TExplicitMemoryScopeType
|
enum TExplicitMemoryScopeType
|
||||||
{
|
{
|
||||||
MEMORY_SCOPE_EMPTY,
|
MEMORY_SCOPE_EMPTY,
|
||||||
MEMORY_SCOPE_WORK_GROUP,
|
MEMORY_SCOPE_WORK_GROUP,
|
||||||
MEMORY_SCOPE_DEVICE,
|
MEMORY_SCOPE_DEVICE,
|
||||||
MEMORY_SCOPE_ALL_SVM_DEVICES
|
MEMORY_SCOPE_ALL_DEVICES, // Alias for MEMORY_SCOPE_ALL_SVM_DEVICES
|
||||||
|
MEMORY_SCOPE_ALL_SVM_DEVICES
|
||||||
};
|
};
|
||||||
|
|
||||||
extern bool gHost; // temporary flag for testing native host threads (test verification)
|
extern bool gHost; // temporary flag for testing native host threads (test verification)
|
||||||
@@ -320,6 +321,7 @@ public:
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
case MEMORY_SCOPE_ALL_DEVICES: // fallthough
|
||||||
case MEMORY_SCOPE_ALL_SVM_DEVICES: {
|
case MEMORY_SCOPE_ALL_SVM_DEVICES: {
|
||||||
if ((gAtomicMemCap & CL_DEVICE_ATOMIC_SCOPE_ALL_DEVICES) == 0)
|
if ((gAtomicMemCap & CL_DEVICE_ATOMIC_SCOPE_ALL_DEVICES) == 0)
|
||||||
{
|
{
|
||||||
@@ -538,11 +540,17 @@ public:
|
|||||||
}
|
}
|
||||||
virtual cl_uint MaxHostThreads()
|
virtual cl_uint MaxHostThreads()
|
||||||
{
|
{
|
||||||
// block host threads execution for memory scope different than memory_scope_all_svm_devices
|
// block host threads execution for memory scope different than
|
||||||
if(MemoryScope() == MEMORY_SCOPE_ALL_SVM_DEVICES || gHost)
|
// memory_scope_all_svm_devices
|
||||||
return CBasicTest<HostAtomicType, HostDataType>::MaxHostThreads();
|
if (MemoryScope() == MEMORY_SCOPE_ALL_DEVICES
|
||||||
else
|
|| MemoryScope() == MEMORY_SCOPE_ALL_SVM_DEVICES || gHost)
|
||||||
return 0;
|
{
|
||||||
|
return CBasicTest<HostAtomicType, HostDataType>::MaxHostThreads();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
private:
|
private:
|
||||||
TExplicitMemoryOrderType _memoryOrder;
|
TExplicitMemoryOrderType _memoryOrder;
|
||||||
|
|||||||
@@ -1843,7 +1843,11 @@ public:
|
|||||||
}
|
}
|
||||||
virtual bool SVMDataBufferAllSVMConsistent()
|
virtual bool SVMDataBufferAllSVMConsistent()
|
||||||
{
|
{
|
||||||
return MemoryScope() == MEMORY_SCOPE_ALL_SVM_DEVICES;
|
// Although memory_scope_all_devices doesn't mention SVM it is just an
|
||||||
|
// alias for memory_scope_all_svm_devices. So both scopes interact with
|
||||||
|
// SVM allocations, on devices that support those, just the same.
|
||||||
|
return MemoryScope() == MEMORY_SCOPE_ALL_DEVICES
|
||||||
|
|| MemoryScope() == MEMORY_SCOPE_ALL_SVM_DEVICES;
|
||||||
}
|
}
|
||||||
virtual int ExecuteForEachParameterSet(cl_device_id deviceID, cl_context context, cl_command_queue queue)
|
virtual int ExecuteForEachParameterSet(cl_device_id deviceID, cl_context context, cl_command_queue queue)
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user