目录
今日已完成任务列表
超算/高性能计算总结
遇到的问题及解决方案
无
任务完成详细笔记
阶段一
在学习的第一阶段,我们首先对需要优化的程序——Darknet框架进行了了解,其具有灵活性高、结构明晰、安装简单方便等特点;之后对超级计算机的概念和体系结构进行了了解,同时也了解了超级计算机并行工作的基本原理;最后对Linux操作系统的基本指令进行了熟悉
阶段二
这一阶段主要对Linux常用的命令、基础性能分析工具进行学习
vim
普通模式(:)
插入模式(i)
可视模式(v)
GCC
分步编译和链接
直接编译出二进制文件
Makeu与Makefile
slurm
GDB
阶段三
这一阶段主要对高性能算法 (不同矩阵的存储格式) 有了初次的了解;同时对常用的性能分析工具有了一定的熟悉;最后对传统性能优化技术进行了学习
矩阵存储与SpMV算法
COO格式
CSR格式
DIA格式
gprof
传统性能优化技术
循环合并
for (i=0; i<N; i++)
x[i] = a[i] + b[i]
for (i=0; i<N; i++)
y[i] = a[i] - b[i]
for (i=0; i<N; i++)
{
x[i] = a[i] + b[i];
y[i] = a[i] - b[i];
}
循环展开
for (i=0; i<N; i++)
{
A[i] = A[i] + B[i];
}
for (i=0; i<N; i+=4)
{
A[i] = A[i] + B[i];
A[i+1] = A[i+1] + B[i+1];
A[i+2] = A[i+2] + B[i+2];
A[i+3] = A[i+3] + B[i+3];
}
循环交换
for (j=0; j<N; j++)
for (k=0; k<N; k++)
for (i=0; i<N; i++)
A[i][j] = a[i][j] + B[i][k] * C[k][j];
for (j=0; j<N; j++)
for (i=0; i<N; i++)
for (k=0; k<N; k++)
A[i][j] = A[i][j] + B[i][k] * C[k][j];
循环分布
for (i=0; i<N; i++)
{
A[i] = i;
B[i] = 2 + B[i];
C[i] = 3 + C[i-1];
}
for (i=0; i<N; i++)
{
A[i] = i;
B[i] = 2 + B[i];
}
for (i=0; i<N; i++)
C[i] = 3 + C[i-1];
循环不变量外提
for (i=0; i<N; i++)
for (j=0; j<M; j++)
U[i] = U[i] + W[i] * W[i] * D[j] / (dt * dt);
T1 = dt * dt;
for (i=0; i<N; i++)
{
T2 = W[i] * W[i];
for (j=0; j<M; j++)
U[i] = U[i] + T2 * D[j]/T1;
}
循环分块
for (i=0; i<N; i++)
for (j=0; j<M; j++)
A[i] = A[i] + B[j]
for (j=0; j<M; j+=T)
for (i=0; i<N; i++)
for(jj=0; jj<T; jj++)
A[i] = A[i] + B[j+jj]
循环分裂
for (i=0; i<N; i++)
vec[i] = vec[i] + vec[M];
for (i=0; i<M; i++)
vec[i] = vec[i] + vec[M];
for (i=M; i<N; i++)
vec[i] = vec[i] + vec[M];
阶段四
该阶段主要利用之前阶段所学内容对Darknet程序进行优化
- 使用make对程序进行编译 (-pg选项*)
- 运行可执行文件 (生成gmon.out文件)
- 利用 gprof 工具将gmon.out文件转为.txt文件
- 分析文件内容,找出热点函数
- 使用优化技术对热点函数进行优化
对自己的表现是否满意
对各个阶段的内容进行了总结,虽然时间不算长,但收获还是值得记录的!
简述下次计划
完结撒花!
其他反馈
无