处理器提速秘密:Cache的作用与原理

需积分: 17 22 下载量 80 浏览量 更新于2024-08-20 收藏 9.65MB PPT 举报
"为什么一小块Cache能提速?-大话处理器ppt" 处理器是计算机的核心,其性能直接影响到整个系统的运行速度。Cache作为一种高速缓存,虽然容量相对较小,但其存在能够显著提升处理器的效率,这主要得益于时间局部性和空间局部性的原理。 1. 时间局部性:这个概念指的是在一段时间内,程序中的某些数据或指令可能会被连续多次访问。例如,当用户观看《射雕英雄传》时,如果没看完,那么第二天大概率会继续观看。在计算机中,这意味着一旦某个数据或指令被加载到处理器,短时间内很可能还会再次需要。Cache的设计就是利用这一特性,将最近访问过的数据暂存起来,当下次需要时,可以从Cache中快速获取,而不是等待相对较慢的主存提供,从而缩短了处理时间。 2. 空间局部性:空间局部性是指程序在访问某个内存地址后,往往会在附近地址上进行后续访问。比如,《射雕英雄传》看完后,用户可能紧接着会看《神雕侠侣》。在处理器中,这意味着一旦执行了一个指令或访问了一个数据块,附近的指令或数据也有可能会被连续访问。Cache会按照一定的策略(如最近最少使用LRU或先进先出FIFO等)保存邻近的数据,提高连续访问的速度。 3. 大话处理器讲解了处理器从微架构到指令集体系结构的多个层面,其中Cache作为处理器的“肚量”,是优化性能的关键部分。微架构涉及处理器内部的运算单元、控制单元以及数据通路等,而指令集体系结构则定义了处理器理解和执行的指令集。理解这些层次有助于我们更好地优化程序,使其更适应处理器的工作方式。 4. 除了Cache,处理器的发展还包括SOC(系统级芯片)的集成,将多种功能组件整合在一个芯片上,进一步提高了效率和集成度。此外,从早期的大型机到个人计算机(PC)的普及,处理器的角色经历了从军用到科研再到家用的转变,性能不断提升,体积不断缩小,使得计算能力逐渐飞入寻常百姓家。 5. 在处理器的历史中,有许多重要的人物,如查尔斯·巴贝奇、阿兰·图灵、冯·诺依曼以及华人朱传榘和王安,他们的贡献推动了计算机科学和技术的发展。冯·诺依曼提出的存储程序思想奠定了现代计算机的基础,而朱传榘和王安的创新则在计算机硬件领域留下了深刻的印记。 一小块Cache之所以能提高处理器速度,是因为它有效利用了时间和空间局部性,减少了处理器访问主存的次数,提升了数据获取的效率。同时,了解处理器的工作原理和历史背景,对于理解和优化计算机系统的性能至关重要。
2023-06-12 上传

def genBlurImage(p_obj, img): smax = p_obj['delta0'] / p_obj['D'] * p_obj['N'] temp = np.arange(1,101) patchN = temp[np.argmin((smax*np.ones(100)/temp - 2)**2)] patch_size = round(p_obj['N'] / patchN) xtemp = np.round_(p_obj['N']/(2*patchN) + np.linspace(0, p_obj['N'] - p_obj['N']/patchN + 0.001, patchN)) xx, yy = np.meshgrid(xtemp, xtemp) xx_flat, yy_flat = xx.flatten(), yy.flatten() NN = 32 # For extreme scenarios, this may need to be increased img_patches = np.zeros((p_obj['N'], p_obj['N'], int(patchN**2))) den = np.zeros((p_obj['N'], p_obj['N'])) patch_indx, patch_indy = np.meshgrid(np.linspace(-patch_size, patch_size+0.001, num=2*patch_size+1), np.linspace(-patch_size, patch_size+0.001, num=2*patch_size+1)) for i in range(int(patchN**2)): aa = genZernikeCoeff(36, p_obj['Dr0']) temp, x, y, nothing, nothing2 = psfGen(NN, coeff=aa, L=p_obj['L'], D=p_obj['D'], z_i=1.2, wavelength=p_obj['wvl']) psf = np.abs(temp) ** 2 psf = psf / np.sum(psf.ravel()) focus_psf, _, _ = centroidPsf(psf, 0.85) #: Depending on the size of your PSFs, you may want to use this psf = resize(psf, (round(NN/p_obj['scaling']), round(NN/p_obj['scaling']))) patch_mask = np.zeros((p_obj['N'], p_obj['N'])) patch_mask[round(xx_flat[i]), round(yy_flat[i])] = 1 patch_mask = scipy.signal.fftconvolve(patch_mask, np.exp(-patch_indx**2/patch_size**2)*np.exp(-patch_indy**2/patch_size**2)*np.ones((patch_size*2+1, patch_size*2+1)), mode='same') den += scipy.signal.fftconvolve(patch_mask, psf, mode='same') img_patches[:,:,i] = scipy.signal.fftconvolve(img * patch_mask, psf, mode='same') out_img = np.sum(img_patches, axis=2) / (den + 0.000001) return out_img

2023-05-19 上传