【DOTS学习笔记】面向数据设计DOD

news2025/1/16 5:44:14

目录

  • 前言
  • 程序设计方法
  • ODD->DOD
  • Cache的3C与3R
  • 面向数据设计需要思考的问题
    • AOS
    • SOA
  • DOTS面向数据设计原则


前言


本文是Metaverse大衍神君的《DOTS之路》系列课程的学习笔记

程序设计方法


  • Instructional Programming 指令化编程
    • 脱离指令打孔输入后,伴随着机器汇编语言发展起来的
  • Functional Programming 函数化编程
    • 伴随着PASCAL语言出现,以小函数模块化组合的编程方式
    • 限制小、易于调试
    • 主要用在数学和科学计算领域
    • 如今的机器学习、AI领域,函数编程依然焕发着活力
  • Procedural Programming 过程化编程
    • 源于命令式的编程方式
    • 基于过程调用的概念,包含要执行的计算步骤
    • 任何给定的过程都可以在程序执行过程中的任何时刻调用
  • Object-Oriented Programming/Design 面向对象编程/设计(OOP/OOD)
    • 以对象为概念的多范式模型
    • 包含字段形式的数据与过程形式的代码
    • 通常以类为基础,强调数据的封装、类的继承与数据的多态特征
  • Data-Oriented Design(DOD) 面向数据设计
    • 伴随着现代CPU多核并行计算、多级缓存、大缓存的设计而流行起来
    • DOD并不是一种编程范式,DOTS式面向数据编程的一种范式

ODD->DOD


  • 面向对象设计->面向数据设计
    • 面向对象设计
      • 核心在于:抽象、封装、继承
      • 对人类来说更直观、易于理解
      • 对现代CPU来说处理效率并不高效
    • 面向数据设计
      • 侧重于数据
      • 需要考虑需要什么数据以及如何在内存中更好的构造数据
      • 以便CPU处理数据系统时,能更有效的访问数据
  • DOD本质:面向内存/缓存友好的设计
    • CPU缓存层级结构
      • CPU 1 cycle
      • L1 Cache 1~5 cycle
        • L1D 数据缓存
        • L1I 指令缓存
      • L2 Cache 5~20 cycle
        • CPU核内多个指令处理单元所共享
      • L3 Cache 20~40 cycle
        • CPU多个核所共享
        • 负责与内存以及显卡中的显存交换数据
      • Main Memory 40~100 cycle

  • CPU在执行指令程序时,通过Prefetching来获取指令与数据
  • CacheLine缓存行
    • 每次访问的单位会根据系统与架构的不同而有所差异
    • 一般32或64个字节
    • 即使请求一个字节大小,实际上会得到CacheLine大小的缓存行数据
  • 在Cache缓存内
    • 可以将n个缓存行大小的缓存通过Direct-Map直接映射到同一逻辑缓存行
    • 逻辑缓存行可以对应n个物理行,来帮助最小化缓存行的抖动
      (抖动:挪动指针到每个物理缓存行的头)

在这里插入图片描述


先看右侧下方的图:

  • CPU逻辑处理单元完成一条程序指令(其完成时间定义为CPU指令的cycle)
    • Fetch获得L1I指令缓存中的指令
    • Decode解码
    • Excution 执行
    • 执行完成后回写到L1D中

左侧的图:

  • CPU处理指令时,从不同的缓存Cache中获取数据的时间开销也不同
  • 获取的数据在某一级缓存没有命中时,向下一级缓存获取时
    • 花费的时间开销可能是数倍时间
    • 甚至是数量级的差异的时间开销

Cache的3C与3R


  • Compulsory misses:首次读取数据时,不可避免的Miss

  • Capacity misses:缓存空间不足,连续使用期间访问数据过多的话,无法保存所有活动的数据

  • Conflict misses:发生访问冲突时,由于数据映射到相同的缓存行,导致缓存的抖动

  • Rearrange 充血排列(代码、数据):更改布局以增加数据空间的局部性

  • Reduce减少(大小、缓存行读取):更小更只能的格式、压缩

  • Reuse重用(Cache lines):增加数据的时间(和空间)的局部性

面向数据设计需要思考的问题


  1. 哪些数据需要捆绑在一起,是一个概念还是有隐藏的含义
  2. 数据布局是如何设计的,AOS/SOA?支持 SIMD
  3. 目标平台内存的最小访问单位是多少,CPU各级缓存有多大?
  4. 数据多久需要一次,一帧一次,还是一帧多次,还是几乎不更新?
  5. 如何访问数据,随机/连续的还是stride或其他burst方式
  6. 总在修改数据还是只是读取数据,修改所有的内容,还是只修改一部分?
  7. 哪些数据设计对带宽的延迟影响大?

AOS


struct innerStruct
{
    float x;
    float y;
};

SOA


struct InnerArray
{
    float x[LEN];
    float y[LEN];
};

DOTS面向数据设计原则


  • 先设计,后编码
  • 为高效使用内存与缓存而设计
  • 为Blittable Data设计
  • 为普通情况设计
  • 拥抱迭代

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

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

相关文章

操作系统4小时速成:进程同步,临界资源,互斥,信号量的作用,死锁产生的四个条件,安全状态,银行家算法

操作系统4小时速成:进程同步,临界资源,互斥,信号量的作用,死锁产生的四个条件,安全状态,银行家算法 2022找工作是学历、能力和运气的超强结合体,遇到寒冬,大厂不招人&am…

vhost dpdk 共享内存

struct kvm_memory_slot http://tinylab.org/kvm-intro-part1 https://www.cnblogs.com/LoyenWang/p/13943005.html (免费订阅,永久学习)学习地址: Dpdk/网络协议栈/vpp/OvS/DDos/NFV/虚拟化/高性能专家-学习视频教程-腾讯课堂 更多DPDK相关学习资料有…

Mybatis-Plus——分页+模糊查询

建表: create table pms_brand (brand_id bigint not null auto_increment comment 品牌id,name char(50) comment 品牌名,logo varchar(2000) comment 品牌logo地址,descript longtext comment 介绍,sh…

使用ReentrantLock中的条件变量让多个线程顺序执行

一. 前言 近日壹哥的一个学生在参加某公司校招面试时,遇到一个多个线程顺序执行的面试题,特意记录下来和大家分享一下,这个题目的具体要求是这样的: 假设有3个线程 a,b,c,要求三个线程一起进入到就绪态,执…

【LeetCode】775. 全局倒置与局部倒置

题目描述 给你一个长度为 n 的整数数组 nums &#xff0c;表示由范围 [0, n - 1] 内所有整数组成的一个排列。 全局倒置 的数目等于满足下述条件不同下标对 (i, j) 的数目&#xff1a; 0 < i < j < n nums[i] > nums[j] 局部倒置 的数目等于满足下述条件的下标 i 的…

01-Linux

1 初识Linux 在前面的课程中&#xff0c;我们无论是开发、测试。部署、存储都在Windwos操作系统的环境中&#xff0c;从今天开始我们一起学习下Linux,Linux系统和Windows系统最大的区别就是图形化界面操作和用途上有所差异&#xff0c;除了这两点&#xff0c;两者有异曲同工之…

跑通官方的yolov7-tiny实验记录(yolov7-tiny可作为yolov5s的对比实验网络)

目录1. 一些可用的参考链接2. 开始训练yolov72.1 --weights2.2 --cfg2.3 --data2.4 --hyp2.5 --epochs2.6 --batch-size2.7 --workers2.8 --name1. 一些可用的参考链接 官方YOLOv7 项目地址&#xff1a;https://github.com/WongKinYiu/yolov7如果想设置早停机制&#xff0c;可…

2022年TI杯模拟电⼦系统设计专题邀请赛——李萨如图形演示装置

任务 设计并实现李萨如&#xff08;Lissajous&#xff09;图形演示装置&#xff0c;如图 1 所示。输入正弦信号作为 x 轴信号&#xff0c;其峰峰值 2V&#xff0c;频率 1.5kHz~2kHz&#xff1b;对输入的正弦信号进行幅度和频率变换后产生 y 轴信号&#xff1b;装置显示器上显示…

CentOS7 离线安装 Python

目录1.前言2.下载Python及依赖环境&#xff08;1&#xff09;下载Python源码&#xff08;2&#xff09;下载Python依赖文件&#xff08;3&#xff09;下载gcc环境文件&#xff08;备用&#xff09;3.上传至离线服务器&#xff08;1&#xff09;核对已下载离线文件&#xff08;2…

基于PSO粒子群优化的汽车刹车稳定性数据matlab仿真与分析

欢迎订阅《FPGA学习入门100例教程》、《MATLAB学习入门100例教程》 目录 一、理论基础 二、核心程序 三、测试结果 一、理论基础 刹车类别A 温度1 测试1 测试2 ....... 测试n 温度3 测试1 测试2 ....... 测试n ....... ....... 温度N 测试1 …

Java语言的过滤数据流

过滤数据流 为了解决不同数据流之间速度、数据格式差异的问题&#xff0c;以便提高输入/输出操作的效率&#xff08;特别是当需要大量的输入、输出操作的程序时&#xff09;&#xff0c;因此&#xff0c;Java贴心的提供了过滤流。 在已存在的数据流的基础上&#xff0c;过滤数…

IntelliJ IDEA

特色功能 IDEA所提倡的是智能编码&#xff0c;是减少程序员的工作&#xff0c;IDEA的特色功能有以下22点[1] &#xff1a; ● 智能的选取 在很多时候我们要选取某个方法&#xff0c;或某个循环或想一步一步从一个变量到整个类慢慢扩充着选取&#xff0c;IDEA就提供这种基于…

数据治理:数据标准的6大建设步骤及实施分享

“车同轨、书同文”&#xff0c;数字化时代&#xff0c;数据标准化是企业进行数字化转型的根基。数据标准与企业数据管理的每个域都相关&#xff0c;是数据治理工作的最基础内容。 元数据管理中&#xff0c;需要从业务属性、技术属性、管理属性三个方面定义数据标准&#xff1b…

第54篇-某网易易盾滑块请求data参数分析【2022-11-16】

声明:该专栏涉及的所有案例均为学习使用,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关!如有侵权,请私信联系本人删帖! 文章目录 一、前言二、流程分析三、data参数1.d值2.p值3.ext值一、前言 在很久以前我们使用selenium+OpenCV模拟过一次易盾盾滑块…

学习大数据之后可以做什么?未来发展怎么样?

当下&#xff0c;有很多小伙伴看中了大数据开发的前景&#xff0c;从而选择了学习大数据的行列当中来&#xff0c;只能说&#xff0c;坚持你的选择没有错~ 当下来看&#xff0c;可以说大数据是一种宝贵的战略资源&#xff0c;其潜在价值和增长速度正在改变着人类的工作、生活和…

人人开源搭建后台管理系统 逆向工程生成CRUD代码

一、什么是人人开源 也就是说和若依类似&#xff0c;都是快速帮我们开发一些简单的逻辑代码的&#xff0c;可以帮我们自动生成代码。 二、具体操作 我们现在就以renren-fast作为后台管理系统框架&#xff0c;用renren-fast-vue作为前端系统框架进行开发项目 具体操作如下所示&a…

做好一个BI项目的关键是什么

做好一个BI项目的关键是什么&#xff1f;有人会说&#xff0c;那肯定是报表&#xff0c;报表是数据分析最直接的成果展示&#xff0c;好的报表能够帮助企业从各种纷杂的信息中及时地发现关键有效的信息&#xff0c;从而为决策提供支持。诚然&#xff0c;报表很重要&#xff0c;…

SPI通信协议

目录一、什么是SPI协议二、SPI物理层三、SPI协议层一、什么是SPI协议 SPI&#xff08;Serial Peripheral Interface&#xff0c;串行外围设备接口&#xff09;通讯协议&#xff0c;是 Motorola 公司提出的一种同步串行接口技术&#xff0c;是一种高速、全双工、同步通信总线&a…

【PTA-训练day7】L2-019 悄悄关注 + L1-027 出租

L2-019 悄悄关注 - 哈希表 PTA | 程序设计类实验辅助教学平台 1、java - 喜闻乐见超时 import java.util.*;public class Main {public static void main(String[] args){Scanner scnew Scanner(System.in);int nsc.nextInt();String[] namesc.nextLine().split(" "…

Centos7.6 源码编译部署percona mysql 5.7.39-42

Centos7.6 源码编译部署percona mysql 5.7.39-42 参考链接&#xff1a; mysql5.7.35源码编译安装部署CentOS7 编译安装 Percona Server 5.7percona Server for MySQL 5.7源码安装 一、部署环境准备 更换阿里云yum源 cd /etc/yum.repos.d/ mkdir bak && mv *.repo ba…