并行笔记——SIMD编程

2023-10-15 10:58
文章标签 笔记 编程 并行 simd

本文主要是介绍并行笔记——SIMD编程,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

SIMD概念

Single Instruction Multiple Data
也就是单指令流和多数据流,对于多数据流进行相同的操作。
一个简单的例子就是向量的加减。

和MIMD的区别

SIMD拥有单个全局控制单元,而后者拥有多个控制单元+处理元素。

SIMD的应用

图像处理

音频

科学计算

基于数据的数据并行计算。

什么情况下适合应用SIMD

  1. 规律的数据访问模式:数据在内存中连续存储。
  2. 短数据类型
  3. 流式数据处理
  4. ……

Mark:原因不明,之后补上解释。

使用SIMD的优缺点

优点

  1. 具有更大的并发度。
  2. 设计比较简单(应该是与MIMD对比,只需要重复功能单元即可)。
  3. 芯片尺寸更小。

缺点

  1. 程序员开发时必须显式接触硬件。

SIMD并行的问题

SIMD并行开发,可以把多次相同的算术运算简化为一个SIMD操作多个取数/存结果的操作,可以变成一个对于更宽的内存的一次操作(前提是内存需要连续)。

SIMD编程的复杂性

低层编程要求:

  1. 数据必须对齐。
  2. 数据放在连续区域存储。
  3. 控制流问题可能会引入更高的复杂性。

额外开销

  1. 打包、解包开销
    所谓的打包,指的是把运算对象拷贝到连续内存区域。
    解包,指的是把运算结果拷贝回内存。
  2. 对齐开销
    对齐的定义是地址的开始总是向量长度的整数;对于起始地址的偏移是向量长度的整数倍。
    Mark:关于PPT中的调整没有看明白,待补充。
  3. 控制流开销
    控制流开销来自当控制流存在时,所有的路径都执行。这说明一般情况下,当存在控制流问题时,SIMD不是一个好的编程模型
    以下述为例:
    对于所有元素都执行了两个路径的计算,只是最后根据判断条件进行合并。
    在这里插入图片描述

SSE/AVX编程

指令介绍

  1. Blend(A, B, 0xA)
    这里的0xA即1010,作用是掩码;如果为1则取第一个参数向量的数字,如果为0则取第二个参数向量的数字。
  2. Shuffle(D, D, 0xB1)
    这里的0xB1是八位二进制,分成四组;前两组是对应第二个参数的第几位,后两组是对应第二个参数的第几位。

这篇关于并行笔记——SIMD编程的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/217213

相关文章

MySQL的JDBC编程详解

《MySQL的JDBC编程详解》:本文主要介绍MySQL的JDBC编程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录前言一、前置知识1. 引入依赖2. 认识 url二、JDBC 操作流程1. JDBC 的写操作2. JDBC 的读操作总结前言本文介绍了mysq

Java Stream 并行流简介、使用与注意事项小结

《JavaStream并行流简介、使用与注意事项小结》Java8并行流基于StreamAPI,利用多核CPU提升计算密集型任务效率,但需注意线程安全、顺序不确定及线程池管理,可通过自定义线程池与C... 目录1. 并行流简介​特点:​2. 并行流的简单使用​示例:并行流的基本使用​3. 配合自定义线程池​示

从原理到实战解析Java Stream 的并行流性能优化

《从原理到实战解析JavaStream的并行流性能优化》本文给大家介绍JavaStream的并行流性能优化:从原理到实战的全攻略,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的... 目录一、并行流的核心原理与适用场景二、性能优化的核心策略1. 合理设置并行度:打破默认阈值2. 避免装箱

Python异步编程之await与asyncio基本用法详解

《Python异步编程之await与asyncio基本用法详解》在Python中,await和asyncio是异步编程的核心工具,用于高效处理I/O密集型任务(如网络请求、文件读写、数据库操作等),接... 目录一、核心概念二、使用场景三、基本用法1. 定义协程2. 运行协程3. 并发执行多个任务四、关键

AOP编程的基本概念与idea编辑器的配合体验过程

《AOP编程的基本概念与idea编辑器的配合体验过程》文章简要介绍了AOP基础概念,包括Before/Around通知、PointCut切入点、Advice通知体、JoinPoint连接点等,说明它们... 目录BeforeAroundAdvise — 通知PointCut — 切入点Acpect — 切面

Python学习笔记之getattr和hasattr用法示例详解

《Python学习笔记之getattr和hasattr用法示例详解》在Python中,hasattr()、getattr()和setattr()是一组内置函数,用于对对象的属性进行操作和查询,这篇文章... 目录1.getattr用法详解1.1 基本作用1.2 示例1.3 原理2.hasattr用法详解2.

C#异步编程ConfigureAwait的使用小结

《C#异步编程ConfigureAwait的使用小结》本文介绍了异步编程在GUI和服务器端应用的优势,详细的介绍了async和await的关键作用,通过实例解析了在UI线程正确使用await.Conf... 异步编程是并发的一种形式,它有两大好处:对于面向终端用户的GUI程序,提高了响应能力对于服务器端应

C# async await 异步编程实现机制详解

《C#asyncawait异步编程实现机制详解》async/await是C#5.0引入的语法糖,它基于**状态机(StateMachine)**模式实现,将异步方法转换为编译器生成的状态机类,本... 目录一、async/await 异步编程实现机制1.1 核心概念1.2 编译器转换过程1.3 关键组件解析

Go语言数据库编程GORM 的基本使用详解

《Go语言数据库编程GORM的基本使用详解》GORM是Go语言流行的ORM框架,封装database/sql,支持自动迁移、关联、事务等,提供CRUD、条件查询、钩子函数、日志等功能,简化数据库操作... 目录一、安装与初始化1. 安装 GORM 及数据库驱动2. 建立数据库连接二、定义模型结构体三、自动迁

Python 异步编程 asyncio简介及基本用法

《Python异步编程asyncio简介及基本用法》asyncio是Python的一个库,用于编写并发代码,使用协程、任务和Futures来处理I/O密集型和高延迟操作,本文给大家介绍Python... 目录1、asyncio是什么IO密集型任务特征2、怎么用1、基本用法2、关键字 async1、async