1 .一种基于OpenCL实现时序数据延迟压缩的方法,其特征在于,包括如下步骤:
S1、设计CLSeries结构体、CLLazyBuffer结构体、CLUncompressedChunk结构体、
CLCompressedChunk结构体,作为时序数据异构延迟压缩数据的存储容器和辅助工具,将
cl_uncompressed_chunk定义为CLUncompressedChunk具体实例对象,将cl_compressed_
chunk定义为CLCompressedChunk具体实例对象;
S2、执行RedisModule_Onload函数,在RedisModule_Onload函数中通过RedisModule_
SubscribeToServer函数以回调函数的方式来注册事件处理器EvtTsChunkHandler;
定义REDISMO DULE_EVENT_ TS_CHUNK类型事件,通过Red is Mod ule的 API增加
RedisModule_FireServerEvent函数来发送定义的事件;
事件处理器EvtTsChunkHandler根据不同的事件类型和延迟压缩策略中的控制参数驱
动是否协调GPU执行实现了压缩算法的内核程序;
S3、定义CPU和GPU异构处理器共享内存区域的内存管理器CLMemoryManager,来为
CLUncompressedChunk结构体和CLCompressedChunk结构体申请和回收内存空间,该空间为
CPU与GPU的共享内存空间;
C L S e r i e s结 构体 中 的 前 缀 基 数 树 完 全 由 C P U 来 管 理 ,C P U 调用O p e n C L 标 准 的
CLEnqueueMapBuffer函数将上述申请的共享内存空间映射为CLSeries结构体中间接引用
cl_uncompressed_chunk和cl_compressed_chunk的指针;
S4、CPU处理器响应客户端写入时序数据请求为cl_uncompressed_chunk填充时序数据
时,事件处理器EvtTsChunkHandler接收到REDISMODULE_EVENT_TS_CHUNK事件,触发延迟压
缩策略,随后GPU处理器会将cl_uncompressed_chunk中的填充数据压缩并填充到cl_
compressed_chunk中,最后,CPU处理器用cl_compressed_chunk的压缩数据(即节点6)替换
基数树中与CLUncompressedChunk结构体相一致的未压缩填充数据。
2 .根据权利要求1所述的一种基于OpenCL实现时序数据延迟压缩的方法,其特征在于,
执行步骤S1,设计的CLSeries结构体定义了lazy_comp_flag标识和lazy_buffer指针,还定
义了NewSeries、AddSample、SeriesTrim三种函数,其中,
lazy_comp_flag标识用于定义时序数据序列是否采用延迟压缩策略;
lazy_buffer指针引用CLLazyBuffer结构体;
C L L a z y B u f f e r 结 构 体 中 定 义 了 指 向 C L U n c o m p r e s s e d C h u n k 结 构 体 和
CLCompressedChunk结构体的共享内存空间的指针 ,还定义了CLLazyCompress函数,
CLLazyCompress函数定义了延迟压缩策略;
CLUncompressedChunk结构体用于存储未压缩的数据块;
CLCompressedChunk结构体用于存储压缩的数据块。
3 .根据权利要求2所述的一种基于OpenCL实现时序数据延迟压缩的方法,其特征在于,
CLLazyCompress函数定义的延迟压缩策略为:
当cl_uncompressed_chunk的size大于等于”capacity*compress_factor”阈值时,调
用OpenCL标准定义的clEnqueueTask函数执行内核将CLUncompressedChunk结构体中时序
数据压缩后存储到cl_compressed_chunk的内存空间中。
4 .根据权利要求2所述的一种基于OpenCL实现时序数据延迟压缩的方法,其特征在于,
CLUncompressedChunk结构体用于存储未压缩的数据块,其具体定义了基准时间戳、样本、
权 利 要 求 书
1/2 页
2
相关文档
评论