TDengine 3.2.3.0 集成英特尔 AVX512!快来看看为你增添了哪些助力

news2024/11/16 15:40:34

在当今的 IoT 和智能制造领域,海量时序数据持续产生,对于这些数据的实时存储、高效查询和分析已经成为时序数据库(Time Series Database,TSDB)的核心竞争力。作为一款高性能的时序数据库,TDengine 不仅采用了先进数据处理算法,还在 3.2.3.0 版本引入了英特尔® AVX512 高级向量扩展指令集,实现并行处理数据,产品查询性能获得了进一步提升。本篇文章将深入介绍 TDengine 与 AVX512 集成的优化工作。

TDengine 与 AVX-512 集成原理

作为一种单指令多数据(Single Instruction Multiple Data,SIMD)指令集,英特尔® AVX-512 在密集型计算负载中有着得天独厚的优势。得益于其 512 位的寄存器宽度和两个 512 位的融合乘加(Fused Multiply Add,FMA)单元,该指令集能并行执行 32 次双精度、64 次单精度浮点运算,或操作 8 个 64 位和 16 个 32 位整数,极大地提升了数据的处理能力。

时序数据中存在大量相似数据,而 TDengine 对时序数据的处理流程是一致的。对于这些无前后依赖性的时序数据,采用 AVX512 并行处理数据可以显著提升系统性能。特别是在 TDengine 进行数据平均值查询时,由于符合数据并行化特点,引入 AVX512 技术可有效提升性能。

为了节省数据存储空间,TDengine 在数据存储前会进行编码处理,去除数据中的冗余,并进行压缩,从而使最终存储的数据占用空间大大减少。而数据平均值的查询过程则是相反的,需要对存储的数据进行解码和计算。如下图所示:

其中算法 Simple8B、ZigZag、Delta of Delta 可以通过 AVX512 进行优化。

  • Simple8B 的 AVX512 优化

如果要将相同长度的数据使用 Simple8B 存储在一个 64bit 空间中,例如每个有效数据占用 3bit,在 64bit 内,索引占用 4bit,剩下的 60bit 可以存储 20 个 3bit 的有效数据。在解码过程中,传统的方法是将每个有效的 3bit 数据逐个加载到 32bit 变量中,然后进行处理,这将需要进行 20 次处理。

而使用 AVX512 指令,可以一次并行将 8 个 3bit 的数据变换成 32bit 的数据,这样我们用很少的次数就可以处理完所有数据,大大提升了系统性能。如下图,payload 是 64bit 的 simple8B 数据,使用 AVX512 指令,通过并行同步移位和掩码的方式,一次提取出 8 个有效数据,并装载在 512bit 的寄存器里(32bit x 8),为 ZigZag 算法提供数据输入。

  • ZigZag 算法的 AVX512 优化

通过 AVX512 的指令,替代了之前的 8 次相同的循环操作,实现了一次并行处理 8 个数据,利用减法和移位异或操作,将数据还原成 ZigZag 编码前的数值。在优化后,只用了很少的 AVX512 指令,就实现了循环多次才能获得的结果,极大的减少了指令数,提升了系统的性能。

AVX512 的编译环境和运行环境

为了充分利用 AVX512 指令集,建议使用 gcc 版本 9 以上的编译器进行编译,以获得更完善的 AVX512 指令支持。在运行时,应检查 CPU 是否支持 AVX512 指令,只有在支持 AVX512 的 CPU 上运行 AVX512 指令,才能做到和其他非 AVX512 的 CPU 的代码兼容。

总而言之,通过利用英特尔® AVX512 高级向量扩展指令,TDengine 成功优化了数据处理算法,提升了时序数据库的性能。特别是针对 Simple8B 和 ZigZag 算法的优化,让时序数据的处理得以实现更高效的并行计算,通过一次性处理多个数据,减少了指令数,显著提升了系统的性能表现。

开启 AVX512 指令集优化以后,在 TDengine 新版本 3.2.3.0 上,解码整数类型数据的性能是软件解码性能的 1.82 倍,是 AVX2 指令集解码性能的 1.28 倍。这些优化措施也让 TDengine 在处理海量数据的查询和分析过程中更加高效,为实时应用场景提供了更强大的支持。

注:AVX指令集支持的开启,需要用户自己编译代码并打开配置开关。具体操作可以联系 TDengine 官方团队。

特别鸣谢:在本次 TDengine 与 AVX512 的优化集成工作中,英特尔数据中心与人工智能事业部的高级软件架构师蒋锴,凭借专业知识和技术能力,积极推动着优化工作的进展,为 TDengine 的发展贡献着重要的力量。


 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1859377.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Spring容器启动流程——refresh()单个方法分析

文章目录 Spring启动过程this()方法refresh()prepareRefresh()obtainFreshBeanFactory()prepareBeanFactory()postProcessBeanFactory()invokeBeanFactoryPostProcessorsregisterBeanPostProcessorsinitMessageSource()initApplicationEventMulticaster()onRefresh()registerLi…

面向对象六大设计原则--依赖倒置

目录 六大原则 定义 概念 Java语言中的表现 优点 在设计模式中体现 工厂方法模式 观察者模式 状态模式 示例 手机模块设计 五个示例 一、读取数据 二、发送消息 三、支付方式 四、日志记录 五、数据持久化 使用汽车驾驶进行说明 依赖的三种写法 1.构造函数…

从0开始C++(一):从C到C++

目录 c的基本介绍 C语言和C 的区别 面向过程和面向对象的区别 引用 引用使用的注意事项 赋值 终端输入 cin getline string字符串类 遍历方式 字符串和数字转换 函数 内联函数 函数重载overload 小练习: 参考代码 c的基本介绍 C是一种通用的高级编…

学习金字塔模型

学习金字塔模型由美国缅因州巴特尔教育研究所(National Training Laboratories, Bethel, Maine)开发,它展示了不同学习活动的平均知识保留率。这种方法可以帮助人们理解不同学习方式的有效性,从而更好地选择适合的学习方法。学习金…

数据库断言-数据库更新

数据库更新的步骤和查询sql的步骤一致 1、连接数据库 驱动管理器调用连接数据库方法(传入url,user,password),赋值给变量 2、操作数据库 connection调用参数化方法,对sql语法进行检查,存储s…

新质生产力潮水里:谁在为中小企业搭起一座桥?

与其说华为云为中小企业提供的是一个个更具性价比和产业适配度的产品,更本质来看,其通过618营销季为中小企业提供了一个数字化转型升级的契机,基于此,企业可以在云计算和AI时代实现内在变革,焕发新的生机与活力。 作者…

Tomcat get请求传数组集合参数

前言 最近做项目,需要通过GET传参,来实现查询的能力,本来是RPC调用,直接参数序列化即可。但是服务最近修改为HTTP,本来Spring Cloud的feign也可以直接传参数,但是当使用Nginx访问时参数到底传啥呢&#xf…

微软将停用 App Center:React Native 开发人员应该使用以下工具

再见,应用中心!你好,EAS + Sentry + GitHub Actions! React Native 开发人员大遗憾:微软宣布将于 2025 年 3 月 31 日关闭Visual Studio App Center。 多年来, Infinite Red一直将 App Center 作为许多 React Native 咨询客户的 CI/CD 流程和开发工作流程的关键部分。它有…

零基础MySQL完整学习笔记

零基础MySQL完整学习笔记 1. 基础操作(必须会!)1.1 修改密码(4种方法)1.2 创建新用户1.3 导入数据库 2. SQL四种语言介绍2.1 DDL(数据库定义语言)2.2 DML(数据操纵语言)2.3 DCL(数据库控制语言)2.4 TCL(事务控制语言) 3. 数据库操作3.1 创建数据库3.2 查询数据库3.3 删除数据库…

SpringCloud分布式微服务链路追踪方案:Zipkin

创作博客的目的是希望将自己掌握的知识系统地整理一下,并以博客的形式记录下来。这不仅是为了帮助其他有需要的人查阅相关内容,也是为了自己能够更好地巩固和加深对这些知识的理解。创作的时候也是对自己所学的一次复盘和总结,在创作的过程中…

python爬虫需要什么HTTP代理?

用来爬虫的话,还是建议用高匿名代理,但显然题主用了高匿名代理还是出现了一部分问题,我们可以先找到问题关键再解决它,一般爬虫用了高匿名代理出现被封会有以下几种原因: 1.代理IP的质量不过关 一般来说每个网站都有…

AI写文章生成器,这些工具都可以一键智能生成文章

在AI技术快速发展的今天,AI写作生成器成为我们创作内容的重要工具,它可以提高我们的写作效率,节省时间和精力。下面小编就来和大家分享几款优秀的AI写作生成器,帮助你快速生成高质量的文章。 1.专业AI写作工具-文章在线生成器 专…

ChatGPT对那些带有残疾迹象的简历有偏见——但它可以改善

ChatGPT对那些带有残疾迹象的简历有偏见——但它可以改善 去年,华盛顿大学(University of Washington)研究生凯特•格拉兹科(Kate Glazko)在寻找研究实习机会时注意到,招聘人员在网上发布消息称,他们使用OpenAI的ChatGPT和其他人工智能工具来…

如何模拟一个具有网络管理功能的被测件的一些思路

不知道大家有没有遇到过这个问题? 当我们在学习如何测试网络管理时,难题不在于如何编写测试脚本,而是编写完测试脚本后,没有真实被测件来让我们执行测试脚本,进而调试脚本。这也是我在给大家讲CANoe工具和CAPL编程语言…

Android Media Framework(八)OMXNodeInstance - Ⅰ

OpenMAX框架的学习有两大难点,一是组件的状态切换与buffer的流转过程,这部分内容我们已经在IL Spec中学习过了;二是OMX组件使用的buffer类型与buffer分配过程,这一节我们来重点剖析OMX组件使用的buffer类型。 1、引言 在实际应用…

我原以为政务类网站不追求漂亮,打脸啦,漂亮得颠覆你认知。

我原本以为政务类网站一定时沉稳、工整、信息量大的,这些和漂流都关联不上,直到最近看了一些网站,发现我的认识狭隘了。 政务类网站的设计风格通常需要注重以下几个方面: 稳重和专业感: 政务类网站需要给人以稳重、正…

c++分隔字符串

可以使用getline函数。 有两个版本: 至于为什么可以使用getline函数返回值作为while的判断条件,cprimer中表述如下:

51-60 CVPR 2024 最佳论文 | Generative Image Dynamics

在2023年11月,谷歌研究院发布了一项令人瞩目的研究成果——Generative Image Dynamics(生成图像动力学)。这项技术的核心是将静态的图片转化为动态的、无缝循环的视频,而且更令人兴奋的是,这些生成的视频还具有交互性。…

【Web APIs】JavaScript 事件基础 ② ( “ 事件 “ 开发步骤 | 常见鼠标 “ 事件 “ )

文章目录 一、" 事件 " 开发步骤1、" 事件 " 开发步骤2、完整代码示例 二、常见鼠标 " 事件 "1、常见鼠标 " 事件 "2、鼠标 " 事件 " 代码示例 Web APIs 博客相关参考文档 : WebAPIs 参考文档 : https://developer.mozilla…

计算机组成原理 | CPU子系统(1)基本概述

基本结构模型 运算与缓存部件 数据寄存部件 PSW不是很清楚 存储器是什么?属于那个结构里? 时序处理部件 cpu是大脑,控制器是神经元 ①通过硬件产生控制信号 ②通过软件产生控制信号 外频(系统时钟信号),…