This class is instantiated once in rtl.cpp before hsa_init is
called. The hsa_signal_create call therefore fails leaving the pool empty.
This signal pool is a legacy from ATMI where it was constructed after hsa_init.
Moving the state into the rtl.cpp global class disabled the initial populating
of the pool without noticeably changing performance. Just rechecked with a fix
that allocates the signals after hsa_init and that also doesn't noticeably
change performance.
This patch therefore drops the initialisation. Only change from main is to
drop a DEBUG_PRINT statement that would say the pool initial size is zero.
Reviewed By: jdoerfert
Differential Revision: https://reviews.llvm.org/
D106515
} // namespace core
struct SignalPoolT {
- SignalPoolT() {
- // If no signals are created, and none can be created later,
- // will ultimately fail at pop()
-
- unsigned N = 1024; // default max pool size from atmi
- for (unsigned i = 0; i < N; i++) {
- hsa_signal_t new_signal;
- hsa_status_t err = hsa_signal_create(0, 0, NULL, &new_signal);
- if (err != HSA_STATUS_SUCCESS) {
- break;
- }
- state.push(new_signal);
- }
- DEBUG_PRINT("Signal Pool Initial Size: %lu\n", state.size());
- }
+ SignalPoolT() {}
SignalPoolT(const SignalPoolT &) = delete;
SignalPoolT(SignalPoolT &&) = delete;
~SignalPoolT() {