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,如需转载请自行联系原作者
相关文章
|
5月前
|
存储 缓存 关系型数据库
关系型数据库MySQL的Memory (HEAP)
【6月更文挑战第17天】
61 4
|
6月前
|
缓存 Java
直接内存(Direct Memory)牛刀小试
直接内存(Direct Memory)牛刀小试
39 0
|
6月前
|
测试技术 iOS开发
用Instruments分析内存使用情况
用Instruments分析内存使用情况
450 1
|
存储 缓存 程序员
计算机基础-------硬盘、内存、cpu的理解
计算机基础-------硬盘、内存、cpu的理解
629 0
计算机基础-------硬盘、内存、cpu的理解
|
存储 缓存 关系型数据库
磁盘&CPU调节(1)—Buffer Pool(五十四)
磁盘&CPU调节(1)—Buffer Pool(五十四)
|
SQL 存储 缓存
我的PGA我作主----搞清楚什么是真正的PGA
网上PGA资料确实不多,也讲的不够深入,我们一起来学习PGA。 讨论话题: 1、PGA是什么,包括哪些部分,PGA的作用? 2、pga_aggregate_target参数的意义? 3、Oracle中观察PGA,可以从工作区(排序、HASH连接、位图)、Cache Cursor、批量读取缓存(arraysize)等几方面做测试,大家可以动动手? 4、ORA-4030错误的可能原因? 5、PGA手工管理下的优化要点? 6、如何监控PGA?
|
异构计算 机器学习/深度学习 算法
GPU编程(五): 利用好shared memory
目录 前言 CPU矩阵转置 GPU实现 简单移植 单block tile 利用率计算 shared memory 最后 前言 之前在第三章对比过CPU和GPU, 差距非常大. 这一次来看看GPU自身的优化, 主要是shared memory的用法.
1405 0
|
SQL 监控 数据库
Expert 诊断优化系列------------------你的CPU高么?
现在很多用户被数据库的慢的问题所困扰,又苦于花钱请一个专业的DBA成本太高。软件维护人员对数据库的了解又不是那么深入,所以导致问题迟迟不能解决,或只能暂时解决不能得到根治。开发人员解决数据问题基本又是搜遍百度各种方法尝试个遍,可能错过诊断问题的最佳时机又可能尝试一堆方法最后无奈放弃。
1269 0
|
SQL 缓存 数据库
Expert 诊断优化系列------------------内存不够用么?
现在很多用户被数据库的慢的问题所困扰,又苦于花钱请一个专业的DBA成本太高。软件维护人员对数据库的了解又不是那么深入,所以导致问题迟迟不能解决,或只能暂时解决不能得到根治。开发人员解决数据问题基本又是搜遍百度各种方法尝试个遍,可能错过诊断问题的最佳时机又可能尝试一堆方法最后无奈放弃。
1064 0