[发明专利]一种基于OpenCL的RS码编解码方法有效
申请号: | 201910419485.0 | 申请日: | 2019-05-20 |
公开(公告)号: | CN110244939B | 公开(公告)日: | 2021-02-09 |
发明(设计)人: | 伍卫国;刘钊华;孙岚子;赵东方 | 申请(专利权)人: | 西安交通大学 |
主分类号: | G06F8/30 | 分类号: | G06F8/30;G06F9/4401;G06F9/445;G06F12/02;H03M13/15 |
代理公司: | 西安通大专利代理有限责任公司 61200 | 代理人: | 李红霖 |
地址: | 710049 *** | 国省代码: | 陕西;61 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 基于 opencl rs 解码 方法 | ||
1.一种基于OpenCL的RS码编解码方法,其特征在于,包括以下步骤:
步骤1,编写OpenCL内核程序,实现GF(2^8)的乘法运算;
步骤2,编译步骤1编写的内核程序生成硬件配置文件;
步骤3,初始化OpenCL内核启动环境;
步骤4,宿主机程序控制内核执行;
步骤5,纠删码编码;
步骤6,纠删码解码;
步骤1具体包括以下步骤:
a)定义一个工作项私有变量,其值为要编解码矩阵中要进行Galois域矩阵乘法的元素;
b)定义两个全局内存中的缓冲区,一个为只读类型的内存,用来存储要进行编解码计算的源文件;一个为只写类型的内存,用来存储计算之后的结果;
c)定义两个只读类型,大小为255的数组,分别用来存储Galois域乘法运算的正表和反表;正表和反表用来做Galois域乘法运算;其中正表下标i等于生成元的指数,下标对应的元素值等于对应的生成元的i次方的值,反表和正表是对应的,反表的下标为正表中对应的元素值,反表的元素值为正表的下标;
d)生成一个一维的索引空间,获取每个工作项的全局id;每个工作项根据自身的全局id从源文件缓冲区*src中取不同的数据并行的进行运算;
e)每个工作项分别从反表中查询编解码矩阵中的参与运算的元素的下标以及原始文件中参与计算的字节的下标;
f)将上一步中查询到的下标相加并且取模255,得到上一步中Galois域乘法运算结果的下标;
g)根据上一步中计算得到的下标,在正表中查询Galois乘法运算的结果,并将其写入到存储计算结果的缓冲区中;
步骤3具体包括以下步骤:
a)获取程序运行平台的信息,将平台id存储到一个数组之中;
b)对于每个一个运行平台,获取该平台上的所有设备;
c)创建上下文,并将上下文与上一步中获取到的设备关联起来;
d)创建程序对象,将编译完成后的内核文件转换成字符串,并将字符串与OpenCL设备和上下文关联起来,生成一个程序对象;
e)创建一个与上下文设备关联的命令队列,用做宿主机程序与内核程序之间的通信;
f)创建一个与程序对象关联的内核对象;
g)根据内核程序中的参数,创建出四个存储器对象,一个只读类型的存储器对象用来存储要进行编码的源文件,两个只读类型大小为256字节的存储器对象,分别用来存放正表和反表,一个只写类型的存储器对象用来存储计算之后的结果;
步骤4具体包括以下步骤:
a)创建两个OpenCL事件,一个用于控制内核执行,另一个用于控制读出内核的计算结果;
b)创建一个大小为三的OpenCL事件数组,用于控制将数据写入到之前创建的存储器对象中;
c)分别将源文件,以及正表和反表写入到对应的存储器对象中;
d)根据内核程序按照顺序设置内核参数,第一个为参与计算的编解码矩阵中的元素,第二个为输入的源文件存储器对象、第三个为输出的计算结果存储器对象,第四个为Galois域运算的正表,第五个为Galois域运算的反表;
e)通过命令队列发送命令,启动内核;
f)通过事件获得内核执行状态,等待内核执行完成之后,读出计算结果;
步骤5具体包括以下步骤:
a)根据纠删码编码参数RS(n,k)计算生成矩阵,其中n表示编码之后生成的数据块和冗余块之和,k表示数据块的个数;
b)打开要进行编码的文件,并根据编码参数RS(n,k)以及文件大小,将文件等分为大小相等的k块;
c)创建n至k个大小为文件块大小的缓冲区,用来保存进行编码操作之后的计算结果;
d)从文件中分段读取出文件的内容,并计算当前内容处于哪个块,以及块内的偏移量;
e)调用OpenCL内核,计算当前文件内容与生成矩阵的进行Galois矩阵乘运算的结果,并将内核的计算结果读出缓冲区中;
f)将读取出来的原始文件内容,根据其所在块的位置,写入到不同的文件中;
g)将编码得到的冗余块写入到磁盘中;
h)完成所有文件的编码操作之后,删除原始文件;
步骤6具体包括以下步骤:
a)分别从磁盘中读取目前尚未丢失的文件块;
b)根据RS码的编码参数,以及丢失的文件块数判断,是否可以进行解码操作;如果丢失的文件块数大于冗余块数,则无法进行解码操作,终止程序,否则可以恢复丢失文件,继续进行下一步;
c)根据已丢失文件块编号,删除生成矩阵中的对应行,并采用高斯-约旦消元法计算删除后矩阵的逆矩阵;
d)根据丢失文件块的个数创建缓冲区,用来存储解码操作的计算结果;
e)调用OpenCL内核,计算逆矩阵与未丢失文件块进行Galois矩阵乘运算的结果,并将结果读入缓冲区中;
f)根据恢复的块编号,将计算结果写入到不同的文件中。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于西安交通大学,未经西安交通大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201910419485.0/1.html,转载请声明来源钻瓜专利网。