并行笔记——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

相关文章

Linux 网络编程 --- 应用层

一、自定义协议和序列化反序列化 代码: 序列化反序列化实现网络版本计算器 二、HTTP协议 1、谈两个简单的预备知识 https://www.baidu.com/ --- 域名 --- 域名解析 --- IP地址 http的端口号为80端口,https的端口号为443 url为统一资源定位符。CSDNhttps://mp.csdn.net/mp_blog/creation/editor

【Python编程】Linux创建虚拟环境并配置与notebook相连接

1.创建 使用 venv 创建虚拟环境。例如,在当前目录下创建一个名为 myenv 的虚拟环境: python3 -m venv myenv 2.激活 激活虚拟环境使其成为当前终端会话的活动环境。运行: source myenv/bin/activate 3.与notebook连接 在虚拟环境中,使用 pip 安装 Jupyter 和 ipykernel: pip instal

【学习笔记】 陈强-机器学习-Python-Ch15 人工神经网络(1)sklearn

系列文章目录 监督学习:参数方法 【学习笔记】 陈强-机器学习-Python-Ch4 线性回归 【学习笔记】 陈强-机器学习-Python-Ch5 逻辑回归 【课后题练习】 陈强-机器学习-Python-Ch5 逻辑回归(SAheart.csv) 【学习笔记】 陈强-机器学习-Python-Ch6 多项逻辑回归 【学习笔记 及 课后题练习】 陈强-机器学习-Python-Ch7 判别分析 【学

系统架构师考试学习笔记第三篇——架构设计高级知识(20)通信系统架构设计理论与实践

本章知识考点:         第20课时主要学习通信系统架构设计的理论和工作中的实践。根据新版考试大纲,本课时知识点会涉及案例分析题(25分),而在历年考试中,案例题对该部分内容的考查并不多,虽在综合知识选择题目中经常考查,但分值也不高。本课时内容侧重于对知识点的记忆和理解,按照以往的出题规律,通信系统架构设计基础知识点多来源于教材内的基础网络设备、网络架构和教材外最新时事热点技术。本课时知识

【编程底层思考】垃圾收集机制,GC算法,垃圾收集器类型概述

Java的垃圾收集(Garbage Collection,GC)机制是Java语言的一大特色,它负责自动管理内存的回收,释放不再使用的对象所占用的内存。以下是对Java垃圾收集机制的详细介绍: 一、垃圾收集机制概述: 对象存活判断:垃圾收集器定期检查堆内存中的对象,判断哪些对象是“垃圾”,即不再被任何引用链直接或间接引用的对象。内存回收:将判断为垃圾的对象占用的内存进行回收,以便重新使用。

Go Playground 在线编程环境

For all examples in this and the next chapter, we will use Go Playground. Go Playground represents a web service that can run programs written in Go. It can be opened in a web browser using the follow

深入理解RxJava:响应式编程的现代方式

在当今的软件开发世界中,异步编程和事件驱动的架构变得越来越重要。RxJava,作为响应式编程(Reactive Programming)的一个流行库,为Java和Android开发者提供了一种强大的方式来处理异步任务和事件流。本文将深入探讨RxJava的核心概念、优势以及如何在实际项目中应用它。 文章目录 💯 什么是RxJava?💯 响应式编程的优势💯 RxJava的核心概念

论文阅读笔记: Segment Anything

文章目录 Segment Anything摘要引言任务模型数据引擎数据集负责任的人工智能 Segment Anything Model图像编码器提示编码器mask解码器解决歧义损失和训练 Segment Anything 论文地址: https://arxiv.org/abs/2304.02643 代码地址:https://github.com/facebookresear

函数式编程思想

我们经常会用到各种各样的编程思想,例如面向过程、面向对象。不过笔者在该博客简单介绍一下函数式编程思想. 如果对函数式编程思想进行概括,就是f(x) = na(x) , y=uf(x)…至于其他的编程思想,可能是y=a(x)+b(x)+c(x)…,也有可能是y=f(x)=f(x)/a + f(x)/b+f(x)/c… 面向过程的指令式编程 面向过程,简单理解就是y=a(x)+b(x)+c(x)

数学建模笔记—— 非线性规划

数学建模笔记—— 非线性规划 非线性规划1. 模型原理1.1 非线性规划的标准型1.2 非线性规划求解的Matlab函数 2. 典型例题3. matlab代码求解3.1 例1 一个简单示例3.2 例2 选址问题1. 第一问 线性规划2. 第二问 非线性规划 非线性规划 非线性规划是一种求解目标函数或约束条件中有一个或几个非线性函数的最优化问题的方法。运筹学的一个重要分支。2