谈谈cpu cache line对程序代码的影响

2023-12-27 18:54:48

      为了解决cpu运行速度和内存速度不匹配的问题,引入了cpu三级缓存,L1,L2,L3.其中缓存是以缓存行为基本单位的,每次取数据都是取一个缓存行的数据,批量读取。所以肯能会出现多个cpu共享缓存行时,需要进行同步数据的工作。下面就是通过将共享数据放入两个缓存行来提高运行速度的例子,Java中的Thread类也有@Contented也是类似作用。

      注意:一般64位的计算机,缓存行为64个字节。

        

public class TestCpuCacheLine {

    volatile long num = 0;
//    long l1, l2, l3, l4, l5, l6, l7;
    volatile long num1 = 0;

    public static void main(String[] args) throws Exception{

        long start = System.currentTimeMillis();

        TestCpuCacheLine testCpuCacheLine = new TestCpuCacheLine();

        Thread t1 = new Thread(() -> {
            for (int i = 0; i < 10000000; i++) {
                testCpuCacheLine.num++;
            }
        });

        Thread t2 = new Thread(() -> {
            for (int i = 0; i < 10000000; i++) {
                testCpuCacheLine.num1++;
  

文章来源:https://blog.csdn.net/weixin_41751625/article/details/135251441
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。