并行计算缓存、缓存一致性、伪共享等问题

上传人:第*** 文档编号:54454196 上传时间:2018-09-13 格式:PPTX 页数:5 大小:541.63KB
返回 下载 相关 举报
并行计算缓存、缓存一致性、伪共享等问题_第1页
第1页 / 共5页
并行计算缓存、缓存一致性、伪共享等问题_第2页
第2页 / 共5页
并行计算缓存、缓存一致性、伪共享等问题_第3页
第3页 / 共5页
并行计算缓存、缓存一致性、伪共享等问题_第4页
第4页 / 共5页
并行计算缓存、缓存一致性、伪共享等问题_第5页
第5页 / 共5页
亲,该文档总共5页,全部预览完了,如果喜欢就下载吧!
资源描述

《并行计算缓存、缓存一致性、伪共享等问题》由会员分享,可在线阅读,更多相关《并行计算缓存、缓存一致性、伪共享等问题(5页珍藏版)》请在金锄头文库上搜索。

1、缓存、缓存一致性、伪共享,缓存,Cache是高速缓冲存储器 一种特殊的存储器子系统,其中复制了频繁使用的数据以利于快速访问。 缓存的设计考虑到了: 时间和空间的局部性 如果一个处理器在时间t访问了主存地址x,那么很有可能它会在与t相近的时间内访问主存中靠近x的地址。因此,如果处理器要访问主存地址x,那么一个包含x中内容的存储块将被写入缓存行或者从缓存行中读出,而不是仅仅将x中的内容写入缓存或者从缓存中读出。这样的存储块叫做存储行或存储块。,缓存的一致性,缓存的使用会对共享内存产生重大的影响,如下例: void Hello(void); int x=5;/共享变量 int main(int ar

2、gc,char* argv) int thread_count=strtol(argv1,NULL,10); #pragma omp parallel num_threads(thread_count) int my_rank = omp_get_thread_num(); int my=x; x+; printf(“my_%d = %dn“,my_rank,my); return 0; 当线程0执行x+时,其他线程x所在的缓存块被标记为invalid,在赋值语句my=x之前,其他线程的核将会获知x的值已近过期了。因此运行线程0的核必须更新x在内存的副本,运行的其他线程的核将从主存中获取包含更

3、新过的x的内存块。,伪共享,int main(int argc,char* argv) float time_use=0; struct timeval start; struct timeval end; for(int thread_count=1;thread_count11;thread_count+) gettimeofday( 如右图所示:在4线程并行的条件下,运算总数是 固定的640000万次(PS:没有用64000000,机器带不动) 这时矩阵维度是8*80000的输入花费的时间最长。,伪共享,写缺失:当核试图修改不存在缓存的变量时会发生写缺失,此时内核必须访问内存。 读缺失:当核试图读取不存在缓存的变量时会发生写缺失,此时内核必须访问内存。 在4处理器并行的条件下,维度8*80000的矩阵在运算的过程中,y的所有元素都存储在一个缓存行中,那么每次对y中元素的写就造成了其他处理器中缓存行的实效。这就是所谓的伪共享。,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 解决方案

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号