P4 to Git Change 1131897 by wchau@wchau_WINDOWS7_OCL on 2015/03/18 10:50:41

ECR #399840 - OpenCL Runtime HW Debug support development -  add support to the VI asics &  support the use case of debug registeration in a pre-dispatch callback function

	** Cross branch check-in with CL1131894

Affected files ...

... //depot/stg/opencl/drivers/opencl/api/opencl/amdocl/cl_debugger_amd.cpp#7 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/gpu/gpudebugmanager.cpp#9 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/gpu/gpudevice.cpp#501 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/gpu/gpudevice.hpp#139 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/gpu/gputrap.hpp#2 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/gpu/gpuvirtual.cpp#355 edit
Этот коммит содержится в:
foreman
2015-03-18 11:26:04 -04:00
родитель 3da2bd1161
Коммит 95596795fc
5 изменённых файлов: 105 добавлений и 63 удалений
+19 -11
Просмотреть файл
@@ -97,8 +97,11 @@ GpuDebugManager::executePreDispatchCallBack(void* aqlPacket,
preDispatchCallBackArgs_);
}
// Copy the various info set by the debugger/profiler to the tool info structure
setupTrapInformation(info);
// setup the trap handler information only if the debugger has been registered
if (isRegistered()) {
// Copy the various info set by the debugger/profiler to the tool info structure
setupTrapInformation(info);
}
}
void
@@ -234,12 +237,6 @@ DebugEvent
GpuDebugManager::createDebugEvent(
const bool autoReset)
{
if (!isRegistered()) {
LogError("debugmanager: Failed to flush cache - hw debug is not available");
return 0;
}
// create the event object
osEventHandle shaderEvent = osEventCreate(!autoReset);
@@ -348,8 +345,19 @@ GpuDebugManager::setGlobalMemory(
cl_int
GpuDebugManager::createRuntimeTrapHandler()
{
uint32_t codeSize = sizeof(RuntimeTrapCode);
uint32_t numCodes = sizeof(RuntimeTrapCode) / sizeof(RuntimeTrapCode[0]);
size_t codeSize = 0;
const uint32_t* rtTrapCode = NULL;
if (device()->settings().viPlus_) {
codeSize = sizeof(RuntimeTrapCodeVi);
rtTrapCode = RuntimeTrapCodeVi;
}
else {
codeSize = sizeof(RuntimeTrapCode);
rtTrapCode = RuntimeTrapCode;
}
uint32_t numCodes = codeSize / sizeof(uint32_t);
// Handle TMA corruption hw bug workaround -
// The trap handler buffer has extra 256 bytes allocated, the TMA address
@@ -389,7 +397,7 @@ GpuDebugManager::createRuntimeTrapHandler()
// save the trap handler code
uint32_t* trapHandlerPtr = (uint32_t*)(tbaAddress + TbaStartOffset);
for (uint32_t i = 0; i < numCodes; i++) {
trapHandlerPtr[i] = RuntimeTrapCode[i];
trapHandlerPtr[i] = rtTrapCode[i];
}
rtTBA->unmap(NULL);
+9 -10
Просмотреть файл
@@ -418,6 +418,10 @@ Device::Device()
Device::~Device()
{
// remove the HW debug manager
delete hwDebugMgr_;
hwDebugMgr_ = NULL;
CondLog(vaCacheList_ == NULL ||
(vaCacheList_->size() != 0), "Application didn't unmap all host memory!");
@@ -969,6 +973,11 @@ Device::create(CALuint ordinal, CALuint numOfDevices)
return false;
}
// create the HW debug manager if needed
if (settings().enableHwDebug_) {
hwDebugMgr_ = new GpuDebugManager(this);
}
return true;
}
@@ -2669,7 +2678,6 @@ Device::SrdManager::fillResourceList(std::vector<const Resource*>& memList)
cl_int
Device::hwDebugManagerInit(amd::Context *context, uintptr_t messageStorage)
{
hwDebugMgr_ = new GpuDebugManager(this);
cl_int status = hwDebugMgr_->registerDebugger(context, messageStorage);
if (CL_SUCCESS != status) {
@@ -2680,13 +2688,4 @@ Device::hwDebugManagerInit(amd::Context *context, uintptr_t messageStorage)
return status;
}
void
Device::hwDebugManagerRemove()
{
hwDebugMgr_->unregisterDebugger();
delete hwDebugMgr_;
hwDebugMgr_ = NULL;
}
} // namespace gpu
-3
Просмотреть файл
@@ -563,9 +563,6 @@ public:
//! Initial the Hardware Debug Manager
cl_int hwDebugManagerInit(amd::Context *context, uintptr_t messageStorage);
//! Remove the Hardware Debug Manager
void hwDebugManagerRemove();
private:
//! Disable copy constructor
Device(const Device&);
+76 -38
Просмотреть файл
@@ -7,7 +7,7 @@
*******************************************************************************
shader main
asic(TAHITI)
asic(TAHITI) // for SI/CI or asic(VI) for VI
type(CS)
// clear wave exception state
@@ -23,9 +23,9 @@ shader main
s_mov_b32 ttmp8, tba_lo
s_and_b32 ttmp9, tba_hi, 0xffff
// 0x68=104 bytes, which is the size of the buffer to
// 0x100=256 bytes, which is the size of the buffer to
// store all the level 2 trap handler info
s_or_b32 ttmp9, ttmp9, 0x06800000
s_or_b32 ttmp9, ttmp9, 0x01000000
s_mov_b32 ttmp10, 0x00002000
s_mov_b32 ttmp11, 0x18024fac
@@ -35,10 +35,10 @@ shader main
// Backup the s0 since ttmp registers cannot be target of
// buffer read instruction
s_mov_b32 ttmp7, s0
s_buffer_load_dword s0, ttmp8, 0
s_buffer_load_dword s0, ttmp8, 0x0 // VI: offset=0x0 (bytes)
s_waitcnt 0
s_mov_b32 tma_lo, s0
s_buffer_load_dword s0, ttmp8, 1
s_buffer_load_dword s0, ttmp8, 0x1 // VI: offset=0x4 (bytes)
s_waitcnt 0
s_mov_b32 tma_hi, s0
s_mov_b32 s0, ttmp7
@@ -64,22 +64,22 @@ shader main
// setup the TMA for the level-two trap handler
// level-two TMA saved in tma_hi, tma_lo
s_mov_b32 ttmp3, s0
s_buffer_load_dword s0, ttmp8, 0x2
s_buffer_load_dword s0, ttmp8, 0x2 // VI: offset=0x8 (bytes)
s_waitcnt 0x0000
s_mov_b32 tma_lo, s0
s_buffer_load_dword s0, ttmp8, 0x3
s_buffer_load_dword s0, ttmp8, 0x3 // VI: offset=0xc (bytes)
s_waitcnt 0x0000
s_mov_b32 tma_hi, s0
//===================================================
// setup the TBA for the level-two trap handler
// level-two TBA saved in ttmp9, ttmp8
s_buffer_load_dword s0, ttmp8, 0x0
s_buffer_load_dword s0, ttmp8, 0x0 // VI: offset=0x0 (bytes)
s_waitcnt 0x0000
s_mov_b32 ttmp2, s0
s_buffer_load_dword s0, ttmp8, 0x1
s_buffer_load_dword s0, ttmp8, 0x1 // VI: offset=0x4 (bytes)
s_waitcnt 0x0000
//swap the values of s0 and ttmp3 without using other registers
@@ -115,35 +115,73 @@ end
*******************************************************************************/
/// shader codes with "asic(TAHITI)" instruction
static const uint32_t RuntimeTrapCode [] = {
0x7e008200, 0xbf8c0000,
0xbef8036c, 0x8779ff6d,
0x0000ffff, 0x8879ff79,
0x06800000, 0xbefa03ff,
0x00002000, 0xbefb03ff,
0x18024fac, 0x80f8ff78,
0x00000100, 0xbef70300,
0xc2007900, 0xbf8c0000,
0xbeee0300, 0xc2007901,
0xbf8c0000, 0xbeef0300,
0xbe800377, 0xbef60398,
0x8078766e, 0x8779ff6f,
0x0000ffff, 0x8879ff79,
0x00680000, 0xbefa03ff,
0x00002000, 0xbefb03ff,
0x18024fac, 0xbef6036e,
0xbef7036f, 0xbef30300,
0xc2007902, 0xbf8c0000,
0xbeee0300, 0xc2007903,
0xbf8c0000, 0xbeef0300,
0xc2007900, 0xbf8c0000,
0xbef20300, 0xc2007901,
0xbf8c0000, 0x89737300,
0x89007300, 0x89737300,
0xbef80372, 0xbef90373,
0xbef21f00, 0x80728872,
0xbe802078, 0xbeef0377,
0xbeee0376, 0x8771ff71,
0x0000ffff, 0xbe802270
0x7e008200, 0xbf8c0000,
0xbef8036c, 0x8779ff6d,
0x0000ffff, 0x8879ff79,
0x01000000, 0xbefa03ff,
0x00002000, 0xbefb03ff,
0x18024fac, 0x80f8ff78,
0x00000100, 0xbef70300,
0xc2007900, 0xbf8c0000,
0xbeee0300, 0xc2007901,
0xbf8c0000, 0xbeef0300,
0xbe800377, 0xbef60398,
0x8078766e, 0x8779ff6f,
0x0000ffff, 0x8879ff79,
0x00680000, 0xbefa03ff,
0x00002000, 0xbefb03ff,
0x18024fac, 0xbef6036e,
0xbef7036f, 0xbef30300,
0xc2007902, 0xbf8c0000,
0xbeee0300, 0xc2007903,
0xbf8c0000, 0xbeef0300,
0xc2007900, 0xbf8c0000,
0xbef20300, 0xc2007901,
0xbf8c0000, 0x89737300,
0x89007300, 0x89737300,
0xbef80372, 0xbef90373,
0xbef21f00, 0x80728872,
0xbe802078, 0xbeef0377,
0xbeee0376, 0x8771ff71,
0x0000ffff, 0xbe802270
};
/// shader codes with "asic(VI)" instruction
static const uint32_t RuntimeTrapCodeVi [] = {
0x7e006a00, 0xbf8c0000,
0xbef8006c, 0x8679ff6d,
0x0000ffff, 0x8779ff79,
0x01000000, 0xbefa00ff,
0x00002000, 0xbefb00ff,
0x18024fac, 0x80f8ff78,
0x00000100, 0xbef70000,
0xc022003c, 0x00000000,
0xbf8c0000, 0xbeee0000,
0xc022003c, 0x00000004,
0xbf8c0000, 0xbeef0000,
0xbe800077, 0xbef60098,
0x8078766e, 0x8679ff6f,
0x0000ffff, 0x8779ff79,
0x00680000, 0xbefa00ff,
0x00002000, 0xbefb00ff,
0x18024fac, 0xbef6006e,
0xbef7006f, 0xbef30000,
0xc022003c, 0x00000008,
0xbf8c0000, 0xbeee0000,
0xc022003c, 0x0000000c,
0xbf8c0000, 0xbeef0000,
0xc022003c, 0x00000000,
0xbf8c0000, 0xbef20000,
0xc022003c, 0x00000004,
0xbf8c0000, 0x88737300,
0x88007300, 0x88737300,
0xbef80072, 0xbef90073,
0xbef21c00, 0x80728872,
0xbe801d78, 0xbeef0077,
0xbeee0076, 0x8671ff71,
0x0000ffff, 0xbe801f70
};
+1 -1
Просмотреть файл
@@ -3516,7 +3516,7 @@ VirtualGPU::buildKernelInfo(const HSAILKernel& hsaKernel,
// set kernel info for HW debug and call the callback function
if (NULL != dbgManager->preDispatchCallBackFunc()) {
DebugToolInfo dbgSetting;
DebugToolInfo dbgSetting = {0};
dbgSetting.scratchAddress_ = kernelInfo.scratchBufAddr;
dbgSetting.scratchSize_ = kernelInfo.scratchBufferSizeInBytes;
dbgSetting.globalAddress_ = kernelInfo.heapBufAddr;