1.kernel agent —— GPU
2.agent —— CPU or GPU或软件组件,即HSA内存模型参与者就可以称为agent(换句说:就是能读写HSA内存模型的硬件或软件组件就叫agent)
3.host CPU —— 首先,host CPU在HSA中是一个agent,只是这个agent支持原生CPU指令并且运行操作系统和HSA runtime,作为一个agent,host CPU可以通过操作内存构造和enqueue AQL packets并dispatch给一个HAS kernel agents,在一些系统中,host CPU同样可以作为一个kenrel agnent(前提是有合适的HSAIL finalizer和AQL mechanisms)
4.appllication ——host CPU execute application
5.HSAIL program —— kernel agents execute programs
6.HSA MMU —— 用于kernel agents的内存管理单元(比如IOMMU),与host CPU MMU提供功能相同
7.memory Node(HMN) —— 针对一个node,定义一个内存资源集合,该资源集合由这个node ”local” access。何为node? 即一系列系统组件(比如host CPU和kernel agents)的集合。具体实现就是将该内存资源集合attach到这个node的内存控制器并兼容HAS访问。
8.HSAIL —— 针对并行程序的虚拟ISA,通过Finalizer转换成特定硬件平台的ISA。kernel用HSAIL编写并且被finalizer翻译成机器码。HAS运行时定义了一组服务,用于支持HSAIL程序的运行,HSAIL程序包含一个finalizer和一个loader:
-如果hardware components不支持原生HSAIL code,就可以用finalizer将HSAIL code翻译成对应平台的机器码。(目前,支持运行原生HSAIL code的hardware components基本不存在,所以,可以简单理解为,只要一个hardware components要运行kernel,那么就必须经过用finalizer将HSAIL code翻译成对应平台的机器码这一步动作)
-loader用于将机器码装载到hardware components。
9.kernel segment —— 用于给kernel传递参数
10.kernel agent —— 支持HSAIL指令集,支持执行AQL kernel dispatch packets。Kernel agent可以给任何kernel agent发送命令(包括自己),一个kernel agent由至少一个compute units组成。
11.packet ID —— 每个AQL包都会针对其enqueue的队列生成一个64-bit的packet ID。packet ID可以简单理解为该packet入队列时对应的write_index值。一个进程中用packet ID和queue ID可以唯一标识一个packet。
12.packet processor —— packet processor会与一个或者多个agents绑定,packet processor 作用是赋予与其绑定的agents具有处理AQL packets的能力。那究竟哪个agents来执行packet processor的包处理功能呢?一般来说,是与user mode queue associated的agent,并且该agent将运行kernel dispatch packet。或者不与user mode queue associated的agent,但该agent将运行agent dispatch packet。packet processor是逻辑上与kernel agnet分离的agent(实际上是一个),可以由自己单独的标识,比如作为分配的信号listener时。
13.PASID —— 用于识别运行于host CPU或者虚拟机中应用程序地址空间,在device上用于地址隔离,IOMMU地址映射时会用到。
14.signal handle —— 用于同一个process中运行于不同agents的thread或work-items之间的同步。
15.user mode queue —— 由HAS runtime创建的user mode queue,并且可以enqueue AQL packets。一旦packet processor 与某个user mode queue绑定,该queue中的packets就可以被该packet processor处理。举个例子:一个user mode queue与属于某个kernel agent的packet processor绑定,该packet processor可以用来在kernel agent上执行队列中的kernel dispatch packet。