分析Cache访存模式对系统性能的影响
分析Cache访存模式对系统性能的影响表1、普通矩阵乘法与及优化后矩阵乘法之间的性能对比
矩阵大小
100
500
1000
1500
2000
2500
3000
一般算法执行时间
0.005
0.622
5.177
25.763
51.578
116.024
193.515
优化算法执行时间
0.004
0.384
3.070
12.480
22.462
49.304
82.696
加速比speedup
1.337
1.620
1.686
2.064
2.296
2.353
2.340
加速比定义:加速比=优化前系统耗时/优化后系统耗时;
所谓加速比,就是优化前的耗时与优化后耗时的比值。加速比越高,表明优化效果越明显
分析原因:传统的矩阵乘法算法通过遍历结果矩阵 c 的每一行和每一列来计算每个元素的值。在这种访问模式下,矩阵 a 的访问步长为 1,表现出良好的空间局部性,即连续访问的内存地址相邻,有利于缓存命中。
然而,矩阵 b 的访问步长为 size,意味着每次访问的内存地址间隔较大,导致缓存命中率较低。
为了优化缓存性能,我们可以采用一种改进的 ...
配置docker和拉取镜像源
配置dockerdownload dockerdocker下载
配置docker hub mirror有时候可能因为网络波动导致拉取docker失败,可以尝试把镜像源换成国内的。
打开docker右上角的设置图标,然后选择docker Engine,将下面代码复制到框里:
123456789101112131415{ "builder": { "gc": { "defaultKeepStorage": "20GB", "enabled": true } }, "experimental": false, "features": { "buildkit": true }, "registry-mirrors": [ //这里放国内镜像源 ]}
这里有些暂时可以用的源,不过建议去网上 ...
动态规划刷题1
P1216 [USACO1.5] [IOI1994]数字三角形 Number Triangles该题的思路是,从底层数开始,逐渐向上更新。
例如: 1
2 3
5 6 7
经过一次更新后,从倒数第二层开始,对于2,它的两个孩子5和6中6更大,于是2更新为2+6=8,同理3更新为10之后就有:
1
8 10
5 6 7
层数向上移动一层,接着从第一层继续执行上述操作,1+10=11,所以有:
11
8 10
5 6 7
输出第一个数就是最大路径和,1 + 3 + 7 = 11
很容易发现,每一次更新,把被更新的数变成由它向下辐射的三角中的,最大路径和。例如上例中的三角3 6 7, 3经过更新后变成三角3 6 7的最大路径和,3 + 7 = 10。采用这种分治的思想,从小到大,递归得到由第一个数向下辐射的三角的最大路径和。
12345678910111213141516 ...
深大计系1实验四--点格棋
实验报告一、实验目的与要求使用LC3汇编语言实现点格棋,根据英文指导文档实现各各模块之后再组合。
什么是点格棋?
Dots and Boxes is a two-player game played on a variable-size grid of dots. For this assignment, the playing board is a 4x4 grid of dots, and the two players are denoted by two symbols: 1 and 2
简单来说,就是使用连接点与点之间来实现圈地的游戏,谁最后将某个方块圈起来,那个方块就归谁,一个方块记一分,直到4x4下16个方块全都有所属时游戏结束。
二、实验步骤与过程主要函数罗列:大体在main函数里实现以下几个函数:
1、print_map():打印每次下棋后的地图
2、display_prompt():更新玩家控制权,控制棋子坐标输入和退出游戏
3、is_input_valid():检测坐标输入是否合法
4、is_occupied():检测输入的坐标是否已经被之前输入的占用
5、app ...
背包问题
01背包问题01背包问题是最经典的背包问题,给定几个物品的价值和体积,给定背包容量,求解背包价值最值。
基础思想是构造一个动态规划数组,下标 i 表示可容纳的体积,值代表剩余 i 体积时,最大可存储的物品价值。
1234567891011121314151617181920#include<iostream>#include<algorithm>int f[100] = {0}, v[100], w[100];int main(){ int m, n; std::cin >> n >> m; for(int i = 1; i <= n; i++){ std::cin >> v[i] >> w[i]; } for(int i = 1; i <= n; i++){ for(int j = m; j >= v[i]; j--){ f[j] = std::m ...
深大计系2实验三
一、 实验目标:
理解程序函数调用中参数传递机制;
掌握缓冲区溢出攻击方法;
进一步熟练掌握GDB调试工具和objdump反汇编工具。
二、实验环境:
计算机(Intel CPU)
Linux 64位操作系统
GDB调试工具
objdump反汇编工具
三、实验内容
本实验设计为一个黑客利用缓冲区溢出技术进行攻击的游戏。我们仅给黑客(同学)提供一个二进制可执行文件bufbomb和部分函数的C代码,不提供每个关卡的源代码。程序运行中有3个关卡,每个关卡需要用户输入正确的缓冲区内容,否则无法通过管卡!
要求同学查看各关卡的要求,运用\GDB调试工具和objdump反汇编工具**,通过分析汇编代码和相应的栈帧结构,通过缓冲区溢出办法在执行了getbuf()函数返回时作攻击,使之返回到各关卡要求的指定函数中。第一关只需要返回到指定函数,第二关不仅返回到指定函数还需要为该指定函数准备好参数,最后一关要求在返回到指定函数之前执行一段汇编代码完成全局变量的修改。
实验代码bufbomb和相关工具(sendstring/makecookie)的更详细内容请参考“实验四 缓冲区溢出攻击实验.ppt ...