博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Heap contention ----- 4核以上系统的超级性能杀手
阅读量:6913 次
发布时间:2019-06-27

本文共 721 字,大约阅读时间需要 2 分钟。

   系统的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,如需转载请自行联系原作者
你可能感兴趣的文章
R基本图形示例及代码(持续收集)
查看>>
JavaScript对象的数据属性与访问器属性
查看>>
Rxjava
查看>>
AIX系统中适用于ksh的循环语句
查看>>
OneNMP路由器、交换机监控
查看>>
EditText 只能输入数字字母
查看>>
iPhone 开发过程中的一些小技术的总结
查看>>
android 资料
查看>>
ThreadLocal 那点事儿
查看>>
Spark源码分析调试环境搭建
查看>>
全栈工程师就是一棵歪脖子树
查看>>
对于设计模式最近观感的浅薄理解
查看>>
Spring中AOP使用——配置xml方式
查看>>
JavaScript是如何工作的:深入类和继承内部原理 + Babel和TypeScript 之间转换
查看>>
.net reactor使用教程(一)——界面各功能说明
查看>>
腾讯 AI Lab 正式开源PocketFlow,让深度学习放入手机!
查看>>
教你在Docker上不到2分钟建立一个多模型数据库!
查看>>
python输入输出语句
查看>>
HTTPS时代的到来是大势所趋!阿里云CDN如何助力企业网站进入HTTPS时代
查看>>
Linux 积极使用swap空间
查看>>