From: Junyan He <[email protected]> We need to build a map between logical workgroup thread and real hw thread. This curbe will hold the logical workgroup thread ID when it is executed on some HW thread.
Signed-off-by: Junyan He <[email protected]> --- backend/src/backend/program.h | 1 + backend/src/ir/instruction.cpp | 2 +- backend/src/ir/profile.cpp | 4 +++- backend/src/ir/profile.hpp | 3 ++- 4 files changed, 7 insertions(+), 3 deletions(-) diff --git a/backend/src/backend/program.h b/backend/src/backend/program.h index f948a6b..fd8fd6e 100644 --- a/backend/src/backend/program.h +++ b/backend/src/backend/program.h @@ -105,6 +105,7 @@ enum gbe_curbe_type { GBE_CURBE_PROFILING_TIMESTAMP2, GBE_CURBE_PROFILING_TIMESTAMP3, GBE_CURBE_PROFILING_TIMESTAMP4, + GBE_CURBE_THREAD_ID, GBE_GEN_REG, }; diff --git a/backend/src/ir/instruction.cpp b/backend/src/ir/instruction.cpp index 33be93a..865568e 100644 --- a/backend/src/ir/instruction.cpp +++ b/backend/src/ir/instruction.cpp @@ -1430,7 +1430,7 @@ namespace ir { case WORKGROUP_OP_EXCLUSIVE_ADD: case WORKGROUP_OP_EXCLUSIVE_MIN: case WORKGROUP_OP_EXCLUSIVE_MAX: - if (this->srcNum != 1) { + if (this->srcNum != 3) { whyNot = "Wrong number of source."; return false; } diff --git a/backend/src/ir/profile.cpp b/backend/src/ir/profile.cpp index 75e669d..4e0fc08 100644 --- a/backend/src/ir/profile.cpp +++ b/backend/src/ir/profile.cpp @@ -47,7 +47,8 @@ namespace ir { "profiling_buffer_pointer", "profiling_timestamps0", "profiling_timestamps1", "profiling_timestamps2", "profiling_timestamps3", - "profiling_timestamps4" + "profiling_timestamps4", + "threadid" }; #if GBE_DEBUG @@ -96,6 +97,7 @@ namespace ir { DECL_NEW_REG(FAMILY_DWORD, profilingts2, 0, GBE_CURBE_PROFILING_TIMESTAMP2); DECL_NEW_REG(FAMILY_DWORD, profilingts3, 0, GBE_CURBE_PROFILING_TIMESTAMP3); DECL_NEW_REG(FAMILY_DWORD, profilingts4, 0, GBE_CURBE_PROFILING_TIMESTAMP4); + DECL_NEW_REG(FAMILY_DWORD, threadid, 1, GBE_CURBE_THREAD_ID); } #undef DECL_NEW_REG diff --git a/backend/src/ir/profile.hpp b/backend/src/ir/profile.hpp index e586f44..cc34720 100644 --- a/backend/src/ir/profile.hpp +++ b/backend/src/ir/profile.hpp @@ -77,7 +77,8 @@ namespace ir { static const Register profilingts2 = Register(33); // timestamp for profiling. static const Register profilingts3 = Register(34); // timestamp for profiling. static const Register profilingts4 = Register(35); // timestamp for profiling. - static const uint32_t regNum = 36; // number of special registers + static const Register threadid = Register(36); // the thread id of this thread. + static const uint32_t regNum = 37; // number of special registers extern const char *specialRegMean[]; // special register name. } /* namespace ocl */ -- 1.7.9.5 _______________________________________________ Beignet mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/beignet
