Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

https://github.com/JuliaGPU/HSA.jl

Julia Bindings for the HSA Runtime
https://github.com/JuliaGPU/HSA.jl

Last synced: 3 months ago
JSON representation

Julia Bindings for the HSA Runtime

Lists

README

        

# HSA.jl

This is a package wrapping the Heterogeneous System Architecture (HSA) runtime libraries.

For links to official HSA Documentation, check out the
[wiki](https://github.com/JuliaGPU/HSA.jl/wiki/HSA.jl)

### Library Discovery
The package needs to know where to find the HSA runtime.
The code responsible for discovering the HSA libraries and headers is located in
src/discovery.jl. It expects to find the path containing the HSA libraries
(libhsa-runtime64, libhsakmt [and libhsa-runtime-ext64.so]) in
`ENV["LD_LIBRARY_PATH"]`.

For a port of the `vector_copy` example that comes with the HSA runtime, see the
`sample` directory.

### Julia functions as Kernels
In combination with a [modified Julia
binary](https://github.com/rollingthunder/julia), HSA.jl can be used to execute
Kernel functions written in Julia on an HSA agent.

Minimal example:

```julia
using HSA

@hsa_kernel function vector_copy(a, b)
i = get_global_id()
b[i] = a[i]
end

N = 1024*1024

a_in = Array(Int, N)
rand!(a_in)

b_out = Array(Int, N)
rand!(b_out)

assert(a_in != b_out)

@hsa (N) vector_copy_kernel(a_in, b_out)

assert(a_in == b_out)
```

More examples using this facility can be found in `samples/codegen`

### Module overview
* HSA
Container Module for all HSA functionality.
+ Wrappers for functions and constants defined by the HSA runtime.
+ Functionality to emulate execution of Julia kernels
- On a non-HSA CPU
- if there is no codegen support
* HSA.Builtins
Functions that compile down to device intrinsics for use in Kernels
* HSA.ExtFinalization
Custom Wrappers for the finalization extension to the HSA Runtime

### Source Folder
* binding
Contains the code that interfaces with the various parts of the HSA Runtime
+ generated
Files generated from the hsa headers via gen/generate.jl
+ custom
Custom wrapper code
* codegen
Contains all code that relies on the modified julia code generator to work
* emulation
Provides emulation for some parts of the codegen infrastructure even when no
hsa or codegen are available

### Source Generation
The files in src/binding/generated are generated by the script gen/generate.jl.
Regenerating these is usually unnecessary unless the HSA headers have changed or
you made changes to the generation script.
The script has some additional dependencies (mainly Clang.jl) and needs to be able to
find the HSA headers.

### Known Issues
* HSA.executable\_get\_symbol does not find symbols
Maybe the name string for the symbol is not being passed correctly?
Workaround: iterate over all symbols and inspect their names