Heap contention ----- 4核以上系统的超级性能杀手

简介:
   系统的heap 是整个操作系统全局共享的,以windows 为例,抄作heap 的API 有GlobalAlloc和GlobalFree。 C和C++的 malloc 和 new 最后实现还是调用的windows的 GlobalAlloc API。多核,多线程环境中,两个并行run 的线程经常有同时调用 heap 操作, heap 是全局共享一个线程访问全局heap的时候另一个线程就不可能去访问(OS API heap操作的实现保证了这一点),本来应该并行的多个线程就因为Heap 操作thread safe 的实现,强制变成了串行执行。这种现象就叫做 Heap contention。
       在4核和以下的系统里面, 一般的经验是只有heap contention 而没有其他毛病的多线程程序,4核上面总归会比关掉两个核的两核系统有30% 左右的性能提高。 然而当核数再加一倍的时候, 在8核的系统上, 8核上的性能比关掉6个核还要差。 最简单的例子程序如下:
 #pragma omp parallel for
 for(i = 0;i < loop_num; i++)
{
 char * block;
block = (char *)malloc(block_size);
 double result = 0;
for(j = 0; j < 100000; j++)
result += j^2;
 free(block);
}
 这么严重的问题应该怎样解决呢, 答案将在下一个文章中给出。

本文转自Intel_ISN 51CTO博客,原文链接:http://blog.51cto.com/intelisn/131462,如需转载请自行联系原作者
相关文章
|
9月前
|
存储 缓存 固态存储
重学操作系统----05 | 存储器分级:L1 Cache 比内存和 SSD 快多少倍?
重学操作系统----05 | 存储器分级:L1 Cache 比内存和 SSD 快多少倍?
178 0
|
存储 缓存 程序员
计算机基础-------硬盘、内存、cpu的理解
计算机基础-------硬盘、内存、cpu的理解
551 0
计算机基础-------硬盘、内存、cpu的理解
|
异构计算 机器学习/深度学习 算法
GPU编程(五): 利用好shared memory
目录 前言 CPU矩阵转置 GPU实现 简单移植 单block tile 利用率计算 shared memory 最后 前言 之前在第三章对比过CPU和GPU, 差距非常大. 这一次来看看GPU自身的优化, 主要是shared memory的用法.
1368 0
|
存储 缓存 算法