CPU 的Cache 和Latency

LatentSync本地部署教程:基于音频精准生成唇形高度同步视频 精准的唇形同步效果正成为众多AI创作的关键要素。字节重磅开源的LatentSync,可以实现超真实的唇形同步视频,解锁视频新体验!快跟着小编看看吧~ 阅读详情
CPU 速度的进展,一直比记忆体的速度进展要来得快。在 IBM PC XT 的时代,CPU 和记忆体的速度是差不多的。不过,后来 CPU 的速度就愈来愈快。再加上 DRAM 需要 refresh 才能保存资料的特性,DRAM 很快就跟不上 CPU 的速度了。现在的 CPU 都利用了 pipeline 的方式,可以每个 cycle 都 issue 一个(甚至多个)指令,再加上现在的 CPU 时脉也比记忆体的时脉高,记忆体的速度可说是远远落在 CPU 之后了。
  为了避免记忆体成为 CPU 速度的瓶颈,现在的 CPU 都有 cache 的设计,甚至还有多层的 cache。Cache 的原理,主要是利用到大部分的程式,在处理资料时,都有一定程度的区域性。所以,我们可以用一小块快速的记忆体,来暂存目前需要的资料。

  例如,几乎所有的程式,大部分的执行时间是花在一些回圈中。这些回圈通常都不大,可能只占整个程式空间的百分之一。如果一个程式经常要执行这段程式数千、甚至数万次,那就可以把这一小段程式放在 cache 中,CPU 就不需要每次都到很慢的主记忆体中读取这段程式了。很多一般用途的程式,在存取资料时,也有类似的特性。因此,cache 的帮助非常大。如果没有 cache 的话,我们就不需要这么快的 CPU 了,因为系统的速度会卡在记忆体的速度上面。

  现在的 CPU 往往也有多层的 cache。例如,Intel 的 Pentium III 500Mhz CPU,有 32KB 的 L1 cache,和 512KB 的 L2 cache。其中,L1 cache 内建在 CPU 内部,速度非常快,而且它是 Harvard 式,即指令用的空间和资料用的空间是分开的。Pentium III 500Mhz CPU 的 L1 cache 是分成 16KB 的 I-cache 和 16KB 的 D-cache。而 L2 cache 则是在 CPU 外面,以 250Mhz 的速度运作。另外,它和 CPU 之间的 bus 也只有 64 bits 宽。L2 cache 通常就不会区分指令和资料的空间,也就是 unified cache。

  Cache 对速度有什么影响呢?这可以由 latency 来表示。CPU 在从记忆体中读取资料(或程式)时,会需要等待一段时间,这段时间就是 latency,通常用 cycle 数表示。例如,一般来说,如果资料已经在 L1 cache 中,则 CPU 在读取资料时(这种情形称为 L1 cache hit),CPU 是不需要多等的。但是,如果资料不在 L1 cache 中(这种情形称为 L1 cache miss),则 CPU 就得到 L2 cache 去读取资料了。这种情形下,CPU 就需要等待一段时间。如果需要的资料也不在 L2 cache 中,也就是 L2 cache miss,那么 CPU 就得到主记忆体中读取资料了(假设没有 L3 cache)。这时候,CPU 就得等待更长的时间。

  另外,cache 存取资料时,通常是分成很多小单位,称为 cache line。例如,Pentium III 的 cache line 长度是 32 bytes。也就是说,如果 CPU 要读取记忆体位址 0x00123456 的一个 32 bits word(即 4 bytes),且 cache 中没有这个资料,则 cache 会将 0x00123440 ~ 0x0012345F 之间的 32 bytes 资料(即一整个 cache line 长度)都读入 cache 中。所以,当 CPU 读取连续的记忆体位址时,资料都已经读到 cache 中了。

  我写了一个小程式,用来测试 cache 的行为。这个程式会连续读取一块记忆体位址,并量测平均读取时间。这个 程式的执行结果如下:

测试平台:

Pentium III 500Mhz, PC100 SDRAM, 440BX chipset
Celeron 466Mhz, PC100 SDRAM, VIA Apollo Pro 133 chipset



  由上面的结果可以看出,当测试的区块大小在 16KB 以下时,平均的 latency 都在 1 ~ 3 cycles 左右。这显示出 16KB 的 L1 D-cache 的效果。在测试区块为 1KB 和 2KB 时,因为额外的 overhead 较高,所以平均的 latency 变得较高,但是在 4KB ~ 16KB 的测试中,latency 则相当稳定。在这个范围中,由于 Pentium III 和 Celeron 有相同的 L1 cache,所以测试结果是几乎完全相同的。

  在区块超过 16KB 之后,就没办法放入 L1 D-cache 中了。但是它还是可以放在 L2 cache 中。所以,在 Pentium III 的情形下,从 32KB ~ 512KB,latency 都在 10 cycles 左右。这显示出当 L1 cache miss 而 L2 cache hit 时,所需要的 latency。而 Celeron 的 L2 cache 只有 128KB,但是 Celeron 的 L2 cache 的 latency 则明显的比 Pentium III 为低。这是因为 Celeron 的 L2 cache 是 on-die,以和 CPU 核心相同的速度运作。而 Pentium III 的 L2 cache 则是分开的,且以 CPU 核心速度的一半运作。

  在区块超过 512KB 之后,L2 cache 就不够大了(Pentium III 500Mhz 只有 512KB 的 L2 cache)。这时,显示出来的就是 L1 cache miss 且 L2 cache miss 时,所需要的 latency。在 1024KB 或更大的区块中,Pentium III 的 latency 都大约是 28 cycles 左右,而 Celeron 的 latency 则超过 70 cycles。这是 CPU 读取主记忆体时,平均的 latency。而 Celeron 的 latency 较高,应该是因为其外频较低,而倍频数较高的缘故(Pentium III 500Mhz 为 5 倍频,而 Celeron 466 为 7 倍频)。另外,晶片组的差异也可能是原因之一。

  Cache 的效果十分明显。不过,有时候 cache 是派不上用场的。例如,当资料完全没有区域性,或是资料量太大的时候,都会让 cache 的效果降低。例如,在进行 MPEG 压缩时,存取的资料量很大,而且资料的重复利用率很低,所以 cache 的帮助就不大。另外,像是 3D 游戏中,如果每个 frame 的三角面个数太多,也会超过 cache 能够处理的范围。

  现在的电脑愈来愈朝向‘多媒体应用’,需要处理的资料量也愈来愈大,因此,要如何善用 cache 就成了一个重要的问题。一个非常重要的方法,就是把读取主记忆体的 latency 和执行运算的时间重叠,就可以把 latency‘藏’起来。通常这会需要 prefetch 的功能,也就是 AMD 在 K6-2 及之后的 CPU,和 Intel 在 Pentium III 之后的 CPU 加入的新功能。

  这里要用的‘实际例子’,其实还是很理想化的。为了和 3D 绘图扯上一点关系,这里就用‘4x4 的矩阵和 4 维向量相乘’做为例子。不过,一般在 3D 绘图中,都是用 single precision 的浮点数(每个数需要 32 bits),而这里为了让记忆体的因素更明显,我们使用 double precision 的浮点数(每个数需要 64 bits),也就是一个 4 维向量刚好需要 32 bytes。

在这个例子中,我们采取一个 3D 绘图中,相当常见的动作,也就是把一大堆 4 维向量,乘上一个固定的 4x4 矩阵。如果向量的个数非常多,超过 CPU 的 cache 所能负担,那么 CPU 的表现就会大幅下降。

为了让大家心里有个底,这里先把执行的结果列出来:

测试平台: Pentium III 500Mhz, PC100 SDRAM, 440BX chipset




在程式集可以下载程式的原始码和执行档。

  首先,我们来看没有使用 prefetch 指令的结果。事实上,结果相当符合预测。在 L1 D-cache 的范围内(即小于 16KB 的情形),平均的运算时间相当的稳定,约在 51 ~ 52 cycles 左右。这也是 Pentium III 在计算一个 4x4 矩阵和 4 维向量相乘时(使用 double precision 浮点数),可能达到的最快速度。当然,这个程式是用 C 写成的。如果直接用手写组合语言,可能还可以再快个 5 ~ 10 cycles。

  当资料量超过 L1 D-cache 的范围,但是还在 L2 cache 的范围之内时,所需的时间提高到约 60 cycles 左右。在 Part 1 中,我们已经知道 Pentium III 500Mhz 的 L2 cache 大约有 10 cycles 的 latency,所以这个结果也是相当合理的。

  当资料量超过 L2 cache 的范围时,所有的资料就需要从主记忆体中取得了。从图上可以很容易的看到,每次运算所需的时间增加到 145 ~ 150 cycles。这有点出乎意料之外:在 Part 1 中,读取主记忆体的 latency 只有 30 cycles 左右,但是在这里,latency 增加了约 100 cycles。不过,这个结果并不奇怪。因为在运算结束后,运算的结果必须要写回记忆体中,而写回记忆体的动作,需要很多时间。

  从这里可以看到,在资料量超过 L2 cache 的范围时,CPU 可说是被记忆体的速度限制住了。事实上,如果记忆体的速度不变,那即使是用两倍快的 CPU,速度的增加也会非常有限。以 3D 游戏的角度来说,1024KB 或 2048KB 这样的资料量并不算少见,因为一个 single precision 浮点数的 4 维向量,就需要 16 bytes 的空间。65,536 个 4 维向量就需要 1MB 的空间了。

  事实上,记忆体的速度虽慢,但是要完成一个 32 bytes(一个四维向量的大小)的读写动作,也只需要 60 ~ 70 cycles 而已(以 Pentium III 500Mhz 配合 PC100 SDRAM 的情形来算)。而在不用 prefetch 的情形下,CPU 的动作类似下图所示:




在上图中,CPU 的运算单元(即图中的 Execution Units)大部分的时间都在等待资料输入。而 Load/Store Unit 也有不少时间是不动作的。这显然不是最好的方法,因为 CPU 的两个单元都不是全速运作。

如果我们在 CPU 的运算单元进行计算工作时,就把下一个要计算的资料先载入到 CPU 的 cache 中,那么,CPU 的动作就会变成类似下图所示:



现在,Load/Store Unit 变成全速运作了。Execution Units 还是没有全速运作,但是这是没办法的。这种情形,就表示出瓶颈是在 Load/Store Unit,也就是在主记忆体的速度。已经没有任何方法可以加快执行的速度了(除非加快记忆体的速度)。

要注意的一点是,上面的情形是很少发生的真实世界中的。实际的程式,通常瓶颈都是在运算单元。不过,我们的例子则刚好不是这样(因为矩阵和向量相乘是很简单的运算),而是类似图中的情形。

要怎么告诉 CPU,在计算的同时将下一个资料载入到 cache 中呢?这时就要用到 prefetch 的指令了。在我们的程式中,执行向量运算的程式如下:

for(i = 0; i < buf_size; i += 4) {
double r1, r2, r3, r4;
 
// 执行矩阵乘法
r1 = m[0] * v[i] + m[1] * v[i+1] + m[2] * v[i+2] + m[3] * v[i+3];
r2 = m[4] * v[i] + m[5] * v[i+1] + m[6] * v[i+2] + m[7] * v[i+3];
r3 = m[8] * v[i] + m[9] * v[i+1] + m[10] * v[i+2] + m[11] * v[i+3];
r4 = m[12] * v[i] + m[13] * v[i+1] + m[14] * v[i+2] + m[15] * v[i+3];
 
// 写回计算结果
v[i] = r1;
v[i+1] = r2;
v[i+2] = r3;
v[i+3] = r4;
}
现在,我们在矩阵乘法的前面插入一个 prefetch 指令,变成:

for(i = 0; i < buf_size; i += 4) {
double r1, r2, r3, r4;
 
// 执行矩阵乘法
r1 = m[0] * v[i] + m[1] * v[i+1] + m[2] * v[i+2] + m[3] * v[i+3];
// 前一行执行完后,整个 4 维向量已经载入到 cache 中。
// 所以,现在用 prefetch 指令载入下一个 4 维向量。
prefetch(v + i + 4);
// 继续进行计算
r2 = m[4] * v[i] + m[5] * v[i+1] + m[6] * v[i+2] + m[7] * v[i+3];
r3 = m[8] * v[i] + m[9] * v[i+1] + m[10] * v[i+2] + m[11] * v[i+3];
r4 = m[12] * v[i] + m[13] * v[i+1] + m[14] * v[i+2] + m[15] * v[i+3];
 
// 写回计算结果
v[i] = r1;
v[i+1] = r2;
v[i+2] = r3;
v[i+3] = r4;
}
这段程式中的 prefetch 函式,里面执行的是 SSE 的 prefetchnta 指令。Pentium III 和 Athlon 都支援这个指令(AMD 的 K6-2 中另外有一个 prefetch 指令,是 3DNow! 指令的一部分)。这个指令会将指定的资料载入到离 CPU 最近的 cache 中(在 Pentium III 即为 L1 cache)。

只不过加上这样一行程式,执行结果就有很大的不同。回到前面的测试结果,我们可以看出,prefetch 指令,在资料已经存在 cache 中的时候,会有相当程度的 overhead(在这里是大约 10 cycles)。但是,当资料不在 cache 中的时候,效率就有明显的改善。特别是在资料量为 1024 KB 时,所需时间约为 70 cycles,说明了瓶颈确实是在 Load/Store Unit。在 1024 KB 之后,所需的 cycle 的增加,则是因为在多工系统中难以避免的 task switch 所产生的 overhead。

  由此可知,prefetch 指令对于多媒体及 3D 游戏等资料量极大的应用,是非常重要的。也可以预料,将来的程式一定会更加善用这类的功能,以达到最佳的效率。 
CPU 的 cache 和 latency_立华软件园_游戏开发->程序设计->优化调试 导读: 文档内容简介:  这篇文章主要是探讨现在的 CPU 的 cache 和内存系统之间的关系。目录:  [Part 1]  [Part 2]文档内容:[Part 1]  CPU 速度的进展,一直比内存的速度进展要来得快。在 IBM PC XT 的时代,CPU 和内存的速度是差不多的。不过,后来 CPU 的速度就愈来愈快。再加上 DRAM 需要 refresh 才能保存数据的特性,DRA 阅读详情

相关推荐

ARM平台内存和cache对xenomai实时性的影响

目录 1. 问题概述 2. stress 内存压力原理 2. cache 因素2.1 未加压2.2 加压(cpu/io) 3. 内存管理因素3.1 内存分配/释放3.2 MMU拥塞4 总结 1. 问题概述 对ti am5728 xenomai系统latency测试时,在测试过程中发现,内存压力对latency影响极大,未添加内存压力下数据如下(注:文中所有测试使用默认gravity,对实时任务cpu已使用isolcpus=1隔离,另外文中的结论可能只对ARM平台有效): stress -c

bieber007的博客 807

CPU 的 cache 和 latency

文档内容简介:   这篇文章主要是探讨现在的 CPU 的 cache 和内存系统之间的关系。 目录:   [Part 1]   [Part 2] 文档内容: [Part 1]   CPU 速度的进展,一直比内存的速度进展要来得快。在 IBM PC XT 的时代,CPU 和内存的速度是差不多的。不过,后来 CPU 的速度就愈来愈快。再加上 DRAM 需要 refresh 才

lhfslhfs的专栏 3666

AI模型效率指标实战指南:MACs、Latency与能效的工程化拆解

在AI模型落地过程中,计算效率并非附加优化项,而是决定产品可用性的核心约束。MACs(乘加操作数)表征模型固有计算复杂度,Latency(单帧延迟)直接关联用户体验与产线节拍,而Energy Efficiency(能效比)则牵动续航、散热与认证合规。这些指标共同构成从FP32精度设计到INT8量化部署、从服务器训练到边缘芯片适配的全链路技术标尺。尤其在工业视觉、车载ADAS和IoT终端等资源受限场景中,latency超80ms或能效低于2.0 fps/W,往往意味着项目失败。本文基于Jetson、骁龙、ES

weixin_30240349的博客 359

redis核心技术与实战(三) 性能篇

redis核心技术与实战(三) 性能篇 文章目录1.《redis 有哪些阻塞点?》1. reids阻塞点分析1.客户端交互2.磁盘交互3.主从交互4.切片集群2.关键路径与非关键路径3.redis异步子线程机制4.建议与扩展1.建议2.扩展2.《为什么CPU结构也会影响Redis的性能?》1.CPU多核架构2.CPU多核架构对Redis 性能的影响3.多CPU架构:NUMA4.NUMA架构对redis性能影响5.绑核的好处和坏处,以及解决方案1.好处和坏处2.解决方案3.《响应波动延时:如何应对redis变

qq_41201565的博客 1203

LLM推理优化实战:KV Cache与Continuous Batching的平衡艺术

在大语言模型(LLM)推理服务部署中,吞吐量与延迟的平衡是核心挑战。Transformer架构的自注意力机制是模型生成的基础,但其计算复杂度随序列长度平方增长。KV Cache(键值缓存)技术通过缓存历史注意力计算的Key和Value向量,将计算复杂度降至线性,显著加速单次推理。然而,KV Cache会带来巨大的显存开销,尤其在处理长序列或多并发请求时。为了提升GPU利用率,Continuous Batching(连续批处理)技术应运而生,它将调度粒度细化到每次生成单个token的迭代级别,动态管理请求队列

weixin_34168880的博客 697

Cache Replacement Policy: Cache 替换策略

cache 是 CPU和memory中间的缓存,如果访问时选中的set已经满了,就需要从set中选择一个way Least recently used (LRU) replace最近最少使用的block。算法记录访问的cache block以及时间顺序,完整的实现这个方式代价比较大。实现时需要为每个cache line记录“age bit”,基于age bit 记录“Least Recently Used” 。 每次访问cache-line,所有的其他的cachline的age都需要修改。 如果访问顺序是

Keep Fighting! 3152

为什么我的 DPDK 程序没有丢包,吞吐也很高,但 CPU 却越来越“卡”?一次排查让我彻底理解 memory fragmentation

很多DPDK程序在运行初期性能稳定但长时间运行后却会出现时延抖动、PPS下降等问题,即使没有丢包。本文通过一次真实排查案例,深入分析memory fragmentation(内存碎片化)对高性能数据面的影响,并结合mempool、hugepage、TLB与cache locality等机制,解释为什么频繁使用malloc/free会导致长期性能退化。文章还介绍了fixed-size object、对象池与per-core cache等优化方案,帮助开发者理解DPDK“预分配、固定化、可预测”的核心设计思想。

MrHeBoYan的博客 358

LatentSync:国产HeyGen来了!字节跳动提出最强视频翻译模型

LatentSync: Audio Conditioned Latent Diffusion Models for Lip Sync

A_D_I_D_A_S的博客 1969

近距离看GPU计算(2)

在《近距离看GPU计算》系列第一篇里我们介绍了GPU的一些基础知识及其如何从图形加速设备演化到通用计算平台。本文我们会具体从处理单元设计和存储层次结构两个方面探讨GPU不同于CPU的特点,...

宋宝华 2176

2.6 计算节点的Cache能力描述:HsaCacheProperties

本文解析了异构计算中CPU与GPU缓存架构的差异,重点介绍了HsaCacheProperties结构体如何统一建模这两种缓存体系。CPU采用经典的L1/L2/L3层次结构,追求低延迟和一致性;而GPU则具有分离的向量/标量缓存等专用设计,侧重高带宽和并行吞吐。文章详细说明了结构体字段含义、CacheType位域组合,并通过典型AMD处理器示例展示了CPU和GPU在sysfs中的不同表示方式,以及ProcessorIdLow的差异化含义。最后对比了CPU与GPU缓存在一致性、粒度、用途等方面的关键差异,揭示了

图形/计算GPU的驱动与虚拟化技术分享园地 770

CPU and Memory

CPU and Memory

zhixingheyi_tian的博客 371

core-to-core-latency:终极CPU核心间延迟测试工具完全指南

core-to-core-latency是一款功能强大的CPU核心间延迟测试工具,能够精确测量CPU核心之间通过缓存一致性协议发送消息的延迟。无论是硬件爱好者、系统优化工程师还是开发者,都能通过它深入了解CPU的性能特性,为系统调优和应用开发提供重要参考。 ## 为什么需要测试CPU核心间延迟? 在现代多核心处理器中,核心之间的通信效率直接影响系统整体性能。尤其是在高性能计算、实时数据处理和多

gitblog_00462的博客 817

cult:CPU极限延迟测试

邪教 CPU Ultimate Latency Test。 在线访问 是一个Web应用程序,允许在线搜索asmdb和cult项目提供的数据。 介绍 CULT( CPU最终延迟测试)是运行一系列测试的工具,可帮助估计X86处理器(支持32位或64位模式)执行可用指令所需的周期。 该工具应帮助允许为X86 / X64硬件生成代码的人员,而不是依靠来自CPU供应商或第三方的信息(可能不完整或可能不为所有目标硬件提供信息),从而为自己的计算机上运行测试的人员提供帮助。 CULT的目的是对尽可能多的CPU进行基准测试,对结果进行索引,并使它们可搜索,可比较且可在线访问。 然后,这些信息可以用于各种目的,例如与现代CPU的某些指令(例如加法,乘法和除法)相比,其前任产品的平均等待时间的统计信息,或者仍是手写的人们在不同CPU代之间的比较。编写程序集以优化某些操作。 CULT的输出是JSON,可简化第

【词汇】Google doc & Cache、prefetch and cpu

Google doc google 文件  谷歌办公套件,类似于微软的Office的一套在线办公软件,可以处理和搜索文档、表格、幻灯片,并可以通过网络和他人分享,有google的帐号就能使用.  Google 文件是基于网络的文字处理和电子表格程序,可提高协作效率。有了此程序,您就可以把文档放在网上。这样,您团队中的其他人就可以实时在线对文档进行编辑和更新,免去您线下发送相同版本的文档

Explorer 905

Zemax操作40--序列模式中LD光源模拟

LD模拟

lzy750750的博客 9124

Mediapipe手势识别实战——基于关节角度计算实现动态手势分类

本文详细介绍了如何利用Mediapipe进行手势识别,通过计算手指关节弯曲角度实现动态手势分类。文章从基础原理出发,讲解了关节角度计算的数学方法,并提供了Python实现代码。同时,还分享了数字手势和OK手势的识别实战经验,以及性能优化和工程实践中的关键技巧,帮助开发者快速掌握实时手势识别技术。

weixin_26891599的博客 403

cpu cache 学习

http://www.51dzw.com/embed/embed_63834.html 在2004年写的一篇文章x86汇编语言学习手记(1)中,曾经涉及到gcc编译的代码默认16字节栈对齐的问题。之所以这样做,主要是性能优化方面的考虑。   大多数现代cpu都one-die了l1和l2cache。对于l1 cache,大多是write though的;l2 cache则是write

hintonic的专栏 2619

从无人机到机械臂:深入聊聊LQR和LQG在实际项目里的那些‘坑’与最佳实践

本文深入探讨了LQR和LQG在无人机和机械臂等实际项目中的应用挑战与最佳实践。从系统建模的妥协艺术到调参的系统化方法,再到离散化的细节处理,文章分享了工程实践中的宝贵经验。特别强调了如何应对传感器噪声、未建模动态等现实问题,并提供了实用的调试工具和诊断流程,帮助工程师避免常见陷阱,提升控制系统的稳定性和性能。

weixin_28683391的博客 387

深入理解CPU cache:组织、一致性(同步)、编程

《CPU Cache Line:CPU缓存行/缓存块》 《CPU Cache Line伪共享问题的总结和分析》 《内存管理:Linux Memory Management:MMU、段、分页、PAE、Cache、TLB》 《宋宝华:深入理解cache对写好代码至关重要(上)》 CACHE基础 对cache的掌握,对于Linux工程师(其他的非Linux工程师也一样)写出高效能代码,以及优化Linux系统的性能是至关重要的。简单来说,cache快,内存慢,硬盘更慢。在一个典型的现代CPU中..

RToax 6015

Halcon实战:基于图像清晰度自动筛选最佳对焦图片

本文详细介绍了如何使用Halcon实现基于图像清晰度的自动筛选最佳对焦图片技术。通过分析灰度值统计和标准差等核心指标,结合实战代码示例,帮助开发者高效处理工业检测中的对焦问题,提升自动化检测的准确性和效率。

weixin_27015733的博客 442

从零到一:RV1126与IMX415的硬件交响曲——深入解析Linux IPC摄像头的硬件调试艺术

本文深入解析了RV1126与IMX415组合的Linux IPC摄像头硬件调试技术,涵盖硬件接口检查、设备树配置、驱动加载验证及ISP调优等关键步骤。通过详细的操作指南和常见问题解决方案,帮助开发者快速掌握摄像头调试技巧,提升开发效率。

weixin_29161785的博客 985

2017/09/25 关于cache和axi的一些想法

今天看了很多乱七八糟的东西: 1.E知网 为什么要有qos axi中的qos的主要作用就是表明优先级。因为不同的模块有着不同的需求,因而不同。 http://www.eeknow.cn/question/72 2.latency和 bandwidth不同: latency主要指的是延迟,cpu的cache miss之类的操作对latency要求很高。bandwidth指的是带宽,主要是

Keep Fighting! 3750

【推荐100个unity插件】性能极高的逼真爆炸、火焰和烟雾效果——UNI VFX

这是一篇关于Unity中高性能GPU粒子特效插件UNI VFX的使用指南。文章介绍了该插件提供逼真的爆炸、火焰和烟雾效果,支持URP和HDRP渲染管线。主要内容包括:插件安装方法(需预先安装Visual Effect Graph和Shader Graph包)、事件系统使用方法(如create/loop/stop等事件控制)、特效分类(自动结束型和持续型特效)、检视面板配置技巧以及性能优化建议(特别提醒灯光特效对性能的影响较大)。文末还推荐了多个Unity开发相关的专栏内容。

向宇的博客,专注php/web全栈 unity游戏开发,欢迎大家评论纠错 1492

cache基础

cache是系统中的一块快速SRAM,价格高,但是访问速度快,可以减少CPU到main memory的latency。 cache中的术语有:   1) Cache hits,表示可以在cache中,查找到相应地址的entry。   2) Cache Miss,表示在cache中,找不到相应地址的entry。   3) Snoop,cache不断监视transaction的地址线...

ahr7882的博客 1319

基于OpenCV实现暗通道先验去雾算法及改进,效果惊人

深度技术文,前方高能

公号:一条coding 2万+

【OpenClaw从入门到精通】第03篇:吃透Gateway/Skills/ClawHub核心概念(2026实测+避坑)

本文针对OpenClaw新手易混淆的核心概念痛点,以通俗类比+实操演示拆解OpenClaw核心、Gateway、Skills、ClawHub四大组件。通过“数字员工团队”类比明确各组件定位:OpenClaw核心是“老板”(调度中心)、Gateway是“前台+后勤”(后台进程)、Skills是“专业员工”(功能插件)、ClawHub是“人才市场”(技能商店)。补充版本更名史、技能加载优先级、ClawHub与GitHub区别等关键细节,结合“AI融资新闻查询并邮件推送”虚拟案例演示组件协同流程,梳理5个高频认知

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 5048
上一篇: Tag, Tag group and Tag mask in Cell BE
下一篇: CPU cache
DigBug
博客等级 码龄20年 15粉丝 19原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值