1、分析算法流程,分析算法中的某些中间是否有能够合并的操作,比如对于图像先进行下采样,然后再上采样存储到原始中,类似这种的操作都可以合并操作,直接在进行下采样之后不需要另外存储图像,直接进行上采样,这样就可以合并操作,减少内存的来回读写操作。
2、利用pthread的affinity功能,把算法的主要线程均匀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.youkuaiyun.com/oktears/article/details/39610805
samples:
void* result = __mmap2(addr, size, prot, flags, fd, offset);
int rc = madvise(result, size, MADV_HUGEPAGE);