[LLVMdev] [PATCH][RFC] HSAIL Target
Matt Arsenault
Matthew.Arsenault at amd.com
Wed May 13 08:23:48 PDT 2015
Hi,
AMD would like to propose including an LLVM backend for the HSAIL
target. Patches for review are attached and can also be found at
https://github.com/HSAFoundation/HLC-HSAIL-Development-LLVM/ on the
hsail-review branch. Most of the recent work is visible on the
hsail-1.0f branch, which is based on an LLVM commit approximately 1
month before 3.6 branched. The hsail-review branch is the content of
hsail-1.0f with the minimal changes required to port it to trunk in the
approximate squashed form I plan on eventually committing to the LLVM
repository.
First, background and a description of the backend:
HSAIL is a virtual target machine similar in spirit to AMDIL and NVPTX.
A language compiler produces HSAIL text (or the binary format, called
BRIG) and an HSA implementation provides an HSAIL finalizer which
produces a binary for execution on a physical device. This backend
implements the HSA 1.0 standard published at
http://www.hsafoundation.com/standards/. The AMD OpenCL 2.0
implementation uses HSAIL via LLVM when targeting any GPU device,
supporting Sea Islands GPUs and later. This backend is unrelated to the
R600 / AMDGPU target which is already in tree. This HSAIL backend is
multivendor, and capable of supporting multiple generations of ISA from
any one vendor. About 8 months ago, the HSAIL target was forked off of
the internal version and I've been working since then to catch it up to
LLVM trunk and into a state acceptable for upstreaming. To expedite this
process, various features (such as image support, debug info, and a few
optimizations) were dropped, so this version is currently not as full
featured as the internal version. The intention is to gradually merge
that functionality back into this version once upstream, and eventually
base AMD’s internal version on the upstream target and be minimally
divergent. There is still some work I believe needs to be done before it
is ready to be committed, but at this point I think it is ready for
others to start providing feedback on areas where I should be focusing
to get there.
With the current set of features this HSAIL backend is able to execute
C++AMP programs by following the directions here:
https://bitbucket.org/multicoreware/cppamp-driver-ng/wiki/HSA%20Support%20Status.
Over time, we intend to evolve to a full C++17 compiler on the LLVM
HSAIL back end with the ability to target the GPU for parallel regions.
Other languages will also use this path over time.
One noteworthy difference from how other targets are structured is there
are two code emission paths in the backend. The first path, which is the
original used by the internal OpenCL compiler, uses a third party
library (libHSAIL) for code emission plugged into the AsmPrinter. The
reason for this is partially legacy, and partially because the HSA
specification defines its own object format, BRIG, which is unlike any
of the supported object formats such as ELF. Supporting BRIG in MC would
be a challenge (largely because it is not really streamable), but
attempting to emit it using the standard infrastructure may be a
consideration in the future. This path supports emitting object files
and text output via libHSAIL's disassembler. The second path which I've
implemented over the past few months uses a normal AsmPrinter emitting
HSAIL text using the standard MC infrastructure, and does not support
object output. The two paths have similar pass rates on the C++ AMP
conformance test suite, and should produce the same output except for
some whitespace and comment differences.
The backend currently has a cmake option to control whether libHSAIL
will be used or not, defaulting to using it if libHSAIL is found.
Developers building LLVM with or without HSAIL support will not need
libHSAIL to build the backend or run tests, all of which pass using
either AsmPrinter. libHSAIL and associated assembler / disassembler can
be found at https://github.com/HSAFoundation/HSAIL-Tools.
Currently I have left it as an experimental target, not built by
default. I have only implemented the build support necessary for cmake.
I'm not planning on adding the autotools support, since hopefully that
will be gone soon enough.
My highest priority is to get the backend upstreamed as soon as
possible, so I would appreciate feedback about any kinds of blocking
issues on that.
Thanks
Matt Arsenault
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20150513/3e9bd2e7/attachment.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: hsail_review.tar.bz2
Type: application/x-bzip
Size: 209670 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20150513/3e9bd2e7/attachment.bin>
More information about the llvm-dev
mailing list