直接消耗包括: CPU寄存器需要保存和加载, 系统调度器的代码需要执行, TLB实例需要重新加载, CPU 的pipeline需要刷掉。
间接消耗:多核的cache之间得共享数据。间接消耗对于程序的影响要看线程工作区操作数据的大小。...
分类:
编程语言 时间:
2014-06-08 16:42:43
阅读次数:
279
上一节,简单介绍了如何发现性能瓶颈。从这节开始,我会和大家分享我在项目中做的一些性能调优工作。这个系列没有什么顺序可言,觉得什么重要,就说说什么。
这节,我们聊缓存。
最开始接触缓存这个词,是学习硬件知识的时候,cpu有缓存,而且还分一级缓存,二级缓存,三级缓存。、
记得当时老师提了一个很有意思的问题。
问:电脑为什么要有一级缓存,二级缓存……,而且还要有内存,还要有硬盘?...
分类:
编程语言 时间:
2014-06-08 15:44:23
阅读次数:
257
当CPU访问某个地址,会首先将访问请求发给L1D内存控制器,如果在L1D cache或L1D SRAM(CPU直接访问L1D内存)中命中,则L1D内存控制器就向CPU直接返回访问内存,如果没有命中则需要L2内存控制器请求…
这样当CPU访问的地址是空地址(NULL)或者是DSP中reserved(DSP没有开放使用的内存地址)的地址,在L1D内存控制器中就会检测到CPU非法地址访问,就会通过L1...
分类:
其他好文 时间:
2014-06-08 15:26:04
阅读次数:
166
对于TIC66x DSP,每个corePac的L1D内存(包括cache与SRAM)大小为32k字节。L1D内存控制器把32k字节的内存分为16个页,每页大小为2k字节,与之对应的是L1D内存控制器实现了16个寄存器(L1DMPPA16~31,见下图)用于一对一定义16个页的访问权限(设置是否允许当前CPU以及哪些外设访问和设置访问权限)。
而在TI C66x DSP的corePac文档中有这一...
分类:
其他好文 时间:
2014-06-08 15:19:52
阅读次数:
209
ios中的多线程的用法总结
1、进程的基本概念
(1)每一个进程都是一个应用程序,都有独立的内存空间,一般来说一个应用程序存在一个进程,但也有多个进程的情况
(2)同一个进程的线程共享内存中的内存和资源
2、多线程的基本概念
(1)每一个程序都有一个主线程,程序启动时创建(调用main来启动)。
(2)多线程技术表示,一个应用程序有多个线程,使用多线程能提供CPU的利用率,防止主线程被堵塞。
(3)任何有可能堵塞主线程的任务不要在主线程执行(如:访问网络)。
(4)主线程的生命周期和应用程序绑定着,程序...
分类:
移动开发 时间:
2014-06-08 14:50:29
阅读次数:
336
由于历史的原因,业界存在两种字节序标准:BigEndian和LittleEndian,Power PC是大头,X86是小头,有些CPU可以通过寄存器设置支持不同的字节序,例如MIPS;
所谓大头就是高位在低字节,低位在高字节;小头则与此相反,以0x345678为例,大头内存从低到高的存放次序为00,34,56,78,小头内存从低到高的存放次序为78,56,34,00;(上面的数值统一为1...
分类:
其他好文 时间:
2014-06-08 10:10:06
阅读次数:
245
最近在实际的项目中碰到这样的问题:
嵌入式系统DDR (RBC row, bank, columne), 每块1Gbit816, 两块由片选决定读写其中的一块.
Memory controller通过AXI连接在SOC中.
1.
在I-CACHE没有使能的情况下, 通过MC访问DDR有三路TRAFFIC, 分别是取指令, CPU刷/写FRAME BUFFER, DMA取/读FRAM...
分类:
其他好文 时间:
2014-06-08 08:58:15
阅读次数:
242
C:\Users\CBS\AppData\Local\Google\Chrome\Application\chrome.exe --user-agent="Mozilla/5.0 (iMac; U; CPU like Mac OS X; en) AppleWebKit/420+ (KHTML, like Gecko) Version/3.0 Mobile/1A537a Safari/419.3...
分类:
其他好文 时间:
2014-06-08 08:55:35
阅读次数:
203
另一个例子,通过下面的log看,CPU在访问reserved的地址0x53611EFD,非法访问时该地址会在L1D内存控制器的L1DMPFSR寄存器中记录。
** FATAL EXCEPTION Nid:0x1262 TYPE:EXTERNAL:[0xEA07A]CpuL1DMemoryProtectionFault Violated memory address(L1DMPFAR):0x536...
分类:
其他好文 时间:
2014-06-08 04:13:06
阅读次数:
292
在代码维护中,发现一个指针的初始值是0,在没有走到正常分支处该指针是不会被赋值的,而在软件的启动阶段,恰恰该指针不会走到正常分支,所以在后面使用该指针的时候,并没有判断指针值是否为空,所以CPU使用空指针访问,就会出现问题,并在L1内存控制器中被检测到,通过event 122=0x7A上报。
根据下图CPU通过空指针访问0x48的地址,是因为空指针指向一个结构体,在用指针去访问结构体中某个变量,...
分类:
其他好文 时间:
2014-06-08 03:46:13
阅读次数:
217