一、存储器山的数据测量以及绘制
1.存储器山的数据测量(包含我所测试的数据)
这一部分很简单,因为代码已经由CMU提供给大家了,大家只需要简单地修改代码,将结果输出到txt文件即可,然后再用MATLAB或者Python写一个脚本读取该txt文件,然后将结果绘制出来即可。
首先,将结果输出到文件,很简单,这个大家都会。不过这里还是有一个要注意的点,将修改的代码编译时,(由于我是在Linux系统上完成这个实验的),mountain.c这个文件中包含对另外两个自定义的头文件(“clock.h”以及“fcyc2.h)的引用,因此编译时需要执行:
gcc -Og -o my_memory_mountain moutain.c clock.c fcyc2.c
然后会得到一个可执行文件 my_memory_mountain,然后直接执行./my_memory_moutain等待一段时间之后就会得到存储器山的测量结果了。以我自己所测量的结果为例:
首先是原始输出的数据:
其中s1-s15为步长,128m是数据大小,表格结果为读吞吐量。为了便于后期脚本的数据读取与处理,将原始结果人工进行处理,结果如下:
2.存储器山的绘制(包含代码以及结果)
因为我Matlab用得不熟,所以这里是用python的第三方库pyecharts的Surface3D来绘制的存储器山,但是绘制出来的结果不是很理想,因为我看了很久文档都没有弄太明白如何设置颜色的渐变,或者是说将存储器上的不同区域着上不同的色。
其实从pyecharts的官方文档中,我只找到了一个设置颜色渐变的系列配置项,ItemStyleOpts,但是,我设置的时候老出问题,而且好像没有什么效果
先上python的代码(全局配置项当中的VisualMapOpts其实可以忽略,我当时是想设置颜色渐变的,但是没弄出来,所以把这一部分的代码去掉也是没有问题的):
# author Morty
# 2019-8-25
# python 3.6
from pyecharts.charts import Surface3D
from pyecharts import options as opts
class CreateMountain:
def __init__(self):
self.data_set = []
self.gragh = Surface3D()
def data_process(self):
with open(r"C:\Users\54235\Desktop\m_data_set.txt", "r") as f:
data_set_origin = f.readlines()
for line in data_set_origin:
for index, item in enumerate(line.split("\t")[:-1], start=0):
# index即为步长
if index == 0:
read_throughput = int(item[0:-1])
flag = item[-1]
if flag == "m":
read_throughput *= 1000000
elif flag == "k":
read_throughput *= 1000
else:
size = int(item)
self.data_set.append([index, read_throughput, size])
def plot(self):
self.data_process()
self.gragh.add(
# series name
"",
# 通过k*k循环展开测出来的数据集
data=self.data_set,
# 三维图形的着色效果配置,realistic即为真实感渲染
shading="realistic"