希姆计算HPE Python接口说明
版本历史
版本 | 作者 | 日期 | 注释 |
---|---|---|---|
V1.0 | 希姆计算 | 2022-01-30 | 初始版本。 |
V1.2.0 | 希姆计算 | 2022-04-11 | 配套HPE V1.2.0发布文档。 |
概述
北京希姆计算科技有限公司提供了主机端运行时(hpert)及性能数据采集(stcpti)的python接口,通过python接口可以控制设备端内存访问、核函数执行、性能数据采集等操作。
主机端运行时库的详细信息参考希姆计算异构编程手册。
性能数据采集的详细信息参考希姆计算stc-prof使用说明。
部署工作
参考希姆计算STCP920快速安装指南,在主机部署希姆计算异构编程环境
安装python,版本不小于3.6
安装python库:
$ pip3 install numpy
运行示例
#!/usr/bin/env python
# coding=utf-8
import numpy as np
import hpe.hpert.api as hpe
import hpe.profiler.api as prof
def main():
'''
copy 100 integers from host to device and then back to host
'''
DATA_NUM = 100
try:
print("version", hpe.version())
hpe.detect()
print('get device:', hpe.get_device())
prof.init()
prof.enable()
# prepare host memory
host_in = np.arange(DATA_NUM, dtype=np.int32)
host_out = np.zeros(DATA_NUM, dtype=np.int32)
# prepare device memory
device_in = hpe.device_mem(host_in.nbytes)
device_out = hpe.device_mem(host_out.nbytes)
# move 100 integers from host to device
device_in.copy_from_host(host_in)
# 'hello' kernel function in hello.o moves 100 integers from device_in to device_out
mod = hpe.module('hello.o')
mod.launch_kernel('hello', [device_in, device_out, DATA_NUM])
hpe.synchronize()
# move 100 integers from device to host
device_out.copy_to_host(host_out)
print("host_out:")
print(host_out)
prof.disable()
perf_datas = prof.get_perf_datas()
print("*************profiler data*************")
print(perf_datas)
prof.release()
except hpe.CruntimeException as e:
print(e)
if __name__ == "__main__":
main()
hello.o对应的程序:
#include <npurt.h>
extern "C" {
void hello(int *in, int *out, int num) {
if (CoreID == 0){
for(int i=0; i<num; i++)
out[i] = in[i];
}
}
}
主机端运行时(hpert)接口说明
使用方法:
import hpe.hpert.api
接口功能上分为四类:设备管理,内存管理,执行控制,流管理。
注意:接口函数的执行错误码通过异常(RuntimeAPIError)方式上报用户。
设备管理
hpe.hpert.api.detect()
函数描述:显示主机上的NPU设备信息。输出每个NPC Cluster的标识符、名称、以及PCI信息。
函数类型:同步函数
返回值:发现NPU设备返回True,否则返回False
hpe.hpert.api.set_device(device_id)
函数描述:设置用于主机线程执行设备端程序的默认NPC Cluster。线程的默认NPC Cluster为0。
函数类型:同步函数
参数说明:
名称 | 类型 | 说明 |
---|---|---|
device_id | 输入参数 | NPC Cluster标识符 |
+ 返回值:None |
hpe.hpert.api.get_device()
函数描述:获取当前用于主机线程执行设备端程序的默认NPC Cluster。
函数类型:同步函数
返回值:NPC Cluster标识符
hpe.hpert.api.synchronize(device_id=None)
函数描述:等待当前进程的所有设备端操作执行结束。
函数类型:同步函数
参数说明:
名称 | 类型 | 说明 |
---|---|---|
device_id | 输入参数 | NPC Cluster标识符。默认值为None,使用默认NPC Cluster |
+ 返回值:None |
内存管理
hpe.hpert.api.device_mem(size, device_id=None)
函数描述:从设备端0GB~3GB全局内存区动态分配内存。
函数类型:同步函数
参数说明:
名称 | 类型 | 说明 |
---|---|---|
size | 输入参数 | 分配请求的字节大小 |
device_id | 输入参数 | NPC Cluster标识符。默认值为None,使用默认NPC Cluster |
+ 返回值:hpe.hpert.api.DeviceMem对象 |
hpe.hpert.api.host_mem(shape, dtype=numpy.float16)
函数描述:从主机端分配内存并设置为不会被换出的页锁定内存。
函数类型:同步函数
参数说明:
名称 | 类型 | 说明 |
---|---|---|
shape | 输入参数 | 数据的形状 |
dtype | 输入参数 | 数据元素的类型,默认值为numpy.float16 |
+ 返回值:numpy.ndarray对象 |
hpe.hpert.api.host_pinned(host_array)
函数描述:将主机内存设置为不会被换出的页锁定内存。
函数类型:同步函数
参数说明:
名称 | 类型 | 说明 |
---|---|---|
host_array | 输入参数 | 锁定numpy.ndarray对象的数据页内存 |
+ 返回值:None |
hpe.hpert.api.DeviceMem.offset_address(offset)
函数描述:获取设备端偏移地址。
函数类型:同步函数
参数说明:
名称 | 类型 | 说明 |
---|---|---|
offset | 输入参数 | 设备端地址基址的偏移字节 |
+ 返回值:设备端偏移地址 |
hpe.hpert.api.DeviceMem.copy_from_host(host_array, device_offset=0, host_offset=0, size=None, stream=0)
函数描述:将主机端numpy.ndarray对象的数据内存拷贝到设备端内存。
函数类型:同步函数(stream=0),异步函数(stream!=0)
参数说明:
名称 | 类型 | 说明 |
---|---|---|
host_array | 输入参数 | 主机端numpy.ndarray对象 |
device_offset | 输入参数 | 设备端内存地址偏移字节大小,默认值为0 |
host_offset | 输入参数 | 主机端内存地址偏移字节大小,默认值为0 |
size | 输入参数 | 拷贝字节大小。默认值为None,代表整个host_array的内存字节大小 |
stream | 输入参数 | 流标识符,默认值为0 |
+ 返回值:None |
hpe.hpert.api.DeviceMem.copy_to_host(host_array, device_offset=0, host_offset=0, size=None, stream=0)
函数描述:将设备端内存拷贝到主机端numpy.ndarray对象的数据内存。
函数类型:同步函数(stream=0),异步函数(stream!=0)
参数说明:
名称 | 类型 | 说明 |
---|---|---|
host_array | 输入参数 | 主机端numpy.ndarray对象 |
device_offset | 输入参数 | 设备端内存地址偏移字节大小,默认值为0 |
host_offset | 输入参数 | 主机端内存地址偏移字节大小,默认值为0 |
size | 输入参数 | 拷贝字节大小。默认值为None,代表整个host_array的内存字节大小 |
stream | 输入参数 | 流标识符,默认值为0 |
+ 返回值:None |
执行控制
hpe.hpert.api.module(image, device_id=None)
函数描述:加载设备端目标程序。
函数类型:同步函数
参数说明:
名称 | 类型 | 说明 |
---|---|---|
image | 输入参数 | 要加载的目标程序文件名或内存字节串 |
device_id | 输入参数 | NPC Cluster标识符。默认值为None,使用默认NPC Cluster |
+ 返回值:hpe.hpert.api.Module对象 |
hpe.hpert.api.Module.launch_kernel(kernel_name, *kernel_params, stream=0, core_num=8, flags=KernelFlag.stcKernelFlagNone)
函数描述:核函数运行配置。
函数类型:异步函数
参数说明:
名称 | 类型 | 说明 |
---|---|---|
kname | 输入参数 | 核函数名称 |
kernelParams | 输入参数 | 核函数参数数组 |
stream | 输入参数 | 流标识符,默认值为0 |
core_num | 输入参数 | 一个NPC Cluster上并行执行核函数的NPC个数,默认值为8 |
flags | 输入参数 | 核函数执行标志,默认值为KernelFlag.stcKernelFlagNone |
+ 返回值:None |
流管理
hpe.hpert.api.stream(device_id=None)
函数描述:创建一个流。
函数类型:同步函数
参数说明:
名称 | 类型 | 说明 |
---|---|---|
device_id | 输入参数 | NPC Cluster标识符。默认值为None,使用默认NPC Cluster |
+ 返回值:hpe.hpert.api.Stream对象 |
hpe.hpert.api.Stream.synchronize()
函数描述:等待指定流上的所有操作执行结束。如果核函数执行异常退出,输出触发异常时核函数的调用栈。
函数类型:同步函数
返回值:None
hpe.hpert.api.Stream.wait (event)
函数描述:该流接下来的操作请求要等待指定事件完成再处理。
函数类型:同步函数
参数说明:
名称 | 类型 | 说明 |
---|---|---|
event | 输入参数 | 事件标识符 |
+ 返回值:None |
hpe.hpert.api.event(device_id=None)
函数描述:创建一个事件。
函数类型:同步函数
参数说明:
名称 | 类型 | 说明 |
---|---|---|
device_id | 输入参数 | NPC Cluster标识符。默认值为None,使用默认NPC Cluster |
+ 返回值:hpe.hpert.api.Event对象 |
hpe.hpert.api.Event.synchronize()
函数描述:等待指定事件执行完成。
函数类型:同步函数
返回值:None
hpe.hpert.api.Event.record (stream=0)
函数描述:在指定流的当前运行点添加事件。如果指定流为0,在所有流的当前运行点添加事件。
函数类型:同步函数
参数说明:
名称 | 类型 | 说明 |
---|---|---|
stream | 输入参数 | 流标识符,默认值为0 |
+ 返回值:None |
通用数据类型
class hpe.hpert.api.Module
描述:管理加载到设备端的程序
class hpe.hpert.api.DeviceMem
描述:管理设备端分配的一段内存
class hpe.hpert.api.Stream
描述:管理流信息
class hpe.hpert.api.Event
描述:管理事件信息
class hpe.hpert.api.RuntimeAPIError
描述:管理接口函数执行的错误对应的异常信息
性能数据采集(stcpti)接口说明
使用方法:
import hpe.profiler.api
注意:接口函数的执行错误码通过异常(RuntimeAPIError)方式上报用户。
接口说明
hpe.profiler.api.init()
函数描述:初始化性能数据采集上下文。
函数类型:同步函数
返回值:成功则返回hpe.profiler.capi_ret.STC_PROFILER_SUCCESS,否则返回hpe.profiler.capi_ret.STC_PROFILER_ERROR
hpe.profiler.api.release()
函数描述:释放性能数据采集上下文。
函数类型:同步函数
返回值:成功则返回hpe.profiler.capi_ret.STC_PROFILER_SUCCESS,否则返回hpe.profiler.capi_ret.STC_PROFILER_ERROR
hpe.profiler.api.enable()
函数描述:使能性能数据采集。
函数类型:同步函数
返回值:成功则返回hpe.profiler.capi_ret.STC_PROFILER_SUCCESS,否则返回hpe.profiler.capi_ret.STC_PROFILER_ERROR
hpe.profiler.api.disable()
函数描述:禁止性能数据采集。
函数类型:同步函数
返回值:成功则返回hpe.profiler.capi_ret.STC_PROFILER_SUCCESS,否则返回hpe.profiler.capi_ret.STC_PROFILER_ERROR
hpe.profiler.api.get_perf_datas()
函数描述:设置用于主机线程执行设备端程序的默认NPC Cluster。线程的默认NPC Cluster为0。
函数类型:同步函数
返回值:
名称 | 类型 | 说明 |
---|---|---|
python_perf_datas | hpe.profiler.api.ProfilingResult | 性能数据采集结果 |
通用数据类型
class hpe.profiler.api.ProfilingResult
描述:性能数据采集结果
class hpe.profiler.api.KernelFunction
描述:核函数性能数据
hpe.profiler.capi_ret.STC_PROFILER_SUCCESS
描述:性能数据采集接口函数执行成功
hpe.profiler.capi_ret.STC_PROFILER_ERROR
描述:性能数据采集接口函数执行失败