mirror of
https://github.com/ROCm/composable_kernel.git
synced 2026-06-11 00:39:02 +00:00
[CK] suppress compiler warnings while building pytorch. (#7760) ## Motivation Recently added compiler flags that are required to suppress false warnings by latest staging compiler are not recognized by older compiler versions and are triggering an avalanche of warnings. Previous attempt to suppress them by using -Wno-unknown-warning-option flag didn't help, because that flag wasn't recognized either and just added more warnings. I've verified that current approach by checking the clang version actually works as intended and makes the warnings go away. ## Technical Details <!-- Explain the changes along with any relevant GitHub links. --> ## Test Plan <!-- Explain any relevant testing done to verify this PR. --> ## Test Result <!-- Briefly summarize test outcomes. --> ## Submission Checklist - [ ] Look over the contributing guidelines at https://github.com/ROCm/ROCm/blob/develop/CONTRIBUTING.md#pull-requests.
81 lines
1.8 KiB
C++
81 lines
1.8 KiB
C++
// Copyright (c) Advanced Micro Devices, Inc., or its affiliates.
|
|
// SPDX-License-Identifier: MIT
|
|
|
|
#pragma once
|
|
|
|
#ifdef __linux__
|
|
#include <sched.h>
|
|
#endif
|
|
#include <thread>
|
|
#include <utility>
|
|
|
|
namespace ck_tile {
|
|
|
|
struct joinable_thread : std::thread
|
|
{
|
|
template <typename... Xs>
|
|
joinable_thread(Xs&&... xs) : std::thread(std::forward<Xs>(xs)...)
|
|
{
|
|
}
|
|
|
|
joinable_thread(joinable_thread&&) = default;
|
|
joinable_thread& operator=(joinable_thread&&) = default;
|
|
|
|
~joinable_thread()
|
|
{
|
|
if(this->joinable())
|
|
this->join();
|
|
}
|
|
};
|
|
|
|
inline unsigned int get_available_cpu_cores()
|
|
{
|
|
#if defined(__linux__)
|
|
cpu_set_t cpu_set;
|
|
if(sched_getaffinity(0, sizeof(cpu_set_t), &cpu_set) == 0)
|
|
{
|
|
unsigned int cpu_count = CPU_COUNT(&cpu_set);
|
|
if(cpu_count > 0)
|
|
return cpu_count;
|
|
}
|
|
#endif
|
|
// Fallback if sched_getaffinity unavailable or fails
|
|
return std::thread::hardware_concurrency();
|
|
}
|
|
|
|
class cpu_core_guard
|
|
{
|
|
#if defined(__linux__)
|
|
cpu_set_t original_cpu_set_;
|
|
|
|
public:
|
|
cpu_core_guard(unsigned int num_cores) : original_cpu_set_()
|
|
{
|
|
// save original cpu set
|
|
sched_getaffinity(0, sizeof(cpu_set_t), &original_cpu_set_);
|
|
|
|
// set new cpu set
|
|
cpu_set_t new_cpu_set;
|
|
CPU_ZERO(&new_cpu_set);
|
|
for(unsigned int i = 0; i < num_cores; ++i)
|
|
{
|
|
#ifdef __clang__
|
|
#pragma clang diagnostic push
|
|
#pragma clang diagnostic ignored "-Wold-style-cast"
|
|
#endif
|
|
CPU_SET(i, &new_cpu_set); // NOLINT(old-style-cast)
|
|
#ifdef __clang__
|
|
#pragma clang diagnostic pop
|
|
#endif
|
|
}
|
|
sched_setaffinity(0, sizeof(cpu_set_t), &new_cpu_set);
|
|
}
|
|
~cpu_core_guard()
|
|
{
|
|
// restore original cpu set
|
|
sched_setaffinity(0, sizeof(cpu_set_t), &original_cpu_set_);
|
|
}
|
|
#endif
|
|
};
|
|
} // namespace ck_tile
|