社区
英特尔边缘计算技术
帖子详情
多核平台上的多级存储问题
weenyaimac
2010-03-05 09:33:52
大家都知道,多核平台上存储是分层次的,一般有内存、二级缓存、一级缓存,有的体系结构还有三级缓存,我的问题是在算法或者程序中如何表示(如命令或者函数)数据从主存读到二级缓存和数据从二级缓存读到一级缓存;数据从一级缓存写到二级缓存和数据从二级缓存写到主存,在这个过程中,如何控制这些数据在各级存储层次中的存储位置。请高手多多指点!谢谢~
...全文
208
7
打赏
收藏
多核平台上的多级存储问题
大家都知道,多核平台上存储是分层次的,一般有内存、二级缓存、一级缓存,有的体系结构还有三级缓存,我的问题是在算法或者程序中如何表示(如命令或者函数)数据从主存读到二级缓存和数据从二级缓存读到一级缓存;数据从一级缓存写到二级缓存和数据从二级缓存写到主存,在这个过程中,如何控制这些数据在各级存储层次中的存储位置。请高手多多指点!谢谢~
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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
为解决内存墙
问题
,即由于处理器速度远超内存读取速度而产生的性能瓶颈,现代计算机采用
多级
存储
体系结构。这种结构包括一级缓存(L1 Cache)和二级缓存(L2 Cache),其中L1 Cache位于处理器内部,负责快速存取数据...
从现代计算机发展看
多核
技术
目前的研究焦点包括线程调度策略、指令调度策略、预取技术、
多级
缓存(如L1、L2和专用缓存)优化以及
存储
系统仿真模型。这些研究旨在通过更有效的策略和结构减少
存储
访问延迟,从而提升
多核
多线程处理器的整体性能。...
一个面向异构
多核
处理器Cell的资源分配模型.pdf
2. **资源分配模型**:RSA模型通过创建三维优化空间来解决
多核
处理器上的资源分配
问题
,确保任务并行性和数据并行性的最大化,同时最小化通信成本。 3. **BSP模型**:整体同步并行模型是一种并行计算模型,强调计算...
吉林大学
多核
程序设计第一章系统概述.ppt
并行程序设计模式和
多级
存储
体系结构也是课程的重要组成部分。此外,课程还涉及了并行计算模型、并行编程环境、并行计算性能评测和程序性能优化等相关内容。 在多线程编程方面,课程内容包括进程、线程技术的概要,...
多核
计算机上的快速傅里叶变换并行算法 (2011年)
针对现有
多核
结构上快速傅里叶变换(FFT)并行算法没有利用
多级
缓存和线程级并行等
多核
特性
问题
,通过运用
多核
多级
存储
特性合理划分数据,采取子序列FFT 计算和多线程并行逐对计算FFT 相结合的方法,给出一个N 点、一...
英特尔边缘计算技术
568
社区成员
7,024
社区内容
发帖
与我相关
我的任务
英特尔边缘计算技术
英特尔® 边缘计算,聚焦于边缘计算、AI、IoT等领域,为开发者提供丰富的开发资源、创新技术、解决方案与行业活动。
复制链接
扫一扫
分享
社区描述
英特尔® 边缘计算,聚焦于边缘计算、AI、IoT等领域,为开发者提供丰富的开发资源、创新技术、解决方案与行业活动。
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章