星期三, 五月 11, 2011

What every programmer should know about memory 阅读笔记(6.4.1)

http://lwn.net/Articles/256433/
6.4 Multi-Thread Optimizations
三个方面比较重要 一致性 原子性 带宽

6.4.1 Concurrency Optimizations
为了保持cache一致性 不同芯片的多线程写同一地址会效率差 单个芯片多core因为cache共享就会好很多

优化一致性的问题的核心思路是将一致性要求不同的变量放入不同的cache line

优化方法
方法一 读写变量和初始化后只读变量分入不同section(gcc对const变量会自动这么做) 使他们在内存和cache上分开 如果可以
还建议将读多写少变量分入单独section

方法二 将经常被同时访问的变量放入同一structure确保他们在内存结构上在一起

方法三 将经常被不同线程写的变量放入同一structure确保他们在内存结构上在一起

注意:方法二 方法三可配合__attribute__((aligned(l1 cache line size)))强制其和l1 cache
line对齐确保全部变量在一个cache line

方法四 如果一个变量被多个线程分别使用 并且无一致性需求 可用__thread将变量放入tls

0 Comments:

发表评论

<< Home