首页 > 其他分享 >高性能计算-探究循环分块优化(2-1)

高性能计算-探究循环分块优化(2-1)

时间:2024-11-24 16:11:19浏览次数:10  
标签:分块 访问 cacheline 探究 高性能 miss 循环 加载

1. 目标:分析循环分块优化技术,并分析cache 命中情况

假设每个cacheline可以存储b个数据元素。

2. 源代码分析

for( int i=0;i<N;i++)
{
	for(int j=0;j<M;j++)
	{
		A[i] += B[j];
	}
}

cache miss分析:

对A总访问次数为 NM,每次访存加载一个cacheline 可以加载b个元素,并且连续访问,该cacheline所有元素在依次被访问前不会被替换掉,共需访存加载cacheline N/b次,每次加载都有一次miss,所以A共有N/b次miss;对B共访问 NM次,当M足够大时,cache无法装载整个数组B,内层一次循环需访存M/b次,N个循环共访存加载cacaheline NM/b次,每加载一次cacheline有一次miss,所以B在全部循环中 miss NM/b。总共 N/b + NM/b次 miss。

3. 循环分块优化

原理:源码中对B的访问miss过高,B cacheline被反复加载,考虑提高B cacheline 加载一次的利用效率,可考虑每加载一次,完成相应所有A元素的访问,假设L1 cache可以满足 A所有元素 cacheline 遍历和 若干组 B cacheline 的计算需求;加载 B cacheline 组的数量不应太大,假设里面包含了 T 个元素应有 T=nb , T,b << M,N。保证访问B[T-1]时,B[0]仍在 cache 中。

代码思路:对高miss 数据的访问索引分块,作为最外层循环控制变量,并在最内层循环控制块内循环。

for(int j=0;j<M;j+=T)
{
	for(int i=0;i<N;i++)
	{
		for(int t=0;t<T;t++)
			A[i] += B[i]; 
	}
}

cache miss分析:

A元素索引i的访问在内2层循环,每次循环共访问N次,每次访问一个cacheline有一个misss,所以每次循环有N/b个不命中,由于j是分块访问,共有 M/b个循环,所以A元素miss为 N/b *(M/T);B元素的访问最内层循环每次循环有 T/b个miss,T的取值为b的倍数并且不能太大,当访问B[T-1]时B[0]仍在cache中,对于第二层i的遍历,此时B[j]元素都在cache中,不影响第三层B元素 miss 数量,共有 M/T 次循环,所有B元素miss为 T/b *(M/T) = M/b。总共 MN/bT + M/b 次 miss。

4. 对比总结

分块前后AB全部miss比为(N/b+MN/b)/ (MN/bT + M/b) ,当MN足够大时,计算极限得 T。

分块后 A的miss增加,B的miss减少,总misss数为原来的 1/T。

标签:分块,访问,cacheline,探究,高性能,miss,循环,加载
From: https://www.cnblogs.com/anluo8/p/18565665

相关文章

  • 分块
    分块简单理解一下,分块就是优雅的暴力。分块的分类静态分块(只做查询,预处理):静态分块指的是放一些关键点,预处理关键点到关键点的信息,来加速查询的,不能支持修改。目前认为,如果可以离线,静态分块是莫队算法的子集。动态分块(支持修改和查询):动态分块指的是把序列分为一些块,每块......
  • 高性能计算-openmp-图像滤波(12)
    1.目标:使用openmp实现图像滤波算法给定一个输入图像,你的任务是将其划分为多个块,并使用多个进程对每个块进行滤波操作。要求:1、使用分段并行结构和指令section来并行执行不同的计算步骤。2、使用单线程指令single或master确保某些代码段只在单个线程中执行。3、使用线程同步......
  • 基于KU115+ZU19EG+C6678 的高性能6U VPX 载板
    基于KU115+ZU19EG+C6678的高性能6UVPX载板,板载2个HPC形式的FMC连接器(用于外部信号扩展)。板卡选用了1片Xilinx公司的KintexUltraScale系列FPGA家族中的XCKU115-2FLVA1517I和1片ZynqUltraScale+MPSoC家族的XCZU19EG-2FFVC1760I以及1片TI公司的DSP芯片T......
  • 408数据结构-折半查找,分块查找 自学知识点整理
    前置知识:查找的基本概念折半查找折半查找又称二分查找,它仅适用于有序的顺序表。因个人习惯,下文均用二分代替折半。二分查找的基本思想:首先将给定值ke......
  • XCVU9P 板卡设计原理图:616-基于6U VPX XCVU9P+XCZU7EV的双FMC信号处理板卡 高性能数字
     一、板卡概述     板卡基于6UVPX标准结构,包含一个XCVU9P高性能FPGA,一片XCZU7EVFPGA,用于IO扩展接口,双路HPCFMC扩展高速AD、DA、光纤接口等。是理想应用于  二、处理板技术指标  ●  主FPGA采用XCVU9P-2FLGA2104I;从FPGA型号为XCZU7EV-2FFVC1156I; ......
  • Redis如何实现高性能和高可用
    目录第一章Redis高性能和高可用概述1.1Redis简介1.1.1Redis基本概念1.1.2Redis特点1.1.3Redis应用场景1.2Redis高性能原理1.2.1内存数据结构优化1.2.2单线程模型与I/O多路复用1.2.3多线程异步I/O1.2.4数据持久化技术1.3Redis高可用架构1.3.1主从复制......
  • 脉冲目标检测网络模型SpikeYOLO——基于整值训练和脉冲驱动推理的高性能节能目标检测
    最近看到目标检测领域又出新作,ECCV2024满分Oral论文——《Integer-ValuedTrainingandSpike-DrivenInferenceSpikingNeuralNetworkforHigh-performanceandEnergy-efficientObjectDetection》论文地址在这里,如下所示:感兴趣的话可以移步阅读原文,这里趁着中午午休......
  • SC2310-CSBNN00高性能CMOS图像传感器芯片,安防监控、车载影像
    分辨率为2MPPixelArray1932Hx1092VPixelSize3.0μmx3.0μmBSI光学格式1/2.7“最大帧速·1920Hx1080V@60fps(MIPI)·1920Hx1080V@30fps(DVP)输出接口·12位DVP·12/10/8位1/2车道MIPI输出格式RAWRGBCRA12°灵敏度4800mV/Lux·sDynamicRang......
  • 在 ASP.NET Core 中编写高性能 Web API 的4个小技巧
    WebAPI通常用来与外部模块进行通信、发送和接收数据,作为后端开发人员,应该把写出高性能的应用作为目标。下面4个技巧是我在编写WebAPI的小技巧。1、大量数据使用分页查询接口传输大量数据可能会导致严重的性能问题、过多的内存消耗和速度减慢。为了缓解这些可能的瓶颈,强......
  • 医疗器械行业搭建知识付费小程序平台的必要性探究
    在当今数字化时代,医疗器械行业面临着诸多挑战与机遇。搭建知识付费小程序平台已成为行业发展的一个重要趋势,其必要性主要体现在以下几个方面。一、满足专业知识需求医疗器械行业具有高度的专业性和技术性。从产品的研发、生产到销售、使用以及售后服务,都涉及大量复杂的知识......