# sklite **Repository Path**: kevin365/sklite ## Basic Information - **Project Name**: sklite - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2025-07-13 - **Last Updated**: 2025-09-06 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## 环境安装 下载软件包: https://www.hiascend.com/developer/download/community/result?module=cann 安装: ```bash bash Ascend-cann-toolkit-*.run --install-path=/path/to/install/cann --full ``` 设置环境变量: ```bash source /path/to/install/cann/ascend-toolkit/set_env.sh ``` ## 参考样例 ``` testcase.py # 单流 testcase_multi_streams.py # 多流 ``` ## SuperKernel编译接口 ``` sk = AscendSk('x') sk.compile(graph_info, out_dir, soc, options) ``` *graph_info*: 输入的图信息 *out_dir*: 编译结果输出目录 *soc*: 芯片型号 *options*: 编译选项, `stream-fusion=[1,0]`打开双流融合 **输入的图信息样例** ``` [ {'op_type': 'Add_1', 'stream_id': 1, 'params': [{'shape': [1024, 768], 'ori_shape': [1024, 768], 'format': 'ND', 'ori_format': 'ND', 'dtype': 'float16'}, {'shape': [1024, 768], 'ori_shape': [1024, 768], 'format': 'ND', 'ori_format': 'ND', 'dtype': 'float16'}, {'shape': [1024, 768], 'ori_shape': [1024, 768], 'format': 'ND', 'ori_format': 'ND', 'dtype': 'float16'}] }, {'op_type': 'EVENT.SEND', 'stream_id': 1, 'event_id': 2 } ] ``` **图信息分为两种,op和event** **其中op格式的字段** *op_type: str*, 算子的类型,对应Ascend算子就是对应的OpType *stream_id: int*, 图上的流ID,用来组织算子的串并行执行顺序,同一条流上算子串行执行 *params: list*, 算子编译参数, 分为input、output、attrs,其中input/output是一个tensor的描述,属性是具体类型对应的数值,是否有属性参考算子实现 **其中event的字段** *op_type: str*,EVENT.SEND外发事件/EVENT.RECV等待事件 *stream_id: int*, 图上的流ID,表示event执行所在的流 *event_id: int*,事件id,相同的ID是配对关系,用来控制顺序,RECV需要等SEND执行后才能激活 **基本流程** ![](docs/sklite-intf.svg) ## 适配一个自编译的算子 ``` sklite/ops/add_1.py # 参考样例 ``` **从AscendOp继承一个类, 并注册** ``` @reg_operator('Add_1') class CustomOp(AscendOp): ``` **适配一个编译入口** *编译接口定义* ``` def compile(self, optype:str, working_dir, args, soc: str = 'Ascend910_9391'): ``` *适配一个编译cache* ``` jstr = json.dumps({'optype': optype, 'args': args, 'soc': soc}) key = hashlib.sha256(jstr.encode('utf-8')).hexdigest() # 计算key compile_cache.add_cache(key, [obj, jsn]) # 编译结果添加到cache cc = compile_cache.query_cache(key) # 从cache获取编译结果 ``` *获取sk要求的编译选项* ``` compiler, options = get_opcompiler_meta(soc) ``` *定制自己的编译命令* ``` cmds = [compiler] + ['-DSK_ON', f'-DRUN_SHAPE_SIZE={shape_size}', '-DRUN_BLOCK_DIM=8'] + options + ['-o', obj, '-c', cpp] ``` *保存编译结果* ``` self.set_binary_file(obj) # 保存编译obj文件 self.set_kernel_type('AIV') # 设置核类型 self.set_kernel_name('add_1') # 设置入口函数名 self.set_block_dim(8) # 设置核数 self.set_params_desc(['x', 'y', 'z']) # 设置参数表 self.gen_json(working_dir) # 根据配置生成json文件 ```