CN110244939A - 一种基于OpenCL的RS码编解码方法 - Google Patents

一种基于OpenCL的RS码编解码方法 Download PDF

Info

Publication number
CN110244939A
CN110244939A CN201910419485.0A CN201910419485A CN110244939A CN 110244939 A CN110244939 A CN 110244939A CN 201910419485 A CN201910419485 A CN 201910419485A CN 110244939 A CN110244939 A CN 110244939A
Authority
CN
China
Prior art keywords
kernel
opencl
file
matrix
program
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN201910419485.0A
Other languages
English (en)
Other versions
CN110244939B (zh
Inventor
伍卫国
刘钊华
孙岚子
赵东方
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Xian Jiaotong University
Original Assignee
Xian Jiaotong University
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Xian Jiaotong University filed Critical Xian Jiaotong University
Priority to CN201910419485.0A priority Critical patent/CN110244939B/zh
Publication of CN110244939A publication Critical patent/CN110244939A/zh
Application granted granted Critical
Publication of CN110244939B publication Critical patent/CN110244939B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/023Free address space management
    • G06F12/0238Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory
    • G06F12/0246Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory in block erasable memory, e.g. flash memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/4401Bootstrapping
    • G06F9/4411Configuring for operating with peripheral devices; Loading of device drivers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/445Program loading or initiating
    • G06F9/44505Configuring for program initiating, e.g. using registry, configuration files
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M13/00Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
    • H03M13/03Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words
    • H03M13/05Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words using block codes, i.e. a predetermined number of check bits joined to a predetermined number of information bits
    • H03M13/13Linear codes
    • H03M13/15Cyclic codes, i.e. cyclic shifts of codewords produce other codewords, e.g. codes defined by a generator polynomial, Bose-Chaudhuri-Hocquenghem [BCH] codes
    • H03M13/151Cyclic codes, i.e. cyclic shifts of codewords produce other codewords, e.g. codes defined by a generator polynomial, Bose-Chaudhuri-Hocquenghem [BCH] codes using error location or error correction polynomials
    • H03M13/1515Reed-Solomon codes

Abstract

一种基于OpenCL的RS码编解码方法,包括以下步骤:步骤1,在OpenCL内核中采用查表法实现GF(2^8)的乘法运算;步骤2,编译步骤1编写的内核程序生成硬件配置文件;步骤3,初始化OpenCL内核启动环境;步骤4,宿主机程序控制内核执行;步骤5,纠删码编码;步骤6,纠删码解码。本发明可以充分的发挥出OpenCL设备的并行性能,极大的缩短了RS码编解码的计算时间。

Description

一种基于OpenCL的RS码编解码方法
技术领域
本发明属于电子技术领域,具体涉及一种基于OpenCL的RS码编解码方法。
背景技术
OpenCL(Open Computing Language)是由Khronos Group针对异构计算装置进行并行化运算所设计的标准API以及程序语言。OpenCL具有非常好的兼容性,它的计算平台可以是由多个设备组成的异构平台,OpenCL对这些不同的平台提供统一的API。采用OpenCL模型编写的程序在所有的支持OpenCL标准的平台上都可以执行,程序只需要经过平台开发商提供的SDK(Software Development Kit)编译后即可运行。OpenCL的设计目标是清晰的表述异构环境中的并行项。并行是一个非常重要的能力,目前随着计算技术的发展,各种计算平台都有多核化的趋势。但是很多软件开发人员在开发软件时并不知道如何利用计算平台的并行能力,这样编写的软件运行效率很低。因此就需要OpenCL编程模型来充分利用平台的并行计算能力。
OpenCL模型中将平台分为两部分:一个宿主机和多个OpenCL设备。宿主机一般是通用CPU,主要负责程序的逻辑控制功能,由它来管理OpenCL设备。OpenCL设备一般是一些计算单元比较多,计算能力比较强,具有进行并行计算能力的运算平台,例如GPU、FPGA和DSP等设备。这些OpenCL设备中通常包含很多计算单元,每个计算单元中又有很多处理单元。OpenCL中最小的操作单元就是计算单元,这些计算单元之间可以并行的进行计算。与OpenCL平台模型相对应,OpenCL的执行模型也分为两部分:宿主机程序和内核。宿主机程序在宿主机上运行,由宿主机程序通过上下文和命令队列来调用内核。上下文定义了内核执行和定义的环境,命令队列是宿主机程序和内核之间的通信方式,宿主机程序通过将命令发送到命令队列来控制内核。
RS码是由Reed和Solomon于1960年提出的一种系统码。它是唯一可以满足任意的数据磁盘数目(n)和冗余磁盘数目(m)的MDS(maximum distance separable)的编码方法。RS码的生成矩阵G的前n行是n*n的单位矩阵因此RS码也属于系统码的一种。经过五十多年的研究和发展,RS码的理论基础已经非常完善。RS码是从维度n的向量空间通过有限域K转换成较高的向量空间维度n+m。它可根据其生成矩阵的不同将其分为两类:一类是范德蒙RS编码,另一类是柯西RS编码。范德蒙RS编码中的所有运算均是在Galois域上的运算,其中加法运算对应异或运算,乘法运算比较复杂,一般用查表法来实现。柯西RS编码将复杂的乘法运算转化成二进制乘法,但是会导致生成矩阵增大很多倍,计算量也会随之增加。
目前对RS码编解码的加速主要有三种:在FPGA开发板上采用VHDL语言编写专用的编解码电路;采用CUDA编程模型利用NVIDIA的GPU进行加速;采用ASIC实现RS纠删码的编解码加速。第一种方法一般是采用硬件描述语言设计生成一个GF域的乘法器来加速纠删码编解码中大量的GF域中的乘法运算。但是这种方法并没有充分利用编解码过程中的数据并行性,并行粒度比较小,对性能的提升比较有限。第二种方法是将GPU作为数据并行计算设备,但是这种方法只能具有NVIDIA显卡的机器上使用,适用范围比较窄。最后一种方法与FPGA类似,但是ASIC的硬件电路是量身定制的,因此执行速度比较快,但是ASIC的芯片价格更高,代价比较大。
发明内容
本发明的目的在于提供一种基于OpenCL的RS码编解码方法,以解决上述问题。
为实现上述目的,本发明采用以下技术方案:
一种基于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)根据恢复的块编号,将计算结果写入到不同的文件中。
与现有技术相比,本发明有以下技术效果:
本发明利用OpenCL对纠删码的编解码的计算过程进行加速,因此为了除其他因素对实验结果的影响,在测量性能时只测量CPU计算的时间不测量文件IO的时间。在OpenCL中主要的计算任务由内核承担,因此可以认为内核执行时间即是纠删码的计算时间。针对RS码编解码过程中,消耗计算时间最多的Galois域矩阵乘运算。本发明,基于OpenCL编程模型,充分利用了矩阵乘法运算中的数据并行性。使得编解码过程中的每个字节之间的Galois域乘法运算,可以并行的在OpenCL设备上的每个工作项上执行。本发明可以充分的发挥出OpenCL设备的并行性能,极大的缩短了RS码编解码的计算时间。并且采用OpenCL编程模型的程序,可以在所有支持OpenCL标准的设备运行,具有广泛的适用性。
附图说明
图1为程序平台模型图
图2为内核并行运行模式图
图3为不同文件大小下两种方式编码计算时间图;
图4为不同文件大小下两种方式解码计算时间图。
具体实施方式
以下结合附图对本发明进一步说明:
请参阅图1至图4:
本发明针对上述现有技术中的不足,提出一种基于OpenCL的RS码编解码策略的。如图1所示,将纠删码编解码过程中,复杂的文件读写,以及逻辑控制功能放入在通用CPU运行的主机程序中,将耗时多,可并行的Galois域乘法运算放入在FPGA上运行的内核程序中。本发明可以充分利用编解码过程中的数据并行性,并且适用于所有支持OpenCL标准的平台。
一种基于OpenCL的RS码编解码方法,包括以下步骤:
步骤1,编写OpenCL内核程序,实现GF(2^8)的乘法运算;
步骤2,编译步骤1编写的内核程序生成硬件配置文件;
步骤3,初始化OpenCL内核启动环境;
步骤4,宿主机程序控制内核执行;
步骤5,纠删码编码;
步骤6,纠删码解码。
步骤1具体包括以下步骤:
a)定义一个工作项私有变量,其值为要编解码矩阵中要进行Galois域矩阵乘法的元素;
b)定义两个全局内存中的缓冲区,一个为只读类型的内存,用来存储要进行编解码计算的源文件;一个为只写类型的内存,用来存储计算之后的结果;
c)定义两个只读类型,大小为255的数组,分别用来存储Galois域乘法运算的正表和反表;正表和反表用来做Galois域乘法运算;其中正表下标i等于生成元的指数,下标对应的元素值等于对应的生成元的i次方的值,反表和正表是对应的,反表的下标为正表中对应的元素值,反表的元素值为正表的下标;
正表GaloisValue和反表GaloisIndex计算的伪代码如下:
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表示数据块的个数;下述矩阵为一个RS(8,5)的生成矩阵。
b)打开要进行编码的文件,并根据编码参数RS(n,k)以及文件大小,将文件等分为大小相等的k块;
c)创建n-k个大小为文件块大小的缓冲区,用来保存进行编码操作之后的计算结果;
d)从文件中分段读取出文件的内容,并计算当前内容处于哪个块,以及块内的偏移量;
e)调用OpenCL内核,计算当前文件内容与生成矩阵的进行Galois矩阵乘运算的结果,并将内核的计算结果读出缓冲区中;
f)将读取出来的原始文件内容,根据其所在块的位置,写入到不同的文件中;
g)将编码得到的冗余块写入到磁盘中;
h)完成所有文件的编码操作之后,删除原始文件。
6、根据权利要求1所述的一种基于OpenCL的RS码编解码方法,其特征在于,步骤6具体包括以下步骤:
a)分别从磁盘中读取目前尚未丢失的文件块;
b)根据RS码的编码参数,以及丢失的文件块数判断,是否可以进行解码操作;如果丢失的文件块数大于冗余块数,则无法进行解码操作,终止程序,否则可以恢复丢失文件,继续进行下一步;
c)根据已丢失文件块编号,删除生成矩阵中的对应行,并采用高斯-约旦消元法计算删除后矩阵的逆矩阵;
d)根据丢失文件块的个数创建缓冲区,用来存储解码操作的计算结果;
e)调用OpenCL内核,计算逆矩阵与未丢失文件块进行Galois矩阵乘运算的结果,并将结果读入缓冲区中;
f)根据恢复的块编号,将计算结果写入到不同的文件中。
实验部分
本发明分别在PC机和Altera公司的DE1-SOC开发板上对发明方法进行了实验验证,对比了本发明和通用RS码编解码策略的性能差异。实验环境如表1和表2所示。
表1 PC机软硬件环境
表2 ALTERA DE1-SOC软硬件环境
本发明的主要工作是利用OpenCL对纠删码的编解码的计算过程进行加速,因此为了除其他因素对实验结果的影响,在测量性能时只测量CPU计算的时间不测量文件IO的时间。在OpenCL中主要的计算任务由内核承担,因此可以认为内核执行时间即是纠删码的计算时间。本文对不同大小的文件采用RS(8,5)的编码策略进行编解码,解码时丢失文件的块数设为两块。图3和图4分别表示不同文件大小下的编码计算时间和解码计算时间。实验结果表明,采用本发明之后的编码时间比通用的编码时间缩短了4.81倍,解码时间缩短了4.37倍。

Claims (6)

1.一种基于OpenCL的RS码编解码方法,其特征在于,包括以下步骤:
步骤1,编写OpenCL内核程序,实现GF(2^8)的乘法运算;
步骤2,编译步骤1编写的内核程序生成硬件配置文件;
步骤3,初始化OpenCL内核启动环境;
步骤4,宿主机程序控制内核执行;
步骤5,纠删码编码;
步骤6,纠删码解码。
2.根据权利要求1所述的一种基于OpenCL的RS码编解码方法,其特征在于,步骤1具体包括以下步骤:
a)定义一个工作项私有变量,其值为要编解码矩阵中要进行Galois域矩阵乘法的元素;
b)定义两个全局内存中的缓冲区,一个为只读类型的内存,用来存储要进行编解码计算的源文件;一个为只写类型的内存,用来存储计算之后的结果;
c)定义两个只读类型,大小为255的数组,分别用来存储Galois域乘法运算的正表和反表;正表和反表用来做Galois域乘法运算;其中正表下标i等于生成元的指数,下标对应的元素值等于对应的生成元的i次方的值,反表和正表是对应的,反表的下标为正表中对应的元素值,反表的元素值为正表的下标;
d)生成一个一维的索引空间,获取每个工作项的全局id;每个工作项根据自身的全局id从源文件缓冲区*src中取不同的数据并行的进行运算;
e)每个工作项分别从反表中查询编解码矩阵中的参与运算的元素的下标以及原始文件中参与计算的字节的下标;
f)将上一步中查询到的下标相加并且取模255,得到上一步中Galois域乘法运算结果的下标;
g)根据上一步中计算得到的下标,在正表中查询Galois乘法运算的结果,并将其写入到存储计算结果的缓冲区中。
3.根据权利要求1所述的一种基于OpenCL的RS码编解码方法,其特征在于,步骤3具体包括以下步骤:
a)获取程序运行平台的信息,将平台id存储到一个数组之中;
b)对于每个一个运行平台,获取该平台上的所有设备;
c)创建上下文,并将上下文与上一步中获取到的设备关联起来;
d)创建程序对象,将编译完成后的内核文件转换成字符串,并将字符串与OpenCL设备和上下文关联起来,生成一个程序对象;
e)创建一个与上下文设备关联的命令队列,用做宿主机程序与内核程序之间的通信;
f)创建一个与程序对象关联的内核对象;
g)根据内核程序中的参数,创建出四个存储器对象,一个只读类型的存储器对象用来存储要进行编码的源文件,两个只读类型大小为256字节的存储器对象,分别用来存放正表和反表,一个只写类型的存储器对象用来存储计算之后的结果。
4.根据权利要求1所述的一种基于OpenCL的RS码编解码方法,其特征在于,步骤4具体包括以下步骤:
a)创建两个OpenCL事件,一个用于控制内核执行,另一个用于控制读出内核的计算结果;
b)创建一个大小为三的OpenCL事件数组,用于控制将数据写入到之前创建的存储器对象中;
c)分别将源文件,以及正表和反表写入到对应的存储器对象中;
d)根据内核程序按照顺序设置内核参数,第一个为参与计算的编解码矩阵中的元素,第二个为输入的源文件存储器对象、第三个为输出的计算结果存储器对象,第四个为Galois域运算的正表,第五个为Galois域运算的反表;
e)通过命令队列发送命令,启动内核;
f)通过事件获得内核执行状态,等待内核执行完成之后,读出计算结果。
5.根据权利要求1所述的一种基于OpenCL的RS码编解码方法,其特征在于,步骤5具体包括以下步骤:
a)根据纠删码编码参数RS(n,k)计算生成矩阵,其中n表示编码之后生成的数据块和冗余块之和,k表示数据块的个数;
b)打开要进行编码的文件,并根据编码参数RS(n,k)以及文件大小,将文件等分为大小相等的k块;
c)创建n-k个大小为文件块大小的缓冲区,用来保存进行编码操作之后的计算结果;
d)从文件中分段读取出文件的内容,并计算当前内容处于哪个块,以及块内的偏移量;
e)调用OpenCL内核,计算当前文件内容与生成矩阵的进行Galois矩阵乘运算的结果,并将内核的计算结果读出缓冲区中;
f)将读取出来的原始文件内容,根据其所在块的位置,写入到不同的文件中;
g)将编码得到的冗余块写入到磁盘中;
h)完成所有文件的编码操作之后,删除原始文件。
6.根据权利要求1所述的一种基于OpenCL的RS码编解码方法,其特征在于,步骤6具体包括以下步骤:
a)分别从磁盘中读取目前尚未丢失的文件块;
b)根据RS码的编码参数,以及丢失的文件块数判断,是否可以进行解码操作;如果丢失的文件块数大于冗余块数,则无法进行解码操作,终止程序,否则可以恢复丢失文件,继续进行下一步;
c)根据已丢失文件块编号,删除生成矩阵中的对应行,并采用高斯-约旦消元法计算删除后矩阵的逆矩阵;
d)根据丢失文件块的个数创建缓冲区,用来存储解码操作的计算结果;
e)调用OpenCL内核,计算逆矩阵与未丢失文件块进行Galois矩阵乘运算的结果,并将结果读入缓冲区中;
f)根据恢复的块编号,将计算结果写入到不同的文件中。
CN201910419485.0A 2019-05-20 2019-05-20 一种基于OpenCL的RS码编解码方法 Active CN110244939B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201910419485.0A CN110244939B (zh) 2019-05-20 2019-05-20 一种基于OpenCL的RS码编解码方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201910419485.0A CN110244939B (zh) 2019-05-20 2019-05-20 一种基于OpenCL的RS码编解码方法

Publications (2)

Publication Number Publication Date
CN110244939A true CN110244939A (zh) 2019-09-17
CN110244939B CN110244939B (zh) 2021-02-09

Family

ID=67884533

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201910419485.0A Active CN110244939B (zh) 2019-05-20 2019-05-20 一种基于OpenCL的RS码编解码方法

Country Status (1)

Country Link
CN (1) CN110244939B (zh)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112114997A (zh) * 2020-09-11 2020-12-22 北京易安睿龙科技有限公司 一种辅助实现纠删码程序的工作方法
CN115393172A (zh) * 2022-08-26 2022-11-25 无锡砺成智能装备有限公司 基于gpu实时提取光条纹中心的方法及设备
CN117389571A (zh) * 2023-12-11 2024-01-12 芯动微电子科技(武汉)有限公司 一种基于opencl的jpeg2000中t1并行解码方法和装置

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20110078543A1 (en) * 2007-02-12 2011-03-31 Link_A_Media Devices Corporation Parallel inversionless error and erasure processing
CN102833040A (zh) * 2012-08-03 2012-12-19 中兴通讯股份有限公司 解码处理方法、装置及编解码系统
CN102938653A (zh) * 2012-11-13 2013-02-20 航天恒星科技有限公司 一种利用图形处理器gpu实现的并行rs译码方法
CN103973431A (zh) * 2014-04-16 2014-08-06 华南师范大学 一种基于OpenCL的AES并行化实现方法
CN105335150A (zh) * 2014-08-13 2016-02-17 苏宁云商集团股份有限公司 纠删码数据的快速编解码方法和系统
CN109491599A (zh) * 2018-10-24 2019-03-19 山东超越数控电子股份有限公司 一种分布式存储系统及其异构加速方法

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20110078543A1 (en) * 2007-02-12 2011-03-31 Link_A_Media Devices Corporation Parallel inversionless error and erasure processing
CN102833040A (zh) * 2012-08-03 2012-12-19 中兴通讯股份有限公司 解码处理方法、装置及编解码系统
CN102938653A (zh) * 2012-11-13 2013-02-20 航天恒星科技有限公司 一种利用图形处理器gpu实现的并行rs译码方法
CN103973431A (zh) * 2014-04-16 2014-08-06 华南师范大学 一种基于OpenCL的AES并行化实现方法
CN105335150A (zh) * 2014-08-13 2016-02-17 苏宁云商集团股份有限公司 纠删码数据的快速编解码方法和系统
CN109491599A (zh) * 2018-10-24 2019-03-19 山东超越数控电子股份有限公司 一种分布式存储系统及其异构加速方法

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112114997A (zh) * 2020-09-11 2020-12-22 北京易安睿龙科技有限公司 一种辅助实现纠删码程序的工作方法
CN115393172A (zh) * 2022-08-26 2022-11-25 无锡砺成智能装备有限公司 基于gpu实时提取光条纹中心的方法及设备
CN115393172B (zh) * 2022-08-26 2023-09-05 无锡砺成智能装备有限公司 基于gpu实时提取光条纹中心的方法及设备
CN117389571A (zh) * 2023-12-11 2024-01-12 芯动微电子科技(武汉)有限公司 一种基于opencl的jpeg2000中t1并行解码方法和装置
CN117389571B (zh) * 2023-12-11 2024-04-12 芯动微电子科技(武汉)有限公司 一种基于opencl的jpeg2000中t1并行解码方法和装置

Also Published As

Publication number Publication date
CN110244939B (zh) 2021-02-09

Similar Documents

Publication Publication Date Title
CN110244939A (zh) 一种基于OpenCL的RS码编解码方法
Liu et al. Data compression device based on modified LZ4 algorithm
US6691305B1 (en) Object code compression using different schemes for different instruction types
TW201732567A (zh) 用於資料解壓縮的硬體設備及方法
KR20010113673A (ko) 휴대용 포켓 비디오 게임 시스템에 사용하기 위한 패턴 및심벌 런 렝스 인코딩을 기초로 한 데이터 압축/압축 해제
MX2008014048A (es) Predescodificacion de instrucciones de longitud variable.
CN103198505B (zh) 一种基于gpu渲染游戏角色及角色换装的方法和装置
EP0034142A1 (en) GALOIS FIELD COMPUTER.
US20110307471A1 (en) Accelerating Database Management System Operations
TW201626730A (zh) 用於有效以lz77爲基礎的資料解壓縮之技術
CN103927215A (zh) 基于内存盘与SSD硬盘的kvm虚拟机调度的优化方法及系统
Knorr et al. ndzip-gpu: efficient lossless compression of scientific floating-point data on GPUs
CN104268031A (zh) 一种用于磁盘阵列存储系统中固态硬盘的擦除码配置方法
Jun et al. Zip-io: Architecture for application-specific compression of big data
JP2009116661A (ja) 記憶装置、記憶方法、ならびに、プログラム
US10445218B2 (en) Execution of graphic workloads on a simulated hardware environment
US20080022155A1 (en) Facilitating testing of file systems by minimizing resources needed for testing
US20190319787A1 (en) Hardware acceleration of bike for post-quantum public key cryptography
CN104272241A (zh) 提高固态存储装置的寿命的数值表示
CN112000509B (zh) 一种基于向量指令的纠删码编码方法、系统及装置
Arefin Art of Programming Contest
KR20100139072A (ko) 다항식 데이터 처리연산
Wijaya Comparative analysis of performance run length (Rle) data compression design by vhdl and design by microcontroller
US10027345B2 (en) Wall encoding and decoding
CN101794221B (zh) .net文件中引用类型的压缩方法和装置

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant