如何在C中从缓存中刷新共享库函数

时间:2014-02-01 16:36:00

标签: c operating-system shared-libraries shared-memory cpu-architecture

我创建了具有矩阵乘法实现逻辑的共享库。我正在执行两个不同的程序,并通过调用共享库从两个程序计算矩阵乘法。只有一个共享库副本被加载到主内存中,我知道共享库函数加载到主内存的物理地址(我只知道函数的起始地址,不知道函数的结束地址)。 / p>

共享库将被加载到几个缓存集中(比如X-Y)。 clflush(地址)用于从CPU缓存中刷新。所以我可以使用 clflush(地址)从CPU缓存中清除。

以下是我的问题

  1. 如果我使用clflush(地址),它只会刷新缓存内容,其中地址映射在CPU缓存中(设置为X)。那么如何计算访问该内存地址的访问时间呢?
  2. 是不是

        // Before clflush 
    
        memory address P = &function(); // physical address
    
        start=timer();
        access memory address P; // starting address pointing to cache set X
        end=timer();
    
        time_needed1= end-start ;
    
        // Second access
    
        start=timer();
        access memory address P; // starting address pointing to cache set X
        end=timer();
    
        time_needed2= end-start ;
    

    //从CPUcache中清除

        clflush(memory address P) ;
    
    // After clflush 
        start=timer();
        access memory address P; // starting address pointing to cache set X
        end=timer();
    
        time_needed3= end-start ;
    

    我预计time_needed3将更高而不是time_needed2,但是我得到更低值,表示clflush在这里不起作用。

    1. 指针P的类型应该是什么?我应该通过什么代替P?

    2. 因为我使用整数数组进行矩阵乘法,所以P = P + 16会指向下一个缓存集吗? (缓存块大小为64Bytes,Integer大小为4Bytes)。

    3. 如何找到功能的结束?可能吗 ?如果超过共享函数的边界,P = P + 16会导致错误吗?

    4. 我在Linux下使用GCC。在这方面的任何帮助或指针将是很大的帮助。提前谢谢。

0 个答案:

没有答案