revert format change
This commit is contained in:
parent
5de2122647
commit
e1eabdc2e4
1 changed files with 429 additions and 465 deletions
|
@ -220,8 +220,7 @@ namespace dpct
|
||||||
// a. and b.
|
// a. and b.
|
||||||
i++;
|
i++;
|
||||||
minor = std::stoi(&(ver[i]));
|
minor = std::stoi(&(ver[i]));
|
||||||
}
|
} else {
|
||||||
else {
|
|
||||||
// c.
|
// c.
|
||||||
minor = 0;
|
minor = 0;
|
||||||
}
|
}
|
||||||
|
@ -590,94 +589,75 @@ namespace dpct
|
||||||
}
|
}
|
||||||
|
|
||||||
/// dpct device extension
|
/// dpct device extension
|
||||||
class device_ext : public sycl::device
|
class device_ext : public sycl::device {
|
||||||
{
|
|
||||||
typedef std::mutex mutex_type;
|
typedef std::mutex mutex_type;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
device_ext() : sycl::device() {}
|
device_ext() : sycl::device() {}
|
||||||
~device_ext()
|
~device_ext() {
|
||||||
{
|
|
||||||
std::lock_guard<mutex_type> lock(m_mutex);
|
std::lock_guard<mutex_type> lock(m_mutex);
|
||||||
clear_queues();
|
clear_queues();
|
||||||
}
|
}
|
||||||
device_ext(const sycl::device &base) : sycl::device(base)
|
device_ext(const sycl::device &base) : sycl::device(base) {
|
||||||
{
|
|
||||||
std::lock_guard<mutex_type> lock(m_mutex);
|
std::lock_guard<mutex_type> lock(m_mutex);
|
||||||
init_queues();
|
init_queues();
|
||||||
}
|
}
|
||||||
|
|
||||||
int is_native_atomic_supported() { return 0; }
|
int is_native_atomic_supported() { return 0; }
|
||||||
int get_major_version() const
|
int get_major_version() const { return dpct::get_major_version(*this); }
|
||||||
{
|
|
||||||
return dpct::get_major_version(*this);
|
|
||||||
}
|
|
||||||
|
|
||||||
int get_minor_version() const
|
int get_minor_version() const { return dpct::get_minor_version(*this); }
|
||||||
{
|
|
||||||
return dpct::get_minor_version(*this);
|
|
||||||
}
|
|
||||||
|
|
||||||
int get_max_compute_units() const
|
int get_max_compute_units() const {
|
||||||
{
|
|
||||||
return get_device_info().get_max_compute_units();
|
return get_device_info().get_max_compute_units();
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Return the maximum clock frequency of this device in KHz.
|
/// Return the maximum clock frequency of this device in KHz.
|
||||||
int get_max_clock_frequency() const
|
int get_max_clock_frequency() const {
|
||||||
{
|
|
||||||
return get_device_info().get_max_clock_frequency();
|
return get_device_info().get_max_clock_frequency();
|
||||||
}
|
}
|
||||||
|
|
||||||
int get_integrated() const { return get_device_info().get_integrated(); }
|
int get_integrated() const { return get_device_info().get_integrated(); }
|
||||||
|
|
||||||
int get_max_sub_group_size() const
|
int get_max_sub_group_size() const {
|
||||||
{
|
|
||||||
return get_device_info().get_max_sub_group_size();
|
return get_device_info().get_max_sub_group_size();
|
||||||
}
|
}
|
||||||
|
|
||||||
int get_max_register_size_per_work_group() const
|
int get_max_register_size_per_work_group() const {
|
||||||
{
|
|
||||||
return get_device_info().get_max_register_size_per_work_group();
|
return get_device_info().get_max_register_size_per_work_group();
|
||||||
}
|
}
|
||||||
|
|
||||||
int get_max_work_group_size() const
|
int get_max_work_group_size() const {
|
||||||
{
|
|
||||||
return get_device_info().get_max_work_group_size();
|
return get_device_info().get_max_work_group_size();
|
||||||
}
|
}
|
||||||
|
|
||||||
int get_mem_base_addr_align() const
|
int get_mem_base_addr_align() const {
|
||||||
{
|
|
||||||
return get_info<sycl::info::device::mem_base_addr_align>();
|
return get_info<sycl::info::device::mem_base_addr_align>();
|
||||||
}
|
}
|
||||||
|
|
||||||
size_t get_global_mem_size() const
|
size_t get_global_mem_size() const {
|
||||||
{
|
|
||||||
return get_device_info().get_global_mem_size();
|
return get_device_info().get_global_mem_size();
|
||||||
}
|
}
|
||||||
|
|
||||||
size_t get_max_mem_alloc_size() const
|
size_t get_max_mem_alloc_size() const {
|
||||||
{
|
|
||||||
return get_device_info().get_max_mem_alloc_size();
|
return get_device_info().get_max_mem_alloc_size();
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Get the number of bytes of free and total memory on the SYCL device.
|
/// Get the number of bytes of free and total memory on the SYCL device.
|
||||||
/// \param [out] free_memory The number of bytes of free memory on the SYCL device.
|
/// \param [out] free_memory The number of bytes of free memory on the
|
||||||
/// \param [out] total_memory The number of bytes of total memory on the SYCL device.
|
/// SYCL device. \param [out] total_memory The number of bytes of total
|
||||||
void get_memory_info(size_t &free_memory, size_t &total_memory)
|
/// memory on the SYCL device.
|
||||||
{
|
void get_memory_info(size_t &free_memory, size_t &total_memory) {
|
||||||
total_memory = get_device_info().get_global_mem_size();
|
total_memory = get_device_info().get_global_mem_size();
|
||||||
const char *warning_info = "get_memory_info: [warning] ext_intel_free_memory is not "
|
const char *warning_info =
|
||||||
|
"get_memory_info: [warning] ext_intel_free_memory is not "
|
||||||
"supported (export/set ZES_ENABLE_SYSMAN=1 to support), "
|
"supported (export/set ZES_ENABLE_SYSMAN=1 to support), "
|
||||||
"use total memory as free memory";
|
"use total memory as free memory";
|
||||||
#if (defined(__SYCL_COMPILER_VERSION) && __SYCL_COMPILER_VERSION >= 20221105)
|
#if (defined(__SYCL_COMPILER_VERSION) && __SYCL_COMPILER_VERSION >= 20221105)
|
||||||
if (!has(sycl::aspect::ext_intel_free_memory))
|
if (!has(sycl::aspect::ext_intel_free_memory)) {
|
||||||
{
|
|
||||||
std::cerr << warning_info << std::endl;
|
std::cerr << warning_info << std::endl;
|
||||||
free_memory = total_memory;
|
free_memory = total_memory;
|
||||||
}
|
} else {
|
||||||
else
|
|
||||||
{
|
|
||||||
free_memory = get_info<sycl::ext::intel::info::device::free_memory>();
|
free_memory = get_info<sycl::ext::intel::info::device::free_memory>();
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
|
@ -691,20 +671,17 @@ namespace dpct
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void get_device_info(device_info &out) const
|
void get_device_info(device_info &out) const {
|
||||||
{
|
|
||||||
dpct::get_device_info(out, *this);
|
dpct::get_device_info(out, *this);
|
||||||
}
|
}
|
||||||
|
|
||||||
device_info get_device_info() const
|
device_info get_device_info() const {
|
||||||
{
|
|
||||||
device_info prop;
|
device_info prop;
|
||||||
dpct::get_device_info(prop, *this);
|
dpct::get_device_info(prop, *this);
|
||||||
return prop;
|
return prop;
|
||||||
}
|
}
|
||||||
|
|
||||||
void reset()
|
void reset() {
|
||||||
{
|
|
||||||
std::lock_guard<mutex_type> lock(m_mutex);
|
std::lock_guard<mutex_type> lock(m_mutex);
|
||||||
clear_queues();
|
clear_queues();
|
||||||
init_queues();
|
init_queues();
|
||||||
|
@ -714,25 +691,20 @@ namespace dpct
|
||||||
|
|
||||||
sycl::queue &out_of_order_queue() { return _q_out_of_order; }
|
sycl::queue &out_of_order_queue() { return _q_out_of_order; }
|
||||||
|
|
||||||
sycl::queue &default_queue()
|
sycl::queue &default_queue() { return in_order_queue(); }
|
||||||
{
|
|
||||||
return in_order_queue();
|
|
||||||
}
|
|
||||||
|
|
||||||
void queues_wait_and_throw()
|
void queues_wait_and_throw() {
|
||||||
{
|
|
||||||
std::unique_lock<mutex_type> lock(m_mutex);
|
std::unique_lock<mutex_type> lock(m_mutex);
|
||||||
lock.unlock();
|
lock.unlock();
|
||||||
for (auto &q : _queues)
|
for (auto &q : _queues) {
|
||||||
{
|
|
||||||
q.wait_and_throw();
|
q.wait_and_throw();
|
||||||
}
|
}
|
||||||
// Guard the destruct of current_queues to make sure the ref count is safe.
|
// Guard the destruct of current_queues to make sure the ref count is
|
||||||
|
// safe.
|
||||||
lock.lock();
|
lock.lock();
|
||||||
}
|
}
|
||||||
|
|
||||||
sycl::queue create_queue(bool enable_exception_handler = false)
|
sycl::queue create_queue(bool enable_exception_handler = false) {
|
||||||
{
|
|
||||||
return create_in_order_queue(enable_exception_handler);
|
return create_in_order_queue(enable_exception_handler);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -754,52 +726,45 @@ namespace dpct
|
||||||
sycl::property::queue::in_order());
|
sycl::property::queue::in_order());
|
||||||
}
|
}
|
||||||
|
|
||||||
sycl::queue create_out_of_order_queue(bool enable_exception_handler = false) {
|
sycl::queue create_out_of_order_queue(
|
||||||
|
bool enable_exception_handler = false) {
|
||||||
std::lock_guard<mutex_type> lock(m_mutex);
|
std::lock_guard<mutex_type> lock(m_mutex);
|
||||||
return create_queue_impl(enable_exception_handler);
|
return create_queue_impl(enable_exception_handler);
|
||||||
}
|
}
|
||||||
|
|
||||||
void destroy_queue(sycl::queue queue)
|
void destroy_queue(sycl::queue queue) {
|
||||||
{
|
|
||||||
std::lock_guard<mutex_type> lock(m_mutex);
|
std::lock_guard<mutex_type> lock(m_mutex);
|
||||||
_queues.clear();
|
_queues.clear();
|
||||||
}
|
}
|
||||||
void set_saved_queue(sycl::queue q)
|
void set_saved_queue(sycl::queue q) {
|
||||||
{
|
|
||||||
std::lock_guard<mutex_type> lock(m_mutex);
|
std::lock_guard<mutex_type> lock(m_mutex);
|
||||||
_saved_queue = q;
|
_saved_queue = q;
|
||||||
}
|
}
|
||||||
sycl::queue get_saved_queue() const
|
sycl::queue get_saved_queue() const {
|
||||||
{
|
|
||||||
std::lock_guard<mutex_type> lock(m_mutex);
|
std::lock_guard<mutex_type> lock(m_mutex);
|
||||||
return _saved_queue;
|
return _saved_queue;
|
||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void clear_queues()
|
void clear_queues() { _queues.clear(); }
|
||||||
{
|
|
||||||
_queues.clear();
|
|
||||||
}
|
|
||||||
|
|
||||||
void init_queues()
|
void init_queues() {
|
||||||
{
|
_q_in_order =
|
||||||
_q_in_order = create_queue_impl(true, sycl::property::queue::in_order());
|
create_queue_impl(true, sycl::property::queue::in_order());
|
||||||
_q_out_of_order = create_queue_impl(true);
|
_q_out_of_order = create_queue_impl(true);
|
||||||
_saved_queue = default_queue();
|
_saved_queue = default_queue();
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Caller should acquire resource \p m_mutex before calling this function.
|
/// Caller should acquire resource \p m_mutex before calling this
|
||||||
|
/// function.
|
||||||
template <class... Properties>
|
template <class... Properties>
|
||||||
sycl::queue create_queue_impl(bool enable_exception_handler,
|
sycl::queue create_queue_impl(bool enable_exception_handler,
|
||||||
Properties... properties)
|
Properties... properties) {
|
||||||
{
|
|
||||||
sycl::async_handler eh = {};
|
sycl::async_handler eh = {};
|
||||||
if (enable_exception_handler)
|
if (enable_exception_handler) {
|
||||||
{
|
|
||||||
eh = exception_handler;
|
eh = exception_handler;
|
||||||
}
|
}
|
||||||
auto q = sycl::queue(
|
auto q = sycl::queue(*this, eh,
|
||||||
*this, eh,
|
|
||||||
sycl::property_list(
|
sycl::property_list(
|
||||||
#ifdef DPCT_PROFILING_ENABLED
|
#ifdef DPCT_PROFILING_ENABLED
|
||||||
sycl::property::queue::enable_profiling(),
|
sycl::property::queue::enable_profiling(),
|
||||||
|
@ -818,8 +783,8 @@ namespace dpct
|
||||||
if (enable_exception_handler) {
|
if (enable_exception_handler) {
|
||||||
eh = exception_handler;
|
eh = exception_handler;
|
||||||
}
|
}
|
||||||
_queues.push_back(sycl::queue(
|
_queues.push_back(
|
||||||
device, eh,
|
sycl::queue(device, eh,
|
||||||
sycl::property_list(
|
sycl::property_list(
|
||||||
#ifdef DPCT_PROFILING_ENABLED
|
#ifdef DPCT_PROFILING_ENABLED
|
||||||
sycl::property::queue::enable_profiling(),
|
sycl::property::queue::enable_profiling(),
|
||||||
|
@ -829,8 +794,7 @@ namespace dpct
|
||||||
return _queues.back();
|
return _queues.back();
|
||||||
}
|
}
|
||||||
|
|
||||||
void get_version(int &major, int &minor) const
|
void get_version(int &major, int &minor) const {
|
||||||
{
|
|
||||||
detail::get_version(*this, major, minor);
|
detail::get_version(*this, major, minor);
|
||||||
}
|
}
|
||||||
sycl::queue _q_in_order, _q_out_of_order;
|
sycl::queue _q_in_order, _q_out_of_order;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue