社区
英特尔边缘计算技术
帖子详情
多核平台上的多级存储问题
weenyaimac
2010-03-05 09:33:52
大家都知道,多核平台上存储是分层次的,一般有内存、二级缓存、一级缓存,有的体系结构还有三级缓存,我的问题是在算法或者程序中如何表示(如命令或者函数)数据从主存读到二级缓存和数据从二级缓存读到一级缓存;数据从一级缓存写到二级缓存和数据从二级缓存写到主存,在这个过程中,如何控制这些数据在各级存储层次中的存储位置。请高手多多指点!谢谢~
...全文
195
7
打赏
收藏
多核平台上的多级存储问题
大家都知道,多核平台上存储是分层次的,一般有内存、二级缓存、一级缓存,有的体系结构还有三级缓存,我的问题是在算法或者程序中如何表示(如命令或者函数)数据从主存读到二级缓存和数据从二级缓存读到一级缓存;数据从一级缓存写到二级缓存和数据从二级缓存写到主存,在这个过程中,如何控制这些数据在各级存储层次中的存储位置。请高手多多指点!谢谢~
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
7 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
manchesterunitedhust
2010-04-03
打赏
举报
回复
恩 我也想到过这个问题 最近在做英特尔的比赛 在看关于多核编程的问题 多多学习
weenyaimac
2010-04-02
打赏
举报
回复
谢谢楼上的,有什么问题再向你请教!
intel_www
2010-03-08
打赏
举报
回复
在IA32和Intel64系统中可以进行有限的控制。详细的描述可以参考
http://www.intel.com/Assets/PDF/manual/248966.pdf
的第7章,尤其是第7.5小节里面的内容。
uuussseeennn
2010-03-07
打赏
举报
回复
呵呵,有啥研究成果记得多分享分享哦:)
weenyaimac
2010-03-06
打赏
举报
回复
谢谢!我理解你的意思!调整数据结构以减少线程之间的乒乓现象,L1 cache的一行一般为64字节,所以char数组的大小为64的倍数应该都可以。不过这只是优化内存的一个方面,我再研究研究!
uuussseeennn
2010-03-05
打赏
举报
回复
给一个样例程序,尝试调整结构体Count里面的space大小,如用16,32,60,128等值来替换64,观察执行结果会有所不同,原因就是我上面说的:
#include <iostream>
#include <windows.h>
using namespace std;
struct Count
{
long count1;
char space[128];
long count2;
};
DWORD WINAPI Calculate1(void *p)
{
double x = 0,y = 0;
long* c1 = (long*)p;
for(; x <= 0.5;x += 0.0001)
for(y = 0;y <= 1;y += 0.0001)
{
if (x*x + y*y <= 1) (*c1)++;
}
return 0;
}
DWORD WINAPI Calculate2(void *p)
{
double i = 0,j = 0;//16
long* c2 = (long*)p;
for(i=0.5001;i <=1;i+=0.0001)
for(j=0;j <=1;j+=0.0001)
{
if(i*i+j*j <=1) (*c2)++;
}
return 0;
}
int main()
{
DWORD pThreadID;
Count cnt;
DWORD startTime = 0,endTime = 0;
startTime= GetTickCount();
Calculate1(&cnt.count1);
Calculate2(&cnt.count2);
cout << "Serial calculate cost " << GetTickCount() - startTime << "ms." << endl;
cnt.count1 = 0;
cnt.count2 = 0;
startTime= GetTickCount();
HANDLE hThread1 = CreateThread (NULL,
0,
Calculate1,
&cnt.count1,
0,
&pThreadID);
HANDLE hThread2 = CreateThread (NULL,
0,
Calculate2,
&cnt.count2,
0,
&pThreadID);
WaitForSingleObject(hThread1, INFINITE);
WaitForSingleObject(hThread2, INFINITE);
endTime=GetTickCount();
cout << "Parallel calculate cost " << endTime-startTime << "ms." << endl;
}
uuussseeennn
2010-03-05
打赏
举报
回复
看一下此贴:http://topic.csdn.net/u/20100304/09/1c5143c5-d886-450a-80a0-bf9a92f7c789.html以及我的回复。
我不知道能不能在应用层直接控制数据在不同存储器之间的移动,凭感觉应该是很难做到的,即使能做到,我们要自己设计一个比CPU自身更好的算法,难度也会很大。所以我们最好是对已有的数据结构进行调整,调整的原则就是使得
不在
同一个计算逻辑里的数据位于不同的cache行(cpu存取的数据的最小单位,是一级缓存中的一行),从而减少数据因“写后读 或 写后写”造成的同步开销(一级缓存之间的数据同步)。
多核
程序设计2.pdf
多核
multicore 程序 设计 pdf 这是第二部分
从现代计算机发展看
多核
技术
自从英特尔在2005年推出了第一代双核处理器之后,计算机上不断涌现的新兴使用模式让最终用户对处理器的性能每年提高的幅度在不断加速,而
多核
技术是目前行之有效的方法。随着计算机技术的不断革新,我们对
多核
技术的了解也逐步深入。本文首先介绍了
多核
技术的
存储
技术和功耗情况,在此基础上讨论了当前
多核
处理器研究的热点,并对
多核
的应用前景进行了展望。
一个面向异构
多核
处理器Cell的资源分配模型.pdf
一个面向异构
多核
处理器Cell的资源分配模型.pdf
多核
计算机上的快速傅里叶变换并行算法 (2011年)
针对现有
多核
结构上快速傅里叶变换(FFT)并行算法没有利用
多级
缓存和线程级并行等
多核
特性
问题
,通过运用
多核
多级
存储
特性合理划分数据,采取子序列FFT 计算和多线程并行逐对计算FFT 相结合的方法,给出一个N 点、一维、有序和基数为2 的
多核
多线程并行计算FFT 非递归算法。理论分析和实验结果表明,该算法实用、高效,能获得较好的加速比和可扩展性。
多核
架构下的数据处理算法优化策略综述.pdf
#资源达人分享计划#
英特尔边缘计算技术
567
社区成员
7,024
社区内容
发帖
与我相关
我的任务
英特尔边缘计算技术
英特尔® 边缘计算,聚焦于边缘计算、AI、IoT等领域,为开发者提供丰富的开发资源、创新技术、解决方案与行业活动。
复制链接
扫一扫
分享
社区描述
英特尔® 边缘计算,聚焦于边缘计算、AI、IoT等领域,为开发者提供丰富的开发资源、创新技术、解决方案与行业活动。
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章