当前位置: 首页 > 专利查询>南开大学专利>正文

Element-Wise算子实现的方法及装置制造方法及图纸

技术编号:35470284 阅读:19 留言:0更新日期:2022-11-05 16:15
本公开提供一种基于OpenCL的Element

【技术实现步骤摘要】
Element

Wise算子实现的方法及装置


[0001]本公开涉及深度学习
,尤其涉及一种基于OpenCL的Element

Wise算子 实现的方法及装置、电子设备和存储介质。

技术介绍

[0002]深度学习模型以较强的建模性能逐渐被广泛应用于各类典型人工智能应用场景 中。近年来,随着深度学习的发展,模型的网络结构大幅增加,复杂的神经网络结 构增加了深度学习模型的拟合效果,同时使得模型对算力的需求与日俱增。
[0003]通过CPU提供的算力性价比较低且总体算力不足,因此目前通常利用异构并行 设备满足深度学习模型的算力需求,例如:利用GPU强大的并行计算能力实现了对 深度学习模型的加速。目前主流深度学习框架,均实现了对CUDA(Compute UnifiedDevice Architecture)和ROCm(Radeon Open Compute platform)编程模型的支持。
[0004]如何实现主流深度学习框架对不同厂商的多类型异构设备的支持成为亟待解决 的问题。Element

Wise算子作为深度学习框架的重要组成部分被使用广泛,实现了较 多的计算功能。

技术实现思路

[0005]本公开提供了一种基于OpenCL的Element

Wi se算子实现的方法、装置、电子设 备和存储介质。其主要目的在于实现基于OpenCL编程标准的Element

Wise算子库。
[0006]根据本公开的第一方面,提供了一种基于OpenCL的Element

Wise算子实现的方 法,其中,包括:
[0007]基于Element

Wise算子的运算符共性,生成通用的两个算子类;
[0008]通过继承方式,分别执行两个算子类中计算功能的封装;
[0009]基于OpenCL标准,将所述Element

Wise算子逐个实现底层OpenCLkernel;
[0010]将所述底层OpenCLkernel的设备端代码和功能进行封装。
[0011]可选的,所述通过继承方式,分别执行两个算子类中计算功能的封装包括:
[0012]第一预设结构体通过继承第二预设结构体,实现不同类型的Element

Wise算子 中计算功能的封装;
[0013]将所述两个算子类封装为OpenCL版本的UnaryOp类与BinaryOp类。
[0014]可选的,所述基于OpenCL标准,将所述Element

Wise算子逐个实现底层 OpenCLkernel包括:
[0015]将所述第一预设结构体作为算子类的模板参数,利用第一预设结构体实例化分别 对应OpenCL版本的UnaryOp类与BinaryOp类;
[0016]两个算子类通过所述第一预设结构体获取生成的OpenCLkernel字符串;
[0017]基于主机端调用接口将所述设备端代码字符串编译为OpenCL程序,并获取 OpenCLkernel以执行计算。
[0018]可选的,所述将所述预设结构体作为算子类的模板参数,利用第一预设结构体实 例化分别对应OpenCL版本的UnaryOp类与BinaryOp类包括:
[0019]所述第一预设结构体可以作为算子类的模板参数提供具体的设备端代码,用于实 现计算功能;
[0020]所述两个算子类通过所述第一预设结构体获取生成的OpenCLkernel字符串包括:
[0021]第一预设结构体利用预设函数实现对应的OpenCLkernel字符串生成功能;
[0022]将生成的所述OpenCLkernel字符串返回对应的算子类中。
[0023]可选的,所述第一预设结构体利用预设函数实现对应的OpenCLkernel字符串生 成功能包括:
[0024]所述预设函数根据所述输入数据类型和输出数据类型,生成对应的OpenCLkernel 字符串。
[0025]可选的,所述将所述底层OpenCLkernel的设备端代码和功能进行封装包括:
[0026]将所述OpenCLkernel中的预设功能函数封装为单独函数;
[0027]将所述单独函数生成对应功能的OpenCL设备端代码字符串。
[0028]基于预设功能函数,根据传入数据类型获取设备端代码;
[0029]通过采用字符串拼接的方式,将可以复用的设备端代码封装成单独函数。
[0030]根据本公开的第二方面,提供了一种基于OpenCL的Element

Wise算子实现的装 置,包括:
[0031]生成单元,用于基于Element

Wise算子的运算符共性,生成通用的两个算子类;
[0032]第一封装单元,用于通过继承方式,分别执行两个算子类中计算功能的封装;
[0033]处理单元,用于基于OpenCL标准,将所述Element

Wise算子逐个实现底层OpenCLkernel;
[0034]第二封装单元,用于将所述底层OpenCLkernel的设备端代码和功能进行封装。
[0035]可选的,所述第一封装单元,还用于:
[0036]第一预设结构体通过继承第二预设结构体,实现不同类型的Element

Wise算子 中计算功能的封装;
[0037]将所述两个算子类封装为OpenCL版本的UnaryOp类与BinaryOp类。
[0038]可选的,所述处理单元包括:
[0039]实例化模块,用于将所述第一预设结构体作为算子类的模板参数,利用第一预设 结构体实例化分别对应OpenCL版本的UnaryOp类与BinaryOp类;
[0040]获取模块,用于两个算子类通过所述第一预设结构体获取生成的OpenCLkernel 字符串;
[0041]编译模块,用于基于主机端调用接口将所述设备端代码字符串编译为OpenCL程 序,并获取OpenCLkernel以执行计算。
[0042]可选的,所述实例化模块,还用于:
[0043]所述第一预设结构体作为算子类的模板参数提供具体的设备端代码,用于实现计 算功能;
[0044]所述获取模块,还用于:
[0045]第一预设结构体利用预设函数实现对应的OpenCLkernel字符串生成功能;
[0046]将生成的所述OpenCLkernel字符串返回对应的算子类中。
[0047]可选的,所述获取模块,还用于:
[0048]所述预设函数根据所述输入数据类型和输出数据类型,生成对应的OpenCLkernel 字符串。
[0049]可选的,所述第二封装单元包括:
[0050]封装模块,用于本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种基于OpenCL的Element

Wise算子实现的方法,其特征在于,包括:基于Element

Wise算子的运算符共性,生成通用的两个算子类;通过继承方式,分别执行两个算子类中计算功能的封装;基于OpenCL标准,将所述Element

Wise算子逐个实现底层OpenCLkernel;将所述底层OpenCLkernel的设备端代码和功能进行封装。2.根据权利要求1所述的方法,其特征在于,所述通过继承方式,分别执行两个算子类中计算功能的封装包括:第一预设结构体通过继承第二预设结构体,实现不同类型的Element

Wise算子中计算功能的封装;将所述两个算子类封装为OpenCL版本的UnaryOp类与BinaryOp类。3.根据权利要求1所述的方法,其特征在于,所述基于OpenCL标准,将所述Element

Wise算子逐个实现底层OpenCLkernel包括:将所述第一预设结构体作为算子类的模板参数,利用第一预设结构体实例化分别对应OpenCL版本的UnaryOp类与BinaryOp类;两个算子类通过所述第一预设结构体获取生成的OpenCLkernel字符串;基于主机端调用接口将所述设备端代码字符串编译为OpenCL程序,并获取OpenCLkernel以执行计算。4.根据权利要求3所述的方法,其特征在于,所述将所述预设结构体作为算子类的模板参数,利用第一预设结构体实例化分别对应OpenCL版本的UnaryOp类与BinaryOp类包括:所述第一预设结构体可以作为算子类的模板参数提供具体的设备端代码,用于实现计算功能;所述两个算子类通过所述第一预设结构体获取生成的OpenCLkernel字符串包括:第一预设结构体利用预设函数实现对应的OpenCLkernel字符串生成功...

【专利技术属性】
技术研发人员:孙羽菲隋轶丞石昌青张玉志
申请(专利权)人:南开大学
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1