向量化运算

article/2025/10/23 2:37:37

向量化运算OLAP

Clickhouse、dorisDB(starrocks)、spark(2.x以后)、 hive(0.13.0以后)、presto

SIMD

SIMD全称Single Instruction Multiple Data,单指令多数据流,能够复制多个操作数,并把它们打包在大型寄存器的一组指令集。
前提需要支持SIMD的CPU才能发挥其特性。

性能上优势

以加法指令为例,单指令单数据(SISD)的CPU对加法指令译码后,执行部件先访问内存,取得第一个操作数;之后再一次访问内存,取得第二个操作数;随后才能进行求和运算。而在SIMD型的CPU中,指令译码后几个执行部件同时访问内存,一次性获得所有操作数进行运算。这个特点使SIMD特别适合于多媒体应用等数据密集型运算。

注: 上面的内存指的是CPU寄存器

什么是vectorization

​ 向量化计算(vectorization),向量化计算是一种特殊的并行计算的方式,它可以在同一时间执行多次操作,通常是对不同的数据执行同样的一个或一批指令,或者说把指令应用于一个数组/向量

在这里插入图片描述

​ 上图中,左侧为vectorization,右侧为寻常的For loop计算。将多次for循环计算变成一次计算完全仰仗于CPU的SIMD指令集,SIMD指令可以在一条cpu指令上处理2、4、8或者更多份的数据。

​ 因此简单来说,向量化计算就是将一个loop处理一个array的时候每次处理1个数据共处理N次,转化为vectorization处理一个array的时候每次同时处理8个数据共处理N/8次。

向量化运算的实例

​ 在Python的numpy库中使用向量化(Vectorization)计算,速度是非向量化(non-Vectorization)计算(即循环)的700倍(当前开发环境),因为向量化计算使用了python的内建函数,调用了CPU/GPU的SIMD指令集进行计算,大大减少了因为python高级语言执行损耗的时间。

实例:

import numpy as np
import timecnt=10000000
a = np.random.rand(cnt)
b = np.random.rand(cnt)tic = time.time()
c = np.dot(a, b)
toc = time.time()
print("c: %f" % c)
print("vectorized version:" + str(1000*(toc-tic)) + "ms")c = 0
tic = time.time()
for i in range(cnt):c += a[i] * b[i]
toc = time.time()
print("c: %f" % c)
print("for loop:" + str(1000*(toc-tic)) + "ms")

结果;

c: 2499089.213332
vectorized version:5.998373031616211ms
c: 2499089.213332
for loop:4685.6348514556885ms

http://chatgpt.dhexx.cn/article/FoSp73bQ.shtml

相关文章

常用的几种向量运算法则

a ⋅ b b ⋅ a ab ba a⋅bb⋅a a ( b ⋅ c ) ≠ ( a ⋅ b ) c a(bc)≠(ab)c a(b⋅c)​(a⋅b)c ( a b ) ⋅ c a ⋅ c b ⋅ c (ab)c acbc (ab)⋅ca⋅cb⋅c a b − b a ab - ba ab−ba ( r a ) b a ( r b ) r ( a b ) , 其 中 r 是 标 量 (ra)ba(rb)r(ab),其中r是…

空间向量及其运算

平面内任意向量 p \boldsymbol{p} p都可以用两个不共线的向量 a \boldsymbol{a} a b \boldsymbol{b} b来表示,这是平面向量的基本定理。类似的我们定义,如果三个向量不共面,那么对空间中的任一向量 p \boldsymbol{p} p,存在有序实…

数学-向量运算

1、外积(差乘) 定义:向量a与b的外积ab是一个向量,其长度等于|ab| |a||b|sin∠(a,b),其方向正交于a与b。并且,(a,b,ab)构成右手系。 特别地,0a a0 0.此外,对任意向量a&#xff0c…

向量

向量对数学家是数字列表 向量对程序员是数组 数学上区分向量和标量 速度和位移是向量,速率和长度是标量 向量的维度:数的个数 写法:横着写行向量,竖着写列向量 几何意义 大小:向量的长度 方向:空间中的…

MATLAB——向量的运算

文章目录 一.向量的定义:***向量的生成方法:直接输入法、冒号法和利用MATLAB函数创建三种方法。*** 二.向量元素的引用:三.向量的定义与赋值:四.向量的点积运算:向量的叉积:向量的混合积: 一.向…

【math】 向量运算:叉乘

文章目录 1 定义2 几何意义3 拓展应用 1 定义 cab 向量的叉乘,即求同时垂直两个向量的向量,即c垂直于a,且c垂直于b。 假设向量a(a.x,a.y,a.z),b(b.x,b.y,b.z),c(c.x,c.y,c.z), 则cab(a.x,a.y,a.z)(b.x,b.y,b.z)(a.y * b.z - a…

了解向量运算

了解向量运算 向量运算是制作三维图形、物理和动画的基础,深入了解向量运算有助于充分利用 Unity 的大部分功能。下方介绍了主要的向量运算方法,以及将向量运算用于多种用途时的建议。 加法 两向量相加的值等于将两个向量首尾相接,以原向量为…

向量的基本运算

向量是什么 向量就是给定一个点A,连接原点到点A,并具有由O到A方向的连线,表示为 O A ⃗ \vec{OA} OA . 书本的定义:向量就是具有大小和方向东西。 大小(magnitude) 向量的大小(magnitude)写作 ∥ x ∥ \Vert x \Vert ∥x∥,称为…

向量运算

零向量 任意一维都是0的向量,例如[0,0,0],3D零向量。 零向量是唯一大小为零的向量,也是唯一一个没有方向的向量。但不是点,只是没有位移。 负向量 要得到任意向量的负向量,只需要简单的将向量…

利用websocket实现群聊以及单聊

利用websocket实现群聊以及单聊 项目结构实现代码运行截图 在这里提供一下思路,正常情况下我们登陆进去之后就应该打开一个ws连接,以便和服务器进行通信,将打开的管道用一个set容器进行存储,并将用户名或者其他能唯一标示用户的字…

Java实现钉钉自定义群聊机器人

参考文档: 自定义机器人接入 - 钉钉开放平台https://open.dingtalk.com/document/orgapp/custom-robot-access 自定义机器人安全设置 - 钉钉开放平台目前有3种安全设置方式,请根据需要选择一种。https://open.dingtalk.com/document/robots/customize-ro…

Netty基础,Netty实现群聊系统

NIO群聊系统 这里面的知识比较全面,用到了我们之前学习的三大组件,首先我先来给大家介绍本系统的功能 服务端功能 最基本的当然是注册功能,也就是将serverSocketChannel注册进Selector,Selector负责调度事件 监听、读取客户端…

c语言 多进程实现基于UDP的网络群聊聊天室

功能 有新用户登录,其他在线的用户可以收到登录信息 有用户群聊,其他在线的用户可以收到群聊信息 有用户退出,其他在线的用户可以收到退出信息 服务器可以发送系统信息 流程图如下: 提示: 客户端登录之后&#x…

Spring Boot使用WebSocket实现群聊

1.通过https://start.aliyun.com创建一个spring boot项目 https://start.aliyun.com 所需依赖: 2.编写代码 目录: WebMvcConfig,监控用户页面: package com.example.mywbsk.config;import org.springframework.context.annotat…

网络编程 : 基于UDP的网络群聊聊天室

一、UDP网络编程: 1.1 流程 服务器流程: 创建用户数据报套接字 填充服务器的网络信息结构体 绑定套接字与服务器网络信息结构体 收发数据 关闭套接字 客户端流程: 创建用户数据报套接字 填充服务器的网络信息结构体 收发数据 关闭套接字 二、基于UDP的网络群聊聊天…

Java网络编程:TCP实现群聊功能代码

Java网络编程:TCP实现群聊功能代码 实现的功能:群聊 具体操作流程的大致思路: 某个客户端发送消息,服务器将该消息转发给其余客户端(除了自己)。 代码一共分两个端(服务器和客户端&#xff0…

【Java教程】UDP实现群聊聊天室

大家好,今天为大家带来了一个非常有意思的小程序——UDP实现的群聊聊天室。这个程序使用的UDP协议,并使用DatagramSocket的子类MulticastSocket实现组播,可以部署在一个局域网内的多台电脑上,并可以实现文字群聊。 本文将会按照以…

群聊私聊天建群社交即时通讯H5系统开发

群聊私聊天建群社交即时通讯H5系统开发 前端功能: 聊天、通讯录、动态、发现、我、多国语言、私聊、群聊、创建群聊(设置免费、收费)、发布动态、发信息(图片、文字、红包、不支持语言)、我的余额(后台添加…

socket.io实现简易版群聊

最近学了点 websocket 的技术知识,了解到 node.js 有相关技术——socket.io可以实现,就想着实现一个简单版本的群聊。 先看看效果图 在浏览器中打开2个窗口,访问 http://localhost:3000/socket 目录结构 node 服务器代码实现 需要安装 exp…

Go实现简易聊天室(群聊)

参考:Go 群聊 ( goroutine ) 语雀 基于websocket的聊天室,可进一步参考: (1) go实现聊天室(WebSocket方式) (2) Golang代码搜集-基于websocketvue.js的简易聊天室 闲着无聊ing~ 一直想着能用go整一些好玩的小工具,想着想着突然想…