我创建了具有矩阵乘法实现逻辑的共享库。我正在执行两个不同的程序,并通过调用共享库从两个程序计算矩阵乘法。只有一个共享库副本被加载到主内存中,我知道共享库函数加载到主内存的物理地址(我只知道函数的起始地址,不知道函数的结束地址)。 / p>
共享库将被加载到几个缓存集中(比如X-Y)。 clflush(地址)用于从CPU缓存中刷新。所以我可以使用 clflush(地址)从CPU缓存中清除。
以下是我的问题
是不是
// 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在这里不起作用。
指针P的类型应该是什么?我应该通过什么代替P?
因为我使用整数数组进行矩阵乘法,所以P = P + 16会指向下一个缓存集吗? (缓存块大小为64Bytes,Integer大小为4Bytes)。
如何找到功能的结束?可能吗 ?如果超过共享函数的边界,P = P + 16会导致错误吗?
我在Linux下使用GCC。在这方面的任何帮助或指针将是很大的帮助。提前谢谢。