Chinaunix首页 | 论坛 | 博客
  • 博客访问: 815077
  • 博文数量: 157
  • 博客积分: 542
  • 博客等级: 中士
  • 技术积分: 1696
  • 用 户 组: 普通用户
  • 注册时间: 2011-11-21 20:21
文章分类
文章存档

2017年(1)

2016年(2)

2015年(6)

2014年(42)

2013年(77)

2012年(19)

2011年(10)

分类: C/C++

2013-09-05 16:51:24

处理器交换的 最小数据单元是一个 cach行,在多核体系中,进程和线程们进行共享数据的读写时需要同时操作同一个cach行,那么我们可以用空间换时间效率的方法把要读写的数据分开放在不同的cach行中,这样就不会造成相互竞争同一个cach行,
比如有如下数据结构: 
struct Data{
    int read;
    int write;
};

一般的系统处理器的一个cach行为64字节,这里我们可以看到read,和 write这两个 数据是在同一个cach块中的,但是read只是供读的 操作,而write 是给 写的 操作。这样如果有读写两个线程在操作这个数据结构,一个要写,一个要读,那么相互之间还是会产生竞争的,但如果我们改成这样的数据结构:

struct Data{
    int read;
    char split[64];
    int write;
};

那么此时 read和write就在不同的cach中了,此时的读写线程操作就不会有竞争的关系,此时效率肯定会提高,但是空间却浪费了。


所以合理的安排数据结构在多核编程中也同样有用。
阅读(424) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~