相关疑难解决方法(0)

什么是"缓存友好"代码?

" 缓存不友好代码 "和" 缓存友好 "代码之间有什么区别?

如何确保编写高效缓存代码?

c++ memory performance caching cpu-cache

703
推荐指数
7
解决办法
14万
查看次数

多线程循环的效率

问候贵族社区,

我想要以下循环:

for(i = 0; i < MAX; i++)
    A[i] = B[i] + C[i];
Run Code Online (Sandbox Code Playgroud)

这将在使用线程的共享内存四核计算机上并行运行.以下两个备选方案正在考虑由这些线程执行的代码,其中tid是线程的ID:0,1,2或3.

(为简单起见,假设MAX是4的倍数)

选项1:

for(i = tid; i < MAX; i += 4)
    A[i] = B[i] + C[i];
Run Code Online (Sandbox Code Playgroud)

选项2:

for(i = tid*(MAX/4); i < (tid+1)*(MAX/4); i++)
    A[i] = B[i] + C[i];
Run Code Online (Sandbox Code Playgroud)

我的问题是,是否有一个比另一个更有效,为什么?

c++ java performance multithreading shared-memory

7
推荐指数
2
解决办法
328
查看次数