Skip to content

Commit dbc0860

Browse files
committed
[RM] revise builtin device
1 parent c4ff0ef commit dbc0860

4 files changed

Lines changed: 62 additions & 43 deletions

File tree

include/simsycl/system.hh

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -87,13 +87,11 @@ struct device_config {
8787
std::string name{};
8888
std::string vendor{};
8989
std::string driver_version{};
90-
std::string profile{};
9190
std::string version{};
9291
std::string backend_version{};
9392
std::vector<sycl::aspect> aspects{};
9493
std::vector<std::string> extensions{};
9594
size_t printf_buffer_size{};
96-
bool preferred_interop_user_sync{};
9795
std::optional<simsycl::device_id> parent_device_id{};
9896
uint32_t partition_max_sub_devices{};
9997
std::vector<sycl::info::partition_property> partition_properties{};

src/simsycl/device.cc

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
#include "simsycl/sycl/range.hh"
33
#include "simsycl/system.hh"
44

5+
#include <cassert>
56
#include <iterator>
67

78
namespace simsycl::detail {
@@ -387,7 +388,7 @@ std::string device::get_info<info::device::driver_version>() const {
387388

388389
template<>
389390
std::string device::get_info<info::device::profile>() const {
390-
return state().config.profile;
391+
throw exception(errc::invalid, "not an OpenCL backend");
391392
}
392393

393394
template<>
@@ -419,13 +420,15 @@ size_t device::get_info<info::device::printf_buffer_size>() const {
419420

420421
template<>
421422
bool device::get_info<info::device::preferred_interop_user_sync>() const {
422-
return state().config.preferred_interop_user_sync;
423+
throw exception(errc::invalid, "not an OpenCL backend");
423424
}
424425

425426
template<>
426427
sycl::device device::get_info<info::device::parent_device>() const {
427-
abort();
428-
// return state().config.parent_device.value();
428+
const auto parent_instance = state().parent.lock();
429+
assert(parent_instance.has_value() == state().config.parent_device_id.has_value());
430+
if(!parent_instance.has_value()) { throw exception(errc::invalid, "not a sub-device"); }
431+
return *parent_instance;
429432
}
430433

431434
template<>

src/simsycl/system.cc

Lines changed: 55 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,9 @@
33
#include "simsycl/detail/check.hh"
44
#include "simsycl/sycl/device.hh"
55
#include "simsycl/sycl/platform.hh"
6+
#include "simsycl/sycl/vec.hh"
67

8+
#include <bit>
79
#include <cassert>
810
#include <iostream>
911
#include <limits>
@@ -303,15 +305,16 @@ const platform_config builtin_platform{
303305
.extensions = {},
304306
};
305307

306-
const device_config builtin_device{
307-
.device_type = sycl::info::device_type::gpu,
308-
.vendor_id = 0,
309-
.max_compute_units = 16,
310-
.max_work_item_dimensions = 3,
311-
.max_work_item_sizes_1 = {1024},
312-
.max_work_item_sizes_2 = {1024, 1024},
313-
.max_work_item_sizes_3 = {64, 1024, 1024},
314-
.max_work_group_size = 1024,
308+
// clang-format off
309+
const device_config builtin_device {
310+
.device_type = sycl::info::device_type::gpu, //
311+
.vendor_id = 0, //
312+
.max_compute_units = 16, //
313+
.max_work_item_dimensions = 3, //
314+
.max_work_item_sizes_1 = {1024}, //
315+
.max_work_item_sizes_2 = {1024, 1024}, //
316+
.max_work_item_sizes_3 = {1024, 1024, 1024}, //
317+
.max_work_group_size = 1024, //
315318
.max_num_sub_groups = 32,
316319
.sub_group_sizes = {32},
317320
.preferred_vector_width_char = 4,
@@ -342,56 +345,75 @@ const device_config builtin_device{
342345
.image_max_buffer_size = 0,
343346
.max_samplers = 0,
344347
.max_parameter_size = std::numeric_limits<std::size_t>::max(),
345-
.mem_base_addr_align = 8,
348+
.mem_base_addr_align = 8 * sizeof(sycl::long16),
346349
.half_fp_config
347-
= {sycl::info::fp_config::denorm, sycl::info::fp_config::inf_nan, sycl::info::fp_config::round_to_nearest,
348-
sycl::info::fp_config::round_to_zero, sycl::info::fp_config::round_to_inf, sycl::info::fp_config::fma,
349-
sycl::info::fp_config::correctly_rounded_divide_sqrt},
350-
.single_fp_config
351-
= {sycl::info::fp_config::denorm, sycl::info::fp_config::inf_nan, sycl::info::fp_config::round_to_nearest,
352-
sycl::info::fp_config::round_to_zero, sycl::info::fp_config::round_to_inf, sycl::info::fp_config::fma,
353-
sycl::info::fp_config::correctly_rounded_divide_sqrt},
354-
.double_fp_config
355-
= {sycl::info::fp_config::denorm, sycl::info::fp_config::inf_nan, sycl::info::fp_config::round_to_nearest,
356-
sycl::info::fp_config::round_to_zero, sycl::info::fp_config::round_to_inf, sycl::info::fp_config::fma,
357-
sycl::info::fp_config::correctly_rounded_divide_sqrt},
350+
#if SIMSYCL_FEATURE_HALF_TYPE
351+
= {sycl::info::fp_config::denorm, sycl::info::fp_config::inf_nan,
352+
sycl::info::fp_config::fma, sycl::info::fp_config::correctly_rounded_divide_sqrt},
353+
#else
354+
= {},
355+
#endif
356+
.single_fp_config = {sycl::info::fp_config::denorm, sycl::info::fp_config::inf_nan,
357+
sycl::info::fp_config::fma, sycl::info::fp_config::correctly_rounded_divide_sqrt},
358+
.double_fp_config = {sycl::info::fp_config::denorm, sycl::info::fp_config::inf_nan,
359+
sycl::info::fp_config::fma, sycl::info::fp_config::correctly_rounded_divide_sqrt},
358360
.global_mem_cache_type = sycl::info::global_mem_cache_type::read_write,
359-
.global_mem_cache_line_size = 128,
361+
.global_mem_cache_line_size = 64,
360362
.global_mem_cache_size = 16 << 20,
361363
.global_mem_size = std::numeric_limits<std::size_t>::max(),
362364
.max_constant_buffer_size = 1 << 16,
363365
.max_constant_args = std::numeric_limits<uint32_t>::max(),
364366
.local_mem_type = sycl::info::local_mem_type::local,
365367
.local_mem_size = 64 << 10,
366368
.error_correction_support = false,
367-
.host_unified_memory = false,
369+
.host_unified_memory = true,
370+
.atomic_memory_order_capabilities = {sycl::memory_order::relaxed, sycl::memory_order::acquire,
371+
sycl::memory_order::release, sycl::memory_order::acq_rel, sycl::memory_order::seq_cst},
372+
.atomic_fence_order_capabilities = {sycl::memory_order::relaxed, sycl::memory_order::acquire,
373+
sycl::memory_order::release, sycl::memory_order::acq_rel, sycl::memory_order::seq_cst},
374+
.atomic_memory_scope_capabilities = {sycl::memory_scope::work_item,
375+
sycl::memory_scope::sub_group, sycl::memory_scope::work_group, sycl::memory_scope::device,
376+
sycl::memory_scope::system },
377+
.atomic_fence_scope_capabilities = {sycl::memory_scope::work_item,
378+
sycl::memory_scope::sub_group, sycl::memory_scope::work_group, sycl::memory_scope::device,
379+
sycl::memory_scope::system },
368380
.profiling_timer_resolution = 1,
369-
.is_endian_little = true,
381+
.is_endian_little = std::endian::native == std::endian::little,
370382
.is_available = true,
371-
.is_compiler_available = true,
372-
.is_linker_available = true,
383+
.is_compiler_available = false,
384+
.is_linker_available = false,
373385
.execution_capabilities = {sycl::info::execution_capability::exec_kernel},
374386
.queue_profiling = true,
375387
.built_in_kernels = {},
376388
.platform_id = "SimSYCL",
377389
.name = "SimSYCL virtual GPU",
378390
.vendor = "SimSYCL",
379391
.driver_version = "0.1",
380-
.profile = "FULL_PROFILE",
381392
.version = "0.1",
382-
.aspects
383-
= { sycl::aspect::gpu, sycl::aspect::accelerator, sycl::aspect::fp64, sycl::aspect::atomic64,
384-
sycl::aspect::queue_profiling, sycl::aspect::usm_device_allocations, sycl::aspect::usm_host_allocations,
385-
sycl::aspect::usm_shared_allocations, },
386-
.extensions = {},
393+
.aspects = { sycl::aspect::gpu, sycl::aspect::accelerator, sycl::aspect::emulated,
394+
sycl::aspect::host_debuggable,
395+
#if SIMSYCL_FEATURE_HALF_TYPE
396+
sycl::aspect::fp16,
397+
#endif
398+
sycl::aspect::fp64, sycl::aspect::atomic64, sycl::aspect::queue_profiling,
399+
sycl::aspect::usm_device_allocations, sycl::aspect::usm_host_allocations,
400+
sycl::aspect::usm_atomic_host_allocations, sycl::aspect::usm_shared_allocations,
401+
sycl::aspect::usm_atomic_shared_allocations, sycl::aspect::usm_system_allocations },
402+
.extensions = {
403+
"cl_khr_int64_base_atomics",
404+
"cl_khr_int64_extended_atomics",
405+
#if SIMSYCL_FEATURE_HALF_TYPE
406+
"cl_khr_fp16",
407+
#endif
408+
},
387409
.printf_buffer_size = std::numeric_limits<std::size_t>::max(),
388-
.preferred_interop_user_sync = true,
389410
.partition_max_sub_devices = 0,
390411
.partition_properties = {},
391412
.partition_affinity_domains = {sycl::info::partition_affinity_domain::not_applicable},
392413
.partition_type_property = sycl::info::partition_property::no_partition,
393414
.partition_type_affinity_domain = sycl::info::partition_affinity_domain::not_applicable,
394415
};
416+
// clang-format off
395417

396418
const system_config builtin_system{
397419
.platforms = {{"SimSYCL", builtin_platform}},

src/simsycl/system_config.cc

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -247,13 +247,11 @@ void to_json(nlohmann::json &json, const device_config &device) {
247247
{"name", device.name},
248248
{"vendor", device.vendor},
249249
{"driver_version", device.driver_version},
250-
{"profile", device.profile},
251250
{"version", device.version},
252251
{"backend_version", device.backend_version},
253252
{"aspects", device.aspects},
254253
{"extensions", device.extensions},
255254
{"printf_buffer_size", device.printf_buffer_size},
256-
{"preferred_interop_user_sync", device.preferred_interop_user_sync},
257255
{"parent_device_id", device.parent_device_id},
258256
{"partition_max_sub_devices", device.partition_max_sub_devices},
259257
{"partition_properties", device.partition_properties},
@@ -333,13 +331,11 @@ void from_json(const nlohmann::json &json, device_config &device) {
333331
json.at("name").get_to(device.name);
334332
json.at("vendor").get_to(device.vendor);
335333
json.at("driver_version").get_to(device.driver_version);
336-
json.at("profile").get_to(device.profile);
337334
json.at("version").get_to(device.version);
338335
json.at("backend_version").get_to(device.backend_version);
339336
json.at("aspects").get_to(device.aspects);
340337
json.at("extensions").get_to(device.extensions);
341338
json.at("printf_buffer_size").get_to(device.printf_buffer_size);
342-
json.at("preferred_interop_user_sync").get_to(device.preferred_interop_user_sync);
343339
json.at("parent_device_id").get_to(device.parent_device_id);
344340
json.at("partition_max_sub_devices").get_to(device.partition_max_sub_devices);
345341
json.at("partition_properties").get_to(device.partition_properties);

0 commit comments

Comments
 (0)