[Beignet] [PATCH 04/21 V3] Backend: Add profiling registers to curbe.

junyan.he at inbox.com junyan.he at inbox.com
Mon Nov 16 15:40:06 PST 2015


From: Junyan He <junyan.he at linux.intel.com>

Add five timestamp reigsters and one pointer register
into curbe. The five timestamp reigsters will hold
all the infomation of profiling timestamps, includes
20 uint timestamps for each point, 1 ulong prolog holding
the start time and and 1 ulong epilog holding the
end time of that kernel. The pointer reigster will hold
the log buffer address.

Signed-off-by: Junyan He <junyan.he at linux.intel.com>
---
 backend/src/backend/program.h |    6 ++++++
 backend/src/ir/profile.cpp    |   12 +++++++++++-
 backend/src/ir/profile.hpp    |    8 +++++++-
 3 files changed, 24 insertions(+), 2 deletions(-)

diff --git a/backend/src/backend/program.h b/backend/src/backend/program.h
index 86b3177..14752ad 100644
--- a/backend/src/backend/program.h
+++ b/backend/src/backend/program.h
@@ -99,6 +99,12 @@ enum gbe_curbe_type {
   GBE_CURBE_BLOCK_IP,
   GBE_CURBE_DW_BLOCK_IP,
   GBE_CURBE_THREAD_NUM,
+  GBE_CURBE_PROFILING_BUF_POINTER,
+  GBE_CURBE_PROFILING_TIMESTAMP0,
+  GBE_CURBE_PROFILING_TIMESTAMP1,
+  GBE_CURBE_PROFILING_TIMESTAMP2,
+  GBE_CURBE_PROFILING_TIMESTAMP3,
+  GBE_CURBE_PROFILING_TIMESTAMP4,
   GBE_GEN_REG,
 };
 
diff --git a/backend/src/ir/profile.cpp b/backend/src/ir/profile.cpp
index 4486863..90b039b 100644
--- a/backend/src/ir/profile.cpp
+++ b/backend/src/ir/profile.cpp
@@ -43,7 +43,11 @@ namespace ir {
         "zero", "one",
         "retVal",
         "printf_buffer_pointer", "printf_index_buffer_pointer",
-        "dwblockip"
+        "dwblockip",
+        "profiling_buffer_pointer",
+        "profiling_timestamps0", "profiling_timestamps1",
+        "profiling_timestamps2", "profiling_timestamps3",
+        "profiling_timestamps4"
     };
 
 #if GBE_DEBUG
@@ -86,6 +90,12 @@ namespace ir {
       DECL_NEW_REG(FAMILY_DWORD, printfbptr, 1, GBE_CURBE_PRINTF_BUF_POINTER);
       DECL_NEW_REG(FAMILY_DWORD, printfiptr, 1, GBE_CURBE_PRINTF_INDEX_POINTER);
       DECL_NEW_REG(FAMILY_DWORD, dwblockip, 0, GBE_CURBE_DW_BLOCK_IP);
+      DECL_NEW_REG(FAMILY_DWORD, profilingbptr, 1, GBE_CURBE_PROFILING_BUF_POINTER);
+      DECL_NEW_REG(FAMILY_DWORD, profilingts0, 0, GBE_CURBE_PROFILING_TIMESTAMP0);
+      DECL_NEW_REG(FAMILY_DWORD, profilingts1, 0, GBE_CURBE_PROFILING_TIMESTAMP1);
+      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);
     }
 #undef DECL_NEW_REG
 
diff --git a/backend/src/ir/profile.hpp b/backend/src/ir/profile.hpp
index a8445c4..e586f44 100644
--- a/backend/src/ir/profile.hpp
+++ b/backend/src/ir/profile.hpp
@@ -71,7 +71,13 @@ namespace ir {
     static const Register printfbptr = Register(27); // printf buffer address .
     static const Register printfiptr = Register(28); // printf index buffer address.
     static const Register dwblockip = Register(29);  // blockip
-    static const uint32_t regNum = 30;             // number of special registers
+    static const Register profilingbptr = Register(30); // buffer addr for profiling.
+    static const Register profilingts0 = Register(31); // timestamp for profiling.
+    static const Register profilingts1 = Register(32); // timestamp for profiling.
+    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
     extern const char *specialRegMean[];           // special register name.
   } /* namespace ocl */
 
-- 
1.7.9.5





More information about the Beignet mailing list