P4 to Git Change 1170297 by nhaustov@nhaustov_hsa on 2015/07/14 05:36:10

ECR #333753 - ORCA RT/Compiler Lib: HSA Code Object/RT independent loader introducing/integration into OpenCL.

	Changes by Evgeniy Mankov.

	       Purpose:
	       Use the same Finalizer & loader for both HSA & ORCA RT.
	       AMDIL path is not affected.

	       Changes:
	       1. The whole BRIG is finalized now instead of per kernel finalization (both in gpuprogram & hsail_be).
	       2. HSALoader is changed in order to work with CodeObject and new HSA Loader's API <96> Context. Now it is in ORCA<92>s gpuprogram instead of Compiler Lib.
	       3. brig_loader.cpp is removed from compiler lib, as well as __aclHSALoader function exports from the whole stack.
	       4. BIF .text section now contains the whole finalized HSA CodeObject instead of separate symbols for finalized kernels.
	       5. ORCA RT now works directly with amd_kernel_code_t and doesn't need any SC metadata anymore.
	       6. aoc2 is supplemented with fake offline loader correspondingly.
	       7. amdocl/complib make sytem changes.
	       8. test_driver.pl update.

	       ToDo:
	       1. Implement disassemble() & BuildLog() functions to support ISA dumping & SC error handling (Konstantin).
	       2. Global variables initialization by pragma reference (Konstantin). Test to verify: test_basic progvar_prog_scope_init.
	       3. Code Object without kernels support (Nikolay - ready). Test to verify: test_generic_address_space.exe library_function

	       testing: windows smoke, pre check-in, ocl conformance 2.0, ocl SDK 2.9

	       Reviewers: Nikolay Haustov, German Andryeyev

Affected files ...

... //depot/stg/opencl/drivers/opencl/api/opencl/amdocl/amdocl.def.in#13 edit
... //depot/stg/opencl/drivers/opencl/api/opencl/amdocl/amdocl.map.in#15 edit
... //depot/stg/opencl/drivers/opencl/api/opencl/amdocl/build/Makefile.api#116 edit
... //depot/stg/opencl/drivers/opencl/compiler/legacy-lib/amdoclcl.def.in#2 edit
... //depot/stg/opencl/drivers/opencl/compiler/legacy-lib/amdoclcl.map.in#2 edit
... //depot/stg/opencl/drivers/opencl/compiler/lib/amdoclcl.def.in#12 edit
... //depot/stg/opencl/drivers/opencl/compiler/lib/amdoclcl.map.in#11 edit
... //depot/stg/opencl/drivers/opencl/compiler/lib/backends/common/v0_8/if_acl.cpp#70 edit
... //depot/stg/opencl/drivers/opencl/compiler/lib/backends/gpu/build/Makefile.gpu#32 edit
... //depot/stg/opencl/drivers/opencl/compiler/lib/backends/gpu/hsail_be.cpp#44 edit
... //depot/stg/opencl/drivers/opencl/compiler/lib/build/Makefile.complib#85 edit
... //depot/stg/opencl/drivers/opencl/compiler/lib/utils/v0_8/libUtils.cpp#9 edit
... //depot/stg/opencl/drivers/opencl/compiler/lib/utils/v0_8/libUtils.h#18 edit
... //depot/stg/opencl/drivers/opencl/compiler/tools/aoc2/aoc2.cpp#70 edit
... //depot/stg/opencl/drivers/opencl/compiler/tools/aoc2/build/Makefile.aoc2#24 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/device.hpp#248 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/gpu/gpudefs.hpp#121 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/gpu/gpukernel.cpp#288 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/gpu/gpukernel.hpp#112 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/gpu/gpuprogram.cpp#194 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/gpu/gpuprogram.hpp#59 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/gpu/gpuscsi.cpp#33 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/gpu/gpuvirtual.cpp#368 edit
... //depot/stg/opencl/drivers/opencl/tests/hsa/bin/test_driver.pl#12 edit
This commit is contained in:
foreman
2015-07-14 17:08:54 -04:00
parent f5a5e0b375
commit 8cc3f47661
13 changed files with 494 additions and 215 deletions
+127 -3
View File
@@ -7,11 +7,18 @@
#include "device/gpu/gpukernel.hpp"
#include "device/gpu/gpubinary.hpp"
#include "amd_hsa_loader.hpp"
namespace amd {
namespace option {
class Options;
} // option
namespace hsa {
namespace loader {
class Executable;
class Context;
} // loader
} // hsa
} // amd
//! \namespace gpu GPU Device Implementation
@@ -369,6 +376,121 @@ private:
gpu::Memory* glbData_; //!< Global data store
};
using namespace amd::hsa::loader;
class HSAILProgram;
class ORCAHSALoaderContext final: public Context {
public:
ORCAHSALoaderContext(HSAILProgram* program): program_(program) {}
virtual ~ORCAHSALoaderContext() {}
hsa_isa_t IsaFromName(const char *name) override;
bool IsaSupportedByAgent(hsa_agent_t agent, hsa_isa_t isa) override;
void* SegmentAlloc(amdgpu_hsa_elf_segment_t segment,
hsa_agent_t agent, size_t size, size_t align, bool zero) override;
bool SegmentCopy(amdgpu_hsa_elf_segment_t segment,
hsa_agent_t agent, void* dst, size_t offset,
const void* src, size_t size) override;
void SegmentFree(amdgpu_hsa_elf_segment_t segment,
hsa_agent_t agent, void* seg, size_t size = 0) override;
void* SegmentAddress(amdgpu_hsa_elf_segment_t segment,
hsa_agent_t agent, void* seg, size_t offset) override;
bool ImageExtensionSupported() override { return false; }
hsa_status_t ImageCreate(
hsa_agent_t agent,
hsa_access_permission_t image_permission,
const hsa_ext_image_descriptor_t *image_descriptor,
const void *image_data,
hsa_ext_image_t *image_handle) override {
// not supported
assert(false);
return HSA_STATUS_ERROR;
}
hsa_status_t ImageDestroy(
hsa_agent_t agent, hsa_ext_image_t image_handle) override {
// not supported
assert(false);
return HSA_STATUS_ERROR;
}
hsa_status_t SamplerCreate(
hsa_agent_t agent,
const hsa_ext_sampler_descriptor_t *sampler_descriptor,
hsa_ext_sampler_t *sampler_handle) override;
//! All samplers are owned by HSAILProgram and are deleted in its destructor.
hsa_status_t SamplerDestroy(
hsa_agent_t agent, hsa_ext_sampler_t sampler_handle) override;
private:
void* AgentGlobalAlloc(
hsa_agent_t agent, size_t size, size_t align, bool zero) {
return GpuMemAlloc(size, align, zero);
}
bool AgentGlobalCopy(void *dst, size_t offset, const void *src, size_t size) {
return GpuMemCopy(dst, offset, src, size);
}
void AgentGlobalFree(void *ptr, size_t size) {
GpuMemFree(ptr, size);
}
void* KernelCodeAlloc(
hsa_agent_t agent, size_t size, size_t align, bool zero) {
return CpuMemAlloc(size, align, zero);
}
bool KernelCodeCopy(void *dst, size_t offset, const void *src, size_t size) {
return CpuMemCopy(dst, offset, src, size);
}
void KernelCodeFree(void *ptr, size_t size) {
CpuMemFree(ptr, size);
}
void* CpuMemAlloc(size_t size, size_t align, bool zero);
bool CpuMemCopy(void *dst, size_t offset, const void* src, size_t size);
void CpuMemFree(void *ptr, size_t size) {
amd::Os::alignedFree(ptr);
}
void* GpuMemAlloc(size_t size, size_t align, bool zero);
bool GpuMemCopy(void *dst, size_t offset, const void *src, size_t size);
void GpuMemFree(void *ptr, size_t size = 0) {
delete reinterpret_cast<gpu::Memory*>(ptr);
}
ORCAHSALoaderContext(const ORCAHSALoaderContext &c);
ORCAHSALoaderContext& operator=(const ORCAHSALoaderContext &c);
enum gfx_handle {
gfx700 = 700,
gfx701 = 701,
gfx702 = 702,
gfx800 = 800,
gfx801 = 801,
gfx810 = 810,
gfx900 = 900
};
gpu::HSAILProgram* program_;
};
//! \class HSAIL program
class HSAILProgram : public device::Program
@@ -385,9 +507,9 @@ public:
aclBinary* binaryElf() const {
return static_cast<aclBinary*>(binaryElf_); }
void setGlobalStore(Memory* mem) { globalStore_ = mem; }
void addGlobalStore(Memory* mem) { globalStores_.push_back(mem); }
const Memory* globalStore() const { return globalStore_; }
const std::vector<Memory*>& globalStores() const { return globalStores_; }
//! Return a typecasted GPU device
gpu::Device& dev()
@@ -497,11 +619,13 @@ private:
aclBinary* binaryElf_; //!< Binary for the new compiler library
void* rawBinary_; //!< Pointer to the raw binary
aclBinaryOptions binOpts_; //!< Binary options to create aclBinary
Memory* globalStore_; //!< Global memory for the program
std::vector<Memory*> globalStores_; //!< Global memory for the program
Memory* kernels_; //!< Table with kernel object pointers
uint maxScratchRegs_; //!< Maximum number of scratch regs used in the program by individual kernel
std::list<Sampler*> staticSamplers_; //!< List od internal static samplers
bool isNull_; //!< Null program no memory allocations
amd::hsa::loader::Executable* executable_; //!< Executable for HSA Loader
ORCAHSALoaderContext loaderContext_; //!< Context for HSA Loader
};
/*@}*/} // namespace gpu