如果我正在将值写入内存而不是再次读取它们,那么如果内存位置不连续,它是否会对性能产生影响? (即不在写缓存中)

处理器有可能在后台将它们写入后台,或者是否会导致缓存问题?

===============>>#1 票数:4 已采纳

CPU中的大多数缓存都熟悉是回写,这意味着写入不会传播到内存层次结构的下一级,直到存在争用缓存空间,并且必须刷新某些内容。 如果您进行单个随机写入,则不太可能看到任何性能影响,但如果您进行持续随机写入,您会发现其性能将显着低于顺序写入。

进行随机写入可能需要分配高速缓存行,因为它可能是该段内存中唯一访问的内容。 一旦你做了足够的写操作,你就会用数字缓存填充每个包含一个有效单词的行,并且必须刷新其中一行。 由于存储器的组织和访问方式,刷新速度不会比刷新整行快得多,使得随机写入的速度与连续写入的32字节(典型行大小)大致相同。

我建议您编写自己的程序来测试它。 分配比上一级缓存大得多的内存,并为相同数量的随机和顺序32位写入分配时间。 我打赌你会发现随机写入介于1/8和1/4之间,与顺序一样快。

对于您而言,另一个因素是随机写入与不访问内存的其他计算的相对平衡。 如果它们很少见,是的,它们会在背景中变得很红。 只有当它们成为瓶颈时,您才会注意到性能影响。 顺序写入会出现同样的问题,但不会严重。

  ask by GazTheDestroyer translate from so

未解决问题?本站智能推荐:

2回复

处理器使用Intel QuickPath Interconnect(QPI)来访问内存吗?

我已阅读英特尔®QuickPath互连简介 。 该文档未提及处理器使用QPI来访问内存。 所以我认为处理器不通过QPI访问内存。 我的理解是否正确?
1回复

找出可执行程序是内存密集型还是计算密集型

我有一个可执行程序文件,并且正在使用SimpleScaler对该程序进行概要分析。 我怎么知道程序是内存密集型还是计算密集型。 我得到的数据是“ 152k#分配的内存页面总大小” 注意:我知道内存密集型和计算密集型的概念,通过查看代码,我可以说一个程序是否占用内存。 但是这里我只运行
1回复

Spreadsheet Gear-通过复制和粘贴生成大型报告似乎占用了大量内存和处理器

我正在尝试生成一个基于大型工作簿的报表,其中包含100、12000和12000行的3个支持工作表以及一个基于最终公式的最终输出表,这些公式最终基于每100行显示约120个实体。 我生成一个模板范围,并在粘贴每个新范围后复制并粘贴它替换实体ID单元格。 它工作正常,但我注意到IIS Expre
2回复

内存地址通常以位为单位

我对很多术语感到困惑,我的讲师谈到了诸如word , byte addressing和memory location等术语。 我的印象是,对于32-bit processor ,它可以处理高达2^32 bits ,即4.29 X 10^9 bits (NOT BYTES) 。 我现在
2回复

桌面处理器是否支持弱有序内存?

是否有支持弱有序内存的Intel / AMD台式机处理器,或者这是具有多个处理器的服务器设置的功能?
2回复

如何获得指定架构(x86,pic控制器)中的芯片名称和可寻址内存?

如何在没有BIOS的情况下获取指定架构(x86,x64,pic控制器)中的芯片名称和可寻址内存? 您是否有特定的寄存器来存储可用的内存大小?
1回复

写入内存时缓存的作用是什么?

我有一个函数,它很少读取内容,但会大量写入RAM。 当我在同一个内核(主线程)上多次运行它时,它的运行速度大约是每次运行在新线程上启动该函数的速度(它不保证两次运行之间使用相同的内核)时,其运行速度大约是后者的5倍。我启动并在跑步之间加入。 这表明高速缓存在写入过程中被大量使用,但我不知
2回复

如何在不触摸缓存的情况下写入或读取内存

有没有办法在不接触x86 CPU下的L1 / L2 / L3缓存的情况下写入/读取内存? 是否完全由硬件管理的x86 CPU缓存? 编辑:我想这样做,因为我想采样内存的速度,看看内存的任何部分性能是否下降。
3回复

确定内存位置是否在CPU缓存中

操作系统可以确定一页存储器是在DRAM中还是在交换中; 例如,只是尝试访问它,如果发生页面错误,它不是。 但是,CPU缓存可能是同样的事情吗? 是否有任何有效的方法来判断给定的内存位置是否已加载到缓存行中,或者知道它何时这样做?
2回复

程序在内存和静态/共享库中的位置

当我运行一个程序(在Linux中)时,所有程序都加载到物理内存中了吗? 如果是这样,是否在缓存方面使用共享库而不是静态库? 通常,什么时候应该使用共享库,什么时候应该使用静态库? 如果重要的话,我的代码可以用C或C ++编写。