解决memory bound算法的一些建议

本文介绍了几种提升算法性能的方法:合并相似操作以减少内存读写,利用pthread的affinity功能优化线程调度,以及通过MMAP替代malloc来提高内存效率。

1、分析算法流程,分析算法中的某些中间是否有能够合并的操作,比如对于图像先进行下采样,然后再上采样存储到原始中,类似这种的操作都可以合并操作,直接在进行下采样之后不需要另外存储图像,直接进行上采样,这样就可以合并操作,减少内存的来回读写操作。

2、利用pthreadaffinity功能,算法的主要线程均匀affinity到主要的处理器核上;不使用CPU自主分配,自主控制线程的处理方式。

3、一般情况下,memory的分配都是使用malloc,可以替换malloc,利用MMAP分配page连续的内存来减少page fault,从而提高memory的效率。

example:

pThread affinity:

      https://stackoverflow.com/questions/24645880/set-cpu-affinity-when-create-a-thread

unsigned long mask; /* processor number */

for(i = 0; i < pMgr->iThreadNumber; i++)
{
   mask = i;
   if (sched_setaffinity(0, sizeof(mask), &mask) <0) {
    printf("sched_setaffinity");
   }
      do some operations;

}

MMAP:

 http://blog.csdn.net/oktears/article/details/39610805

samples:

      void* result = __mmap2(addr, size, prot, flags, fd, offset);

int rc = madvise(result, size, MADV_HUGEPAGE);




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值