多线程优化——Cache Align

本文探讨了多线程程序中由于缓存对齐问题导致的性能瓶颈。当多个线程更新同一cache line时,缓存同步开销会显著影响效率。通过实例分析,说明了一个未进行Cache Align的多线程程序与单线程程序的性能对比,并解释了time命令的输出含义。最后,介绍了如何使用posix_memalign进行内存对齐以优化多线程程序,以提高性能。
摘要由CSDN通过智能技术生成

  大部分情况下,使用N个线程的速度并不是等量任务单线程的1/N,这里面有很多原因,比如创建线程、线程调度的开销,CPU/核的数量不够多导致N个任务不能完全并行,再或者,其它非任务线程占用CPU。

  还有一个不容忽视的原因就是,多个线程更新同一个cache line,导致多个核的缓存同步占用了大量时间

  这是一种隐藏地很深的原因,比如下面我遇到的情况:

  



  首先是一个单线程程序:

#include <stdio.h>
#include <stdlib.h>

unsigned long iteration = 20000000000;
unsigned long* data_array;

int main() {
	data_array = (unsigned long*)malloc(sizeof(unsigned long)*1);
	*data_array = 0;
	while (*data_array < iteration)
		(*data_array)++;
	
	free(data_array);
}

  它计算20000000000次,它的耗时:

yxc@RealBox:~/Desktop/test$ time ./single 

real	0m39.234s
user	0m39.178s
sys	0m0.000s




  然后是一个两个线程的多线程版本,每个线程执行1 0000000000计算:

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值