P4 to Git Change 1599194 by gandryey@gera-w8 on 2018/08/28 18:38:33
SWDEV-79445 - OCL generic changes and code clean-up - Move printf setup in the kernels to the abstraction layer Affected files ... ... //depot/stg/opencl/drivers/opencl/runtime/device/devkernel.cpp#2 edit ... //depot/stg/opencl/drivers/opencl/runtime/device/devkernel.hpp#2 edit ... //depot/stg/opencl/drivers/opencl/runtime/device/gpu/gpukernel.cpp#329 edit ... //depot/stg/opencl/drivers/opencl/runtime/device/gpu/gpukernel.hpp#131 edit ... //depot/stg/opencl/drivers/opencl/runtime/device/gpu/gpuprintf.cpp#47 edit ... //depot/stg/opencl/drivers/opencl/runtime/device/gpu/gpuprintf.hpp#16 edit ... //depot/stg/opencl/drivers/opencl/runtime/device/gpu/gpuprogram.cpp#238 edit ... //depot/stg/opencl/drivers/opencl/runtime/device/gpu/gpuprogram.hpp#71 edit ... //depot/stg/opencl/drivers/opencl/runtime/device/pal/palkernel.cpp#62 edit ... //depot/stg/opencl/drivers/opencl/runtime/device/pal/palkernel.hpp#21 edit ... //depot/stg/opencl/drivers/opencl/runtime/device/pal/palprintf.cpp#10 edit ... //depot/stg/opencl/drivers/opencl/runtime/device/pal/palprintf.hpp#4 edit ... //depot/stg/opencl/drivers/opencl/runtime/device/rocm/rockernel.cpp#41 edit ... //depot/stg/opencl/drivers/opencl/runtime/device/rocm/rockernel.hpp#25 edit ... //depot/stg/opencl/drivers/opencl/runtime/device/rocm/rocprintf.cpp#11 edit ... //depot/stg/opencl/drivers/opencl/runtime/device/rocm/rocprintf.hpp#6 edit
This commit is contained in:
@@ -3045,74 +3045,6 @@ void HSAILKernel::initHsailArgs(const aclArgData* aclArg) {
|
||||
}
|
||||
}
|
||||
|
||||
void HSAILKernel::initPrintf(const aclPrintfFmt* aclPrintf) {
|
||||
PrintfInfo info;
|
||||
uint index = 0;
|
||||
for (; aclPrintf->struct_size != 0; aclPrintf++) {
|
||||
index = aclPrintf->ID;
|
||||
if (printf_.size() <= index) {
|
||||
printf_.resize(index + 1);
|
||||
}
|
||||
std::string pfmt = aclPrintf->fmtStr;
|
||||
info.fmtString_.clear();
|
||||
size_t pos = 0;
|
||||
bool need_nl = true;
|
||||
for (size_t pos = 0; pos < pfmt.size(); ++pos) {
|
||||
char symbol = pfmt[pos];
|
||||
need_nl = true;
|
||||
if (symbol == '\\') {
|
||||
// Rest of the C escape sequences (e.g. \') are handled correctly
|
||||
// by the MDParser, we are not sure exactly how!
|
||||
switch (pfmt[pos + 1]) {
|
||||
case 'a':
|
||||
pos++;
|
||||
symbol = '\a';
|
||||
break;
|
||||
case 'b':
|
||||
pos++;
|
||||
symbol = '\b';
|
||||
break;
|
||||
case 'f':
|
||||
pos++;
|
||||
symbol = '\f';
|
||||
break;
|
||||
case 'n':
|
||||
pos++;
|
||||
symbol = '\n';
|
||||
need_nl = false;
|
||||
break;
|
||||
case 'r':
|
||||
pos++;
|
||||
symbol = '\r';
|
||||
break;
|
||||
case 'v':
|
||||
pos++;
|
||||
symbol = '\v';
|
||||
break;
|
||||
case '7':
|
||||
if (pfmt[pos + 2] == '2') {
|
||||
pos += 2;
|
||||
symbol = '\72';
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
info.fmtString_.push_back(symbol);
|
||||
}
|
||||
if (need_nl) {
|
||||
info.fmtString_ += "\n";
|
||||
}
|
||||
uint32_t* tmp_ptr = const_cast<uint32_t*>(aclPrintf->argSizes);
|
||||
for (uint i = 0; i < aclPrintf->numSizes; i++, tmp_ptr++) {
|
||||
info.arguments_.push_back(*tmp_ptr);
|
||||
}
|
||||
printf_[index] = info;
|
||||
info.arguments_.clear();
|
||||
}
|
||||
}
|
||||
|
||||
HSAILKernel::HSAILKernel(std::string name, HSAILProgram* prog, std::string compileOptions,
|
||||
uint extraArgsNum)
|
||||
: device::Kernel(name),
|
||||
@@ -3233,7 +3165,7 @@ bool HSAILKernel::init(amd::hsa::loader::Symbol* sym, bool finalize) {
|
||||
}
|
||||
|
||||
// Set the PrintfList
|
||||
initPrintf(reinterpret_cast<aclPrintfFmt*>(aclPrintfList));
|
||||
InitPrintf(reinterpret_cast<aclPrintfFmt*>(aclPrintfList));
|
||||
delete[] aclPrintfList;
|
||||
}
|
||||
|
||||
|
||||
@@ -833,9 +833,6 @@ class HSAILKernel : public device::Kernel {
|
||||
std::vector<const Memory*>& memList //!< Memory list for GSL/VidMM handles
|
||||
) const;
|
||||
|
||||
//! Returns pritnf info array
|
||||
const std::vector<PrintfInfo>& printfInfo() const { return printf_; }
|
||||
|
||||
//! Returns the kernel index in the program
|
||||
uint index() const { return index_; }
|
||||
|
||||
@@ -870,16 +867,11 @@ class HSAILKernel : public device::Kernel {
|
||||
void initHsailArgs(const aclArgData* aclArg //!< List of ACL arguments
|
||||
);
|
||||
|
||||
//! Initializes Hsail Printf metadata and info
|
||||
void initPrintf(const aclPrintfFmt* aclPrintf //!< List of ACL printfs
|
||||
);
|
||||
|
||||
std::vector<Argument*> arguments_; //!< Vector list of HSAIL Arguments
|
||||
std::string compileOptions_; //!< compile used for finalizing this kernel
|
||||
amd_kernel_code_t* cpuAqlCode_; //!< AQL kernel code on CPU
|
||||
const NullDevice& dev_; //!< GPU device object
|
||||
const HSAILProgram& prog_; //!< Reference to the parent program
|
||||
std::vector<PrintfInfo> printf_; //!< Format strings for GPU printf support
|
||||
uint index_; //!< Kernel index in the program
|
||||
|
||||
gpu::Memory* code_; //!< Memory object with ISA code
|
||||
|
||||
@@ -73,7 +73,7 @@ bool PrintfDbg::init(VirtualGPU& gpu, bool printfEnabled, const amd::NDRange& si
|
||||
}
|
||||
|
||||
bool PrintfDbg::output(VirtualGPU& gpu, bool printfEnabled, const amd::NDRange& size,
|
||||
const std::vector<PrintfInfo>& printfInfo) {
|
||||
const std::vector<device::PrintfInfo>& printfInfo) {
|
||||
// Are we expected to generate debug output?
|
||||
if (printfEnabled && !printfInfo.empty()) {
|
||||
uint32_t* workitemData;
|
||||
@@ -116,7 +116,7 @@ bool PrintfDbg::output(VirtualGPU& gpu, bool printfEnabled, const amd::NDRange&
|
||||
return false;
|
||||
}
|
||||
// Get the PrintfDbg info
|
||||
const PrintfInfo& info = printfInfo[workitemData[z++]];
|
||||
const device::PrintfInfo& info = printfInfo[workitemData[z++]];
|
||||
// There's something in this buffer
|
||||
outputDbgBuffer(info, workitemData, z);
|
||||
}
|
||||
@@ -340,7 +340,7 @@ size_t PrintfDbg::outputArgument(const std::string& fmt, bool printFloat, size_t
|
||||
return copiedBytes;
|
||||
}
|
||||
|
||||
void PrintfDbg::outputDbgBuffer(const PrintfInfo& info, const uint32_t* workitemData,
|
||||
void PrintfDbg::outputDbgBuffer(const device::PrintfInfo& info, const uint32_t* workitemData,
|
||||
size_t& i) const {
|
||||
static const char* specifiers = "cdieEfgGaosuxXp";
|
||||
static const char* modifiers = "hl";
|
||||
@@ -558,7 +558,7 @@ bool PrintfDbgHSA::init(VirtualGPU& gpu, bool printfEnabled) {
|
||||
}
|
||||
|
||||
bool PrintfDbgHSA::output(VirtualGPU& gpu, bool printfEnabled,
|
||||
const std::vector<PrintfInfo>& printfInfo) {
|
||||
const std::vector<device::PrintfInfo>& printfInfo) {
|
||||
if (printfEnabled) {
|
||||
uint32_t offsetSize = 0;
|
||||
xferBufRead_ = &(dev().xferRead().acquire());
|
||||
@@ -610,7 +610,7 @@ bool PrintfDbgHSA::output(VirtualGPU& gpu, bool printfEnabled,
|
||||
LogError("Couldn't find the reported PrintfID!");
|
||||
return false;
|
||||
}
|
||||
const PrintfInfo& info = printfInfo[(*dbgBufferPtr)];
|
||||
const device::PrintfInfo& info = printfInfo[(*dbgBufferPtr)];
|
||||
sb += sizeof(uint32_t);
|
||||
for (const auto& it : info.arguments_) {
|
||||
sb += it;
|
||||
|
||||
@@ -30,12 +30,6 @@
|
||||
//! GPU Device Implementation
|
||||
namespace gpu {
|
||||
|
||||
//! Printf info structure
|
||||
struct PrintfInfo {
|
||||
std::string fmtString_; //!< formated string for printf
|
||||
std::vector<uint> arguments_; //!< passed arguments to the printf() call
|
||||
};
|
||||
|
||||
class Kernel;
|
||||
class VirtualGPU;
|
||||
class Memory;
|
||||
@@ -64,7 +58,7 @@ class PrintfDbg : public amd::HeapObject {
|
||||
bool output(VirtualGPU& gpu, //!< Virtual GPU object
|
||||
bool printfEnabled, //!< checks for printf
|
||||
const amd::NDRange& size, //!< Kernel's workload
|
||||
const std::vector<PrintfInfo>& printfInfo //!< printf info
|
||||
const std::vector<device::PrintfInfo>& printfInfo //!< printf info
|
||||
);
|
||||
|
||||
//! Returns the debug buffer offset
|
||||
@@ -111,7 +105,7 @@ class PrintfDbg : public amd::HeapObject {
|
||||
) const;
|
||||
|
||||
//! Displays the PrintfDbg
|
||||
void outputDbgBuffer(const PrintfInfo& info, //!< printf info
|
||||
void outputDbgBuffer(const device::PrintfInfo& info,//!< printf info
|
||||
const uint32_t* workitemData, //!< The PrintfDbg dump buffer
|
||||
size_t& i //!< index to the data in the buffer
|
||||
) const;
|
||||
@@ -156,7 +150,7 @@ class PrintfDbgHSA : public PrintfDbg {
|
||||
//! Prints the kernel's debug informaiton from the buffer
|
||||
bool output(VirtualGPU& gpu, //!< Virtual GPU object
|
||||
bool printfEnabled, //!< checks for printf
|
||||
const std::vector<PrintfInfo>& printfInfo //!< printf info
|
||||
const std::vector<device::PrintfInfo>& printfInfo //!< printf info
|
||||
);
|
||||
|
||||
private:
|
||||
|
||||
@@ -1157,7 +1157,7 @@ bool NullProgram::parseFuncMetadata(const std::string& source, size_t posBegin,
|
||||
} else if (ArgState[k].type_ == KernelArg::PrintfFormatStr) {
|
||||
uint tmp;
|
||||
uint arguments;
|
||||
PrintfInfo info;
|
||||
device::PrintfInfo info;
|
||||
|
||||
// Read index
|
||||
if (!getuint(source, &pos, &index)) {
|
||||
|
||||
@@ -260,7 +260,7 @@ class NullProgram : public device::Program {
|
||||
const char* ilKernelName);
|
||||
|
||||
protected:
|
||||
std::vector<PrintfInfo> printf_; //!< Format strings for GPU printf support
|
||||
std::vector<device::PrintfInfo> printf_; //!< Format strings for GPU printf support
|
||||
std::vector<uint> glbCb_; //!< Global constant buffers
|
||||
|
||||
virtual bool isElf(const char* bin) const { return amd::isElfMagic(bin); }
|
||||
@@ -328,7 +328,7 @@ class Program : public NullProgram {
|
||||
const HwConstBuffers& glbHwCb() const { return constBufs_; }
|
||||
|
||||
//! Returns pritnf info array
|
||||
const std::vector<PrintfInfo>& printfInfo() const { return printf_; }
|
||||
const std::vector<device::PrintfInfo>& printfInfo() const { return printf_; }
|
||||
|
||||
//! Return a typecasted GPU device
|
||||
gpu::Device& dev() { return const_cast<gpu::Device&>(static_cast<const gpu::Device&>(device())); }
|
||||
|
||||
Reference in New Issue
Block a user