Heap contention ----- 4核以上系统的超级性能杀手 终极篇 问题解决

简介:
上次给大家卖了了官子, 提出了一个问题, 一直没有给出结果, 同学们看得也着急,等得一直冒汗。  我老人家也绝对不是故意的, 最近工作太忙,  直到今天终于由一个空隙,赶快给出答案。
同学们再看看代码,
#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);
}
在8核的系统上, 8核上的性能比关掉6个核还要差。
真是邪了门了。
有没有同学想出办法了, 有加分了哦。 下次我一定建议让版主同学给抢答的同学加分,分数可以换奖品!!!!!!!!
现在公布答案。
系统的heap 是整个操作系统全局共享的,以windows 为例,  微软没有聪明到帮程序员做到系统的heap 也不全局共享(全局共享在软件开发中绝对不是一个好东西),那么我们程序员自己动手。
问题陈述。
多个线程共享了系统的heap。
问题关键:
多个线程如果自己都有自己private 的系统heap, 你不用我的, 我不用你的, 大家互补干啥, 这个样子,  即使heap 是全局的,  没人来抢着征用,也就和私有heap 一样了
修改:
setthreadnum(CPU_num);
#pragma omp parallel for
for(i = 0 ; i <  CPU_num ;i++)
{
block[CPU_num] = (char *)malloc(block_size);
}
for(i = 0;i < loop_num; i++)
{
char * block;
//in the thread use the private global heap
current_thread = getnumthread();
do something to block[current_thread ] ;
double result = 0;
for(j = 0; j < 100000; j++)
result += j^2;
}
for(i = 0; i < CPU_num; i++)
free(block[i]);
yeah 搞定, 这样一来性能飙升啊, 牛起来一片红。
写完收工


本文转自Intel_ISN 51CTO博客,原文链接:http://blog.51cto.com/intelisn/130766,如需转载请自行联系原作者
相关文章
|
数据可视化 Java 数据库
28个案例问题分析---20---内存长期占用导致系统慢--jvm调优
28个案例问题分析---20---内存长期占用导致系统慢--jvm调优
274 0
|
3月前
|
缓存 算法 关系型数据库
BP-Wrapper:无锁竞争的替换算法系统框架
BP-Wrapper:无锁竞争的替换算法系统框架
43 2
|
12月前
|
缓存 架构师 Linux
内存优化-如何使用tcmalloc来提升内存性能?提升的结果太不可思议
内存优化-如何使用tcmalloc来提升内存性能?提升的结果太不可思议
|
存储 缓存 固态存储
重学操作系统----05 | 存储器分级:L1 Cache 比内存和 SSD 快多少倍?
重学操作系统----05 | 存储器分级:L1 Cache 比内存和 SSD 快多少倍?
290 0
|
存储 C++
一顿饭的功夫带你了解block是如何内存管理的
一顿饭的功夫带你了解block是如何内存管理的
157 0
一顿饭的功夫带你了解block是如何内存管理的
|
缓存 算法 安全
小师妹学JVM之:cache line对代码性能的影响
小师妹学JVM之:cache line对代码性能的影响
小师妹学JVM之:cache line对代码性能的影响
|
SQL 缓存 监控
坏代码导致的性能问题大赏:CPU占用飙到了900%!
坏代码导致的性能问题大赏:CPU占用飙到了900%!
坏代码导致的性能问题大赏:CPU占用飙到了900%!
|
缓存 C语言
CPU是如何解决冒险问题的?(上)
CPU是如何解决冒险问题的?
404 0
CPU是如何解决冒险问题的?(上)
|
缓存
CPU是如何解决冒险问题的?(下)
CPU是如何解决冒险问题的?
294 0
CPU是如何解决冒险问题的?(下)
|
存储 缓存 算法