At a high level the Heterogeneous Systems Architecture and Google's Portable Native Client virtual instruction set architecture/intermediate language (http://src.chromium.org/viewvc/native_client/data/site/pnacl.pdf) share a lot of similarities:
- Both are a low level instruction sets which can be encoded in a bytecode form
- The instruction sets of both are platform neutral
- The bytecode form of both are intended to be portable
- The bytecode form of both are JIT compiled on the target machine
- Both are based on LLVM
Some possible differences include:
- Instructions in Portable Native Client are executed in a sandbox after JIT
- Portable Native Client currently only supports 32-bit integers and pointers
- Portable Native Client seems to only support a weak consistency memory model, though HSA probably has to adopt this too to be platform neutral
- HSA's instruction set is also suitable for vector processors
- HSA also supports invoking fixed function hardware
- On HSA all of the different types of processors share the same virtual address space
With the exception of Portable Native Client's 32-bit integer and pointer limitation, the difference features of Portable Native Client and HSA should be beneficial for each other. HSA could be a pretty ideal platform for Portable Native Client to run on.
AMD is approaching the virtual portable ISA problem from a system level architecture level upwards whereas Google is approaching from an application layer downwards. In the middle where the 2 virtual ISAs exist, they have very similar goals so it doesn't make sense to develop 2 competing platforms.
Has there been collaboration between AMD and Google? Anyone from AMD want to comment?