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?