相关疑难解决方法(0)

缓存线如何工作?

据我所知,处理器通过缓存线将数据带入缓存,例如,在我的Atom处理器上,无论读取的实际数据大小如何,一次都会带来大约64个字节.

我的问题是:

想象一下,你需要从内存中读取一个字节,这64个字节将被带入缓存?

我可以看到的两种可能性是,64字节从感兴趣的字节下方最接近的64字节边界开始,或者64字节以某种预定方式在字节周围扩展(例如,一半以下,一半以上,或者上述所有).

这是什么?

memory caching processor line

152
推荐指数
4
解决办法
7万
查看次数

为什么在x86上对自然对齐的变量进行整数赋值?

我一直在读这篇关于原子操作的文章,它提到了32位整数赋值在x86上是原子的,只要该变量是自然对齐的.

为什么自然对齐确保原子性?

c c++ concurrency x86 atomic

28
推荐指数
2
解决办法
5386
查看次数

英特尔处理器中内存控制器和缓存之间的数据路径宽度是多少?

据我了解,在 64 位系统中,内存总线是 64 位的。所以内存控制器 (MC) 和 DRAM 之间的传输是 64 位的。由于缓存块大小为 64 字节,是否有一次从 MC 到缓存的缓存块大小的数据传输?(即数据路径宽度是缓存块大小)或它是否进行了 8 次传输(每个 64 位,考虑 64 位数据路径宽度,与内存总线相同?)

x86 intel cpu-architecture

4
推荐指数
1
解决办法
641
查看次数

数据置乱目的

有人可以向我解释一下内存控制器中的数据加扰是什么吗?根据维基百科的说法,它以某种方式用随机模式屏蔽用户数据,以防止对 DRAM 进行逆向工程。但是,它也用于查找电气问题。有人可以详细说明一下数据加扰的这些特征吗?谢谢!

cpu-architecture

3
推荐指数
1
解决办法
6711
查看次数

java中的volatile关键字真的与缓存有关吗?

从我读过的内容来看,java 中的“volatile”关键字确保线程始终获取特定指针的最新值,通常通过直接从/向内存读取/写入以避免缓存不一致。

但为什么需要这样做呢?据我所知,这已经在硬件级别上完成了。如果我从我的系统架构类中没有记错的话,更新内存位置的处理器核心会向其他处理器的缓存发送无效信号,迫使它们在需要时从内存中获取这些行。或者,如果情况相反——如果处理器获取内存,它将强制其他缓存的缓存(但未写入)行首先刷新到内存中。

我唯一的理论是,尽管我已经阅读了所有解释,但这实际上与缓存完全无关。它与 JVM 中的数据可以驻留在两个地方有关 - 线程的本地堆栈和堆。并且 Java 线程可以将其堆栈用作一种缓存。我会买那个,但这也意味着对驻留在堆上的数据使用 volatile 是无用的,因为它由所有线程共享并遵守硬件实现的一致性?

例如:

public final int[] is = new int[10];
Run Code Online (Sandbox Code Playgroud)

访问 is 的数据将始终导致获得最新的数据,因为数据驻留在堆上。然而,指针是一个原语,可能会成为堆栈问题的受害者,但由于它是最终的,我们没有这个问题。

我的假设正确吗?

编辑:据我所知,这不是重复的。所谓的重复线程是那些误导性的答案之一,它说它与缓存一致性有关。我的问题不是 volatile 用于什么,也不是如何使用它。它正在测试一种理论,并且进行更深入的测试。

java caching volatile

1
推荐指数
1
解决办法
807
查看次数

标签 统计

caching ×2

cpu-architecture ×2

x86 ×2

atomic ×1

c ×1

c++ ×1

concurrency ×1

intel ×1

java ×1

line ×1

memory ×1

processor ×1

volatile ×1