diff --git a/docs/draft/case-mnist/README.md b/docs/draft/case-mnist/README.md
new file mode 100644
index 0000000..a84e779
--- /dev/null
+++ b/docs/draft/case-mnist/README.md
@@ -0,0 +1,13 @@
+# MNIST Case
+
+This is an analysis report for MNIST, which contains a PyTorch-based analysis of the MNIST experimental code and process, including analyze the trace-points in it related to data manipulation.
+
+# What's next
+
+We will add this into our example case later:
+
+- [Support mnist case · Issue #85 · hitsz-ids/duetector (github.com)](https://github.com/hitsz-ids/duetector/issues/85)
+
+# Anouncement
+
+Thanks to the students from HITSZ for providing us this analysis report!
diff --git a/docs/draft/case-mnist/imgs/Analysis.png b/docs/draft/case-mnist/imgs/Analysis.png
new file mode 100644
index 0000000..6222758
Binary files /dev/null and b/docs/draft/case-mnist/imgs/Analysis.png differ
diff --git a/docs/draft/case-mnist/imgs/DataStream.png b/docs/draft/case-mnist/imgs/DataStream.png
new file mode 100644
index 0000000..9aa6ce0
Binary files /dev/null and b/docs/draft/case-mnist/imgs/DataStream.png differ
diff --git a/docs/draft/case-mnist/imgs/ProcessionandHooks.png b/docs/draft/case-mnist/imgs/ProcessionandHooks.png
new file mode 100644
index 0000000..1ee550d
Binary files /dev/null and b/docs/draft/case-mnist/imgs/ProcessionandHooks.png differ
diff --git a/docs/draft/case-mnist/imgs/command0.png b/docs/draft/case-mnist/imgs/command0.png
new file mode 100644
index 0000000..9e6b778
Binary files /dev/null and b/docs/draft/case-mnist/imgs/command0.png differ
diff --git a/docs/draft/case-mnist/imgs/command1.png b/docs/draft/case-mnist/imgs/command1.png
new file mode 100644
index 0000000..4f3e5fd
Binary files /dev/null and b/docs/draft/case-mnist/imgs/command1.png differ
diff --git a/docs/draft/case-mnist/imgs/command2.png b/docs/draft/case-mnist/imgs/command2.png
new file mode 100644
index 0000000..6232f8e
Binary files /dev/null and b/docs/draft/case-mnist/imgs/command2.png differ
diff --git a/docs/draft/case-mnist/report.md b/docs/draft/case-mnist/report.md
new file mode 100644
index 0000000..635aa71
--- /dev/null
+++ b/docs/draft/case-mnist/report.md
@@ -0,0 +1,269 @@
+# 基于机器学习的mnist实验的文件数据流使用监控实验报告
+
+## 机器学习的基于mnist数据集的torch实验分析,在实验过程中使用数据、产生中间结果、生成和保存最终模型三个工程中对数据的工作流
+
+下面根据实验代码,按照对mnist数据下载、处理,神经网络的定义、训练、保存、加载并验证的流程对数据流进行分析。
+
+数据集采用mnist,第一步从网络下载mnist,加载MNIST手写数字数据集,并将训练数据集转换为Tensor格式。测试数据集加载的默认转换为PIL.Image格式
+
+下载mnist手写数据集
+
+```python
+ # 下载mnist手写数据集
+ train_data = torchvision.datasets.MNIST(
+ root='./data/', # 保存或提取的位置 会放在当前文件夹中
+ train=True, # true说明是用于训练的数据,false说明是用于测试的数据
+ transform=torchvision.transforms.ToTensor(), # 转换PIL.Image or numpy.ndarray
+ download=DOWNLOAD_MNIST, # 已经下载了就不需要下载了
+ )
+
+ test_data = torchvision.datasets.MNIST(
+ root='./data/',
+ train=False # 表明是测试集
+)
+```
+
+这段代码使用了PyTorch中的torchvision.datasets.MNIST类来加载MNIST手写数字数据集对数据进行的处理:
+1. `root='./data/'`: 指定了数据集保存或提取的位置,这里设置为'./data/',表示数据集将保存在当前文件夹中。
+2. 用train=?参数将数据分为mnist的训练集和测试集。
+3. `transform=torchvision.transforms.ToTensor()`: 将图像数据转换为Tensor格式。`ToTensor()`是一个变换函数,它将PIL.Image格式或NumPy数组格式的图像转换为Tensor格式。
+4. `download=DOWNLOAD_MNIST`: 判断是否需要下载数据集。
+
+接下来对训练集和测试集进行预处理,创建了一个用于训练数据的DataLoader对象,并对测试数据进行了预处理,使其适合模型输入。同时,获取了对应的测试标签。
+
+```python
+# 批训练 50个samples, 1 channel,28x28 (50,1,28,28)
+# Torch中的DataLoader是用来包装数据的工具,它能帮我们有效迭代数据,这样就可以进行批训练
+train_loader = Data.DataLoader(
+ dataset=train_data,
+ batch_size=BATCH_SIZE,
+ shuffle=True # 是否打乱数据,一般都打乱
+)
+
+# 进行测试
+# 为节约时间,测试时只测试前2000个
+#
+test_x = torch.unsqueeze(test_data.train_data, dim=1).type(torch.FloatTensor)[:2000] / 255
+# torch.unsqueeze(a) 是用来对数据维度进行扩充,这样shape就从(2000,28,28)->(2000,1,28,28)
+# 图像的pixel本来是0到255之间,除以255对图像进行归一化使取值范围在(0,1)
+test_y = test_data.test_labels[:2000]
+```
+
+这段代码对数据进行了以下处理:
+1. `train_loader = Data.DataLoader(dataset=train_data, batch_size=BATCH_SIZE, shuffle=True)`: 创建了一个训练数据的DataLoader对象,用于批量读取数据。其中:
+ - `dataset=train_data`:指定了数据集,即之前加载的训练数据集`train_data`。
+ - `batch_size=BATCH_SIZE`:指定了每个批次的样本数量。
+ - `shuffle=True`:对数据进行打乱以增加随机性。
+2. `test_x = torch.unsqueeze(test_data.train_data, dim=1).type(torch.FloatTensor)[:2000] / 255`:
+ - `torch.unsqueeze(test_data.train_data, dim=1)`: 使用`torch.unsqueeze()`函数将原本的测试数据的维度从(2000, 28, 28)扩展为(2000, 1, 28, 28)。这个操作在维度1上增加了一个维度,用于表示通道数。
+ - `.type(torch.FloatTensor)`: 将数据类型转换为`torch.FloatTensor`,即浮点型。
+ - `[:2000]`: 截取前2000个样本。
+ - `/ 255`: 将像素值从原始的0到255的范围归一化到0到1的范围。
+3. `test_y = test_data.test_labels[:2000]`:这行代码获取了测试数据集中前2000个样本的标签。
+
+定义神经网络的结构
+
+```python
+# 用class类来建立CNN模型
+# CNN流程:卷积(Conv2d)-> 激励函数(ReLU)->池化(MaxPooling)->
+# 卷积(Conv2d)-> 激励函数(ReLU)->池化(MaxPooling)->
+# 展平多维的卷积成的特征图->接入全连接层(Linear)->输出
+
+class CNN(nn.Module): # 我们建立的CNN继承nn.Module这个模块
+ def __init__(self):
+ super(CNN, self).__init__()
+ # 建立第一个卷积(Conv2d)-> 激励函数(ReLU)->池化(MaxPooling)
+ self.conv1 = nn.Sequential(
+ # 第一个卷积con2d
+ nn.Conv2d( # 输入图像大小(1,28,28)
+ in_channels=1, # 输入图片的高度,因为minist数据集是灰度图像只有一个通道
+ out_channels=16, # n_filters 卷积核的高度
+ kernel_size=5, # filter size 卷积核的大小 也就是长x宽=5x5
+ stride=1, # 步长
+ padding=2, # 想要con2d输出的图片长宽不变,就进行补零操作 padding = (kernel_size-1)/2
+ ), # 输出图像大小(16,28,28)
+ # 激活函数
+ nn.ReLU(),
+ # 池化,下采样
+ nn.MaxPool2d(kernel_size=2), # 在2x2空间下采样
+ # 输出图像大小(16,14,14)
+ )
+ # 建立第二个卷积(Conv2d)-> 激励函数(ReLU)->池化(MaxPooling)
+ self.conv2 = nn.Sequential(
+ # 输入图像大小(16,14,14)
+ nn.Conv2d( # 也可以直接简化写成nn.Conv2d(16,32,5,1,2)
+ in_channels=16,
+ out_channels=32,
+ kernel_size=5,
+ stride=1,
+ padding=2
+ ),
+ # 输出图像大小 (32,14,14)
+ nn.ReLU(),
+ nn.MaxPool2d(2),
+ # 输出图像大小(32,7,7)
+ )
+ # 建立全卷积连接层
+ self.out = nn.Linear(32 * 7 * 7, 10) # 输出是10个类
+
+ # 下面定义x的传播路线
+ def forward(self, x):
+ x = self.conv1(x) # x先通过conv1
+ x = self.conv2(x) # 再通过conv2
+ # 把每一个批次的每一个输入都拉成一个维度,即(batch_size,32*7*7)
+ # 因为pytorch里特征的形式是[bs,channel,h,w],所以x.size(0)就是batchsize
+ x = x.view(x.size(0), -1) # view就是把x弄成batchsize行个tensor
+ output = self.out(x)
+ return output
+
+
+cnn = CNN()
+print(cnn)
+```
+
+模型训练与保存:使用训练数据对CNN模型进行训练的过程,并打印了训练损失和测试准确率,最后将训练好的模型参数保存到文件中。
+
+```python
+# 训练
+# 把x和y 都放入Variable中,然后放入cnn中计算output,最后再计算误差
+
+# 优化器选择Adam
+optimizer = torch.optim.Adam(cnn.parameters(), lr=LR)
+# 损失函数
+loss_func = nn.CrossEntropyLoss() # 目标标签是one-hotted
+
+ 开始训练
+ for epoch in range(EPOCH):
+ for step, (b_x, b_y) in enumerate(train_loader): # 分配batch data
+ output = cnn(b_x) # 先将数据放到cnn中计算output
+ loss = loss_func(output, b_y) # 输出和真实标签的loss,二者位置不可颠倒
+ optimizer.zero_grad() # 清除之前学到的梯度的参数
+ loss.backward() # 反向传播,计算梯度
+ optimizer.step() # 应用梯度
+
+ if step % 50 == 0:
+ test_output = cnn(test_x)
+ pred_y = torch.max(test_output, 1)[1].data.numpy()
+ accuracy = float((pred_y == test_y.data.numpy()).astype(int).sum()) / float(test_y.size(0))
+ print('Epoch: ', epoch, '| train loss: %.4f' % loss.data.numpy(), '| test accuracy: %.2f' % accuracy)
+
+ torch.save(cnn.state_dict(), 'cnn2.pkl')#保存模型
+```
+
+1. `for epoch in range(EPOCH):`: 外层循环控制训练的轮数(epoch)。
+2. `for step, (b_x, b_y) in enumerate(train_loader):`: 内层循环遍历训练数据集。
+ - `b_x, b_y`: 表示每个小批次(batch)的输入数据和对应的标签。
+3. `output = cnn(b_x)`: 将输入数据 `b_x` 输入到CNN模型 `cnn` 中进行计算,得到预测输出 `output`。
+4. `loss = loss_func(output, b_y)`: 根据预测输出 `output` 和真实标签 `b_y` 计算损失值 `loss`。
+5. `optimizer.zero_grad()`: 清除之前计算的梯度信息。
+6. `loss.backward()`: 反向传播计算梯度。
+7. `optimizer.step()`: 根据计算得到的梯度更新模型参数。
+8. `if step % 50 == 0:`: 每隔一定步数(50)打印一次训练信息。
+ - `test_output = cnn(test_x)`: 在测试集上运行训练好的模型,得到测试输出 `test_output`。
+ - `pred_y = torch.max(test_output, 1)[1].data.numpy()`: 根据测试输出找到最大概率对应的类别,将其转为numpy数组。
+ - `accuracy = float((pred_y == test_y.data.numpy()).astype(int).sum()) / float(test_y.size(0))`: 计算准确率。
+ - 打印当前轮数、训练损失值和测试准确率。
+9. `torch.save(cnn.state_dict(), 'cnn2.pkl')`: 将训练好的模型参数保存到文件中,文件名为 `cnn2.pkl`。
+
+加载模型并且将之前输入的测试集数据作为输入,检测输出和测试数据集标签的差异。
+
+```python
+# 加载模型,调用时需将前面训练及保存模型的代码注释掉,否则会再训练一遍
+cnn.load_state_dict(torch.load('cnn2.pkl'))
+cnn.eval()
+# print 10 predictions from test data
+inputs = test_x[:32] # 测试32个数据
+test_output = cnn(inputs)
+pred_y = torch.max(test_output, 1)[1].data.numpy()
+print(pred_y, 'prediction number') # 打印识别后的数字
+# print(test_y[:10].numpy(), 'real number')
+
+img = torchvision.utils.make_grid(inputs)
+img = img.numpy().transpose(1, 2, 0)
+
+# 下面三行为改变图片的亮度
+# std = [0.5, 0.5, 0.5]
+# mean = [0.5, 0.5, 0.5]
+# img = img * std + mean
+cv2.imshow('win', img) # opencv显示需要识别的数据图片
+key_pressed = cv2.waitKey(0)
+```
+
+## 梳理并输出数据流程图
+
+![数据流分析](./imgs/DataStream.png)
+
+## 实验过程中可能涉及的系统调用和网络调用,eBPF的hook点分析
+
+对实验过程的strace部分例子分析:
+调研方法:小组在网络上搜索pytorch实验中可能产生的系统调用和ebpf的hook点,以及如何查找并且验证,之后采用了strace工具对pytorch训练过程进行了跟踪调研查找产生的系统调用,利用在特定代码位置插入会产生特定系统调用的函数作为分割点,并阅读pytorch源码来验证具体实验流程中pytorch代码所产生系统调用。由系统调用查找Trace points:
+Linux可以通过查看 /sys/kernel/debug/tracing/available_events 文件的内容找到 tracepoint 可监控的事件,
+sudo cat /sys/kernel/debug/tracing/available_events |grep ‘系统调用名称‘
+过滤以匹配包含系统调用名称的行
+
+对实验过程的strace部分例子分析:
+
+![部分产生的系统调用](./imgs/Analysis.png)
+
+这一系列系统调研对应于实验中下载minist训练集的代码
+
+```python
+# 下载mnist手写数据集
+train_data = torchvision.datasets.MNIST(
+ root='./data/', # 保存或提取的位置 会放在当前文件夹中
+ train=True, # true说明是用于训练的数据,false说明是用于测试的数据
+ transform=torchvision.transforms.ToTensor(), # 转换PIL.Image or numpy.ndarray
+ download=DOWNLOAD_MNIST, # 已经下载了就不需要下载了
+)
+```
+
+接下来查看pytorch确认mnist类中哪些代码产生了这些调用
+stat("./data/MNIST/processed", 0x7ffc239123c0) = -1 ENOENT (No such file or directory)
+对应于Mnist类中对processed文件的检查
+
+```python
+ def _check_legacy_exist(self):
+ processed_folder_exists = os.path.exists(self.processed_folder)
+ if not processed_folder_exists:
+ return False
+
+ return all(
+ check_integrity(os.path.join(self.processed_folder, file)) for file in (self.training_file, self.test_file)
+ )
+```
+
+stat("./data/MNIST/raw/train-images-idx3-ubyte", {st_mode=S_IFREG|0664, st_size=47040016, ...}) = 0
+对应于Mnist类中对训练数据的加载函数_load_data,到指定的路径下读取图像数据和标签数据
+
+```python
+ def _load_data(self):
+ image_file = f"{'train' if self.train else 't10k'}-images-idx3-ubyte"
+ data = read_image_file(os.path.join(self.raw_folder, image_file))
+
+ label_file = f"{'train' if self.train else 't10k'}-labels-idx1-ubyte"
+ targets = read_label_file(os.path.join(self.raw_folder, label_file))
+
+ return data, targets
+```
+
+openat(AT_FDCWD, "./data/MNIST/raw/train-images-idx3-ubyte", O_RDONLY|O_CLOEXEC) = 4对应于read_sn3_pascalvincent_tensor函数打开目标路径并读取数据
+
+```python
+def read_sn3_pascalvincent_tensor(path: str, strict: bool = True) -> torch.Tensor:
+ """Read a SN3 file in "Pascal Vincent" format (Lush file 'libidx/idx-io.lsh').
+ Argument may be a filename, compressed filename, or file object.
+ """
+ # read
+ with open(path, "rb") as f:
+ data = f.read()
+```
+
+利用sudo cat /sys/kernel/debug/tracing/available_events |grep ‘系统调用名称命令可以打印系统调用对应的trace_point作为ebpf的hook点。
+![command0](imgs/command0.png)
+![command1](imgs/command1.png)
+![command2](imgs/command2.png)
+更多系统调用分析和对应源码的分析,以及相应的bpf的hook点略,可参见下图。
+
+## 梳理并画出实验中Trace points 和 Kprobes 、Kretprobes串连起来的流程图
+
+![流程图](imgs/ProcessionandHooks.png)
diff --git a/docs/draft/case-mnist/src/mnist.py b/docs/draft/case-mnist/src/mnist.py
new file mode 100644
index 0000000..3e81702
--- /dev/null
+++ b/docs/draft/case-mnist/src/mnist.py
@@ -0,0 +1,142 @@
+# 训练+测试
+
+
+import os
+
+import cv2
+import matplotlib.pyplot as plt
+import torch
+import torch.nn as nn
+import torch.utils.data as Data
+import torchvision
+
+torch.manual_seed(1) # 使用随机化种子使神经网络的初始化每次都相同
+
+# 超参数
+EPOCH = 1 # 训练整批数据的次数
+BATCH_SIZE = 50
+LR = 0.001 # 学习率
+DOWNLOAD_MNIST = True # 表示还没有下载数据集,如果数据集下载好了就写False
+
+# 下载mnist手写数据集
+train_data = torchvision.datasets.MNIST(
+ root="./data/", # 保存或提取的位置 会放在当前文件夹中
+ train=True, # true说明是用于训练的数据,false说明是用于测试的数据
+ transform=torchvision.transforms.ToTensor(), # 转换PIL.Image or numpy.ndarray
+ download=DOWNLOAD_MNIST, # 已经下载了就不需要下载了
+)
+
+test_data = torchvision.datasets.MNIST(root="./data/", train=False) # 表明是测试集
+
+# 批训练 50个samples, 1 channel,28x28 (50,1,28,28)
+# Torch中的DataLoader是用来包装数据的工具,它能帮我们有效迭代数据,这样就可以进行批训练
+train_loader = Data.DataLoader(
+ dataset=train_data, batch_size=BATCH_SIZE, shuffle=True # 是否打乱数据,一般都打乱
+)
+
+# 进行测试
+# 为节约时间,测试时只测试前2000个
+#
+test_x = torch.unsqueeze(test_data.train_data, dim=1).type(torch.FloatTensor)[:2000] / 255
+# torch.unsqueeze(a) 是用来对数据维度进行扩充,这样shape就从(2000,28,28)->(2000,1,28,28)
+# 图像的pixel本来是0到255之间,除以255对图像进行归一化使取值范围在(0,1)
+test_y = test_data.test_labels[:2000]
+
+
+# 用class类来建立CNN模型
+# CNN流程:卷积(Conv2d)-> 激励函数(ReLU)->池化(MaxPooling)->
+# 卷积(Conv2d)-> 激励函数(ReLU)->池化(MaxPooling)->
+# 展平多维的卷积成的特征图->接入全连接层(Linear)->输出
+
+
+class CNN(nn.Module): # 我们建立的CNN继承nn.Module这个模块
+ def __init__(self):
+ super(CNN, self).__init__()
+ # 建立第一个卷积(Conv2d)-> 激励函数(ReLU)->池化(MaxPooling)
+ self.conv1 = nn.Sequential(
+ # 第一个卷积con2d
+ nn.Conv2d( # 输入图像大小(1,28,28)
+ in_channels=1, # 输入图片的高度,因为minist数据集是灰度图像只有一个通道
+ out_channels=16, # n_filters 卷积核的高度
+ kernel_size=5, # filter size 卷积核的大小 也就是长x宽=5x5
+ stride=1, # 步长
+ padding=2, # 想要con2d输出的图片长宽不变,就进行补零操作 padding = (kernel_size-1)/2
+ ), # 输出图像大小(16,28,28)
+ # 激活函数
+ nn.ReLU(),
+ # 池化,下采样
+ nn.MaxPool2d(kernel_size=2), # 在2x2空间下采样
+ # 输出图像大小(16,14,14)
+ )
+ # 建立第二个卷积(Conv2d)-> 激励函数(ReLU)->池化(MaxPooling)
+ self.conv2 = nn.Sequential(
+ # 输入图像大小(16,14,14)
+ nn.Conv2d( # 也可以直接简化写成nn.Conv2d(16,32,5,1,2)
+ in_channels=16, out_channels=32, kernel_size=5, stride=1, padding=2
+ ),
+ # 输出图像大小 (32,14,14)
+ nn.ReLU(),
+ nn.MaxPool2d(2),
+ # 输出图像大小(32,7,7)
+ )
+ # 建立全卷积连接层
+ self.out = nn.Linear(32 * 7 * 7, 10) # 输出是10个类
+
+ # 下面定义x的传播路线
+ def forward(self, x):
+ x = self.conv1(x) # x先通过conv1
+ x = self.conv2(x) # 再通过conv2
+ # 把每一个批次的每一个输入都拉成一个维度,即(batch_size,32*7*7)
+ # 因为pytorch里特征的形式是[bs,channel,h,w],所以x.size(0)就是batchsize
+ x = x.view(x.size(0), -1) # view就是把x弄成batchsize行个tensor
+ output = self.out(x)
+ return output
+
+
+cnn = CNN()
+print(cnn)
+
+# 训练
+# 把x和y 都放入Variable中,然后放入cnn中计算output,最后再计算误差
+
+# 优化器选择Adam
+optimizer = torch.optim.Adam(cnn.parameters(), lr=LR)
+# 损失函数
+loss_func = nn.CrossEntropyLoss() # 目标标签是one-hotted
+
+# 开始训练
+# for epoch in range(EPOCH):
+# for step, (b_x, b_y) in enumerate(train_loader): # 分配batch data
+# output = cnn(b_x) # 先将数据放到cnn中计算output
+# loss = loss_func(output, b_y) # 输出和真实标签的loss,二者位置不可颠倒
+# optimizer.zero_grad() # 清除之前学到的梯度的参数
+# loss.backward() # 反向传播,计算梯度
+# optimizer.step() # 应用梯度
+#
+# if step % 50 == 0:
+# test_output = cnn(test_x)
+# pred_y = torch.max(test_output, 1)[1].data.numpy()
+# accuracy = float((pred_y == test_y.data.numpy()).astype(int).sum()) / float(test_y.size(0))
+# print('Epoch: ', epoch, '| train loss: %.4f' % loss.data.numpy(), '| test accuracy: %.2f' % accuracy)
+#
+# torch.save(cnn.state_dict(), 'cnn2.pkl')#保存模型
+
+# 加载模型,调用时需将前面训练及保存模型的代码注释掉,否则会再训练一遍
+cnn.load_state_dict(torch.load("cnn2.pkl"))
+cnn.eval()
+# print 10 predictions from test data
+inputs = test_x[:32] # 测试32个数据
+test_output = cnn(inputs)
+pred_y = torch.max(test_output, 1)[1].data.numpy()
+print(pred_y, "prediction number") # 打印识别后的数字
+# print(test_y[:10].numpy(), 'real number')
+
+img = torchvision.utils.make_grid(inputs)
+img = img.numpy().transpose(1, 2, 0)
+
+# 下面三行为改变图片的亮度
+# std = [0.5, 0.5, 0.5]
+# mean = [0.5, 0.5, 0.5]
+# img = img * std + mean
+cv2.imshow("win", img) # opencv显示需要识别的数据图片
+key_pressed = cv2.waitKey(0)
diff --git a/docs/draft/case-mnist/src/result.md b/docs/draft/case-mnist/src/result.md
new file mode 100644
index 0000000..db73918
--- /dev/null
+++ b/docs/draft/case-mnist/src/result.md
@@ -0,0 +1,792 @@
+### 画图
+
++ 每个函数一个大模块
+
++ 体现出大体的逻辑
+
+ + 每一个小模块解释系统调用的各个参数情况,之后类似的可以直接代过
+ + 对于`mmap`,`brk`用于申请内存的情况,或者`futex`等无关数据部分的调用做下简短说明就好
+
+---
+
+### 输出部分
+
+需要注意下面仅仅做了划分,可能有些模块开头部分的参数要到上面去找
+
+#### 1. train_data
+
+> ``` python
+> # 下载mnist手写数据集
+> train_data = torchvision.datasets.MNIST(
+> root='./data/', # 保存或提取的位置 会放在当前文件夹中
+> train=True, # true说明是用于训练的数据,false说明是用于测试的数据
+> transform=torchvision.transforms.ToTensor(), # 转换PIL.Image or numpy.ndarray
+>
+> download=DOWNLOAD_MNIST, # 已经下载了就不需要下载了
+> )
+> ```
+>
+> ```
+> 11257 stat("./data/MNIST/processed", 0x7ffc239123c0) = -1 ENOENT (No such file or directory)
+> 11257 stat("./data/MNIST/raw/train-images-idx3-ubyte", {st_mode=S_IFREG|0664, st_size=47040016, ...}) = 0
+> 11257 stat("./data/MNIST/raw/train-labels-idx1-ubyte", {st_mode=S_IFREG|0664, st_size=60008, ...}) = 0
+> 11257 stat("./data/MNIST/raw/t10k-images-idx3-ubyte", {st_mode=S_IFREG|0664, st_size=7840016, ...}) = 0
+> 11257 stat("./data/MNIST/raw/t10k-labels-idx1-ubyte", {st_mode=S_IFREG|0664, st_size=10008, ...}) = 0
+> 11257 stat("./data/MNIST/raw/train-images-idx3-ubyte", {st_mode=S_IFREG|0664, st_size=47040016, ...}) = 0
+> 11257 stat("./data/MNIST/raw/train-labels-idx1-ubyte", {st_mode=S_IFREG|0664, st_size=60008, ...}) = 0
+> 11257 stat("./data/MNIST/raw/t10k-images-idx3-ubyte", {st_mode=S_IFREG|0664, st_size=7840016, ...}) = 0
+> 11257 stat("./data/MNIST/raw/t10k-labels-idx1-ubyte", {st_mode=S_IFREG|0664, st_size=10008, ...}) = 0
+> 11257 openat(AT_FDCWD, "./data/MNIST/raw/train-images-idx3-ubyte", O_RDONLY|O_CLOEXEC) = 4
+> 11257 fstat(4, {st_mode=S_IFREG|0664, st_size=47040016, ...}) = 0
+> 11257 ioctl(4, TCGETS, 0x7ffc239120c0) = -1 ENOTTY (Inappropriate ioctl for device)
+> 11257 lseek(4, 0, SEEK_CUR) = 0
+> 11257 lseek(4, 0, SEEK_CUR) = 0
+> 11257 fstat(4, {st_mode=S_IFREG|0664, st_size=47040016, ...}) = 0
+> 11257 mmap(NULL, 47042560, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7ffa0ed23000
+> 11257 read(4, "\0\0\10\3\0\0\352`\0\0\0\34\0\0\0\34\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 47040017) = 47040016
+> 11257 read(4, "", 1) = 0
+> 11257 close(4) = 0
+> 11257 stat("/home/tsdsnk/Downloads/home/tsdsnk/software/envs/python39/lib/python3.9/encodings", {st_mode=S_IFDIR|0775, st_size=4096, ...}) = 0
+> 11257 stat("/home/tsdsnk/Downloads/home/tsdsnk/software/envs/python39/lib/python3.9/encodings/hex_codec.py", {st_mode=S_IFREG|0664, st_size=1508, ...}) = 0
+> 11257 stat("/home/tsdsnk/Downloads/home/tsdsnk/software/envs/python39/lib/python3.9/encodings/hex_codec.py", {st_mode=S_IFREG|0664, st_size=1508, ...}) = 0
+> 11257 openat(AT_FDCWD, "/home/tsdsnk/Downloads/home/tsdsnk/software/envs/python39/lib/python3.9/encodings/__pycache__/hex_codec.cpython-39.pyc", O_RDONLY|O_CLOEXEC) = 4
+> 11257 fstat(4, {st_mode=S_IFREG|0664, st_size=2350, ...}) = 0
+> 11257 ioctl(4, TCGETS, 0x7ffc23910db0) = -1 ENOTTY (Inappropriate ioctl for device)
+> 11257 lseek(4, 0, SEEK_CUR) = 0
+> 11257 lseek(4, 0, SEEK_CUR) = 0
+> 11257 fstat(4, {st_mode=S_IFREG|0664, st_size=2350, ...}) = 0
+> 11257 read(4, "a\r\r\n\0\0\0\0\326=\261_\344\5\0\0\343\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 2351) = 2350
+> 11257 read(4, "", 1) = 0
+> 11257 close(4) = 0
+> 11257 mmap(NULL, 47042560, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7ffa0c046000
+> 11257 munmap(0x7ffa0ed23000, 47042560) = 0
+> 11257 openat(AT_FDCWD, "./data/MNIST/raw/train-labels-idx1-ubyte", O_RDONLY|O_CLOEXEC) = 4
+> 11257 fstat(4, {st_mode=S_IFREG|0664, st_size=60008, ...}) = 0
+> 11257 ioctl(4, TCGETS, 0x7ffc239120c0) = -1 ENOTTY (Inappropriate ioctl for device)
+> 11257 lseek(4, 0, SEEK_CUR) = 0
+> 11257 lseek(4, 0, SEEK_CUR) = 0
+> 11257 fstat(4, {st_mode=S_IFREG|0664, st_size=60008, ...}) = 0
+> 11257 read(4, "\0\0\10\1\0\0\352`\5\0\4\1\t\2\1\3\1\4\3\5\3\6\1\7\2\10\6\t\4\0\t\1"..., 60009) = 60008
+> 11257 read(4, "", 1) = 0
+> 11257 close(4) = 0
+> 11257 brk(0x55809083f000) = 0x55809083f000
+> 11257 brk(0x5580908b4000) = 0x5580908b4000
+> 11257 openat(AT_FDCWD, "/sys/devices/system/cpu/kernel_max", O_RDONLY) = 4
+> 11257 read(4, "8191\n", 32) = 5
+> 11257 read(4, "", 27) = 0
+> 11257 close(4) = 0
+> 11257 openat(AT_FDCWD, "/sys/devices/system/cpu/possible", O_RDONLY) = 4
+> 11257 read(4, "0-127\n", 256) = 6
+> 11257 read(4, "", 250) = 0
+> 11257 close(4) = 0
+> 11257 openat(AT_FDCWD, "/sys/devices/system/cpu/present", O_RDONLY) = 4
+> 11257 read(4, "0-1\n", 256) = 4
+> 11257 read(4, "", 252) = 0
+> 11257 close(4) = 0
+> 11257 openat(AT_FDCWD, "/sys/devices/system/cpu/possible", O_RDONLY) = 4
+> 11257 read(4, "0-127\n", 256) = 6
+> 11257 read(4, "", 250) = 0
+> 11257 close(4) = 0
+> 11257 openat(AT_FDCWD, "/sys/devices/system/cpu/present", O_RDONLY) = 4
+> 11257 read(4, "0-1\n", 256) = 4
+> 11257 read(4, "", 252) = 0
+> 11257 close(4) = 0
+> 11257 openat(AT_FDCWD, "/proc/cpuinfo", O_RDONLY) = 4
+> 11257 read(4, "processor\t: 0\nvendor_id\t: Genuin"..., 2048) = 2048
+> 11257 read(4, "_store_bypass l1tf mds swapgs sr"..., 2001) = 192
+> 11257 read(4, "", 2048) = 0
+> 11257 close(4) = 0
+> 11257 futex(0x7ffa2d4b3568, FUTEX_WAKE_PRIVATE, 2147483647) = 0
+> 11257 rt_sigaction(SIGRT_1, {sa_handler=0x7ffa35e91870, sa_mask=[], sa_flags=SA_RESTORER|SA_ONSTACK|SA_RESTART|SA_SIGINFO, sa_restorer=0x7ffa35e42520}, NULL, 8) = 0
+> 11257 rt_sigprocmask(SIG_UNBLOCK, [RTMIN RT_1], NULL, 8) = 0
+> 11257 mmap(NULL, 8392704, PROT_NONE, MAP_PRIVATE|MAP_ANONYMOUS|MAP_STACK, -1, 0) = 0x7ffa111ff000
+> 11257 mprotect(0x7ffa11200000, 8388608, PROT_READ|PROT_WRITE) = 0
+> 11257 rt_sigprocmask(SIG_BLOCK, ~[], [], 8) = 0
+> 11257 clone3({flags=CLONE_VM|CLONE_FS|CLONE_FILES|CLONE_SIGHAND|CLONE_THREAD|CLONE_SYSVSEM|CLONE_SETTLS|CLONE_PARENT_SETTID|CLONE_CHILD_CLEARTID, child_tid=0x7ffa119ff910, parent_tid=0x7ffa119ff910, exit_signal=0, stack=0x7ffa111ff000, stack_size=0x7fff00, tls=0x7ffa119ff640} => {parent_tid=[11293]}, 88) = 11293
+> 11257 rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
+> 11257 futex(0x5580904cd034, FUTEX_WAIT_PRIVATE, 0, NULL
+> 11293 rseq(0x7ffa119fffe0, 0x20, 0, 0x53053053) = 0
+> 11293 set_robust_list(0x7ffa119ff920, 24) = 0
+> 11293 rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
+> 11293 futex(0x5580904cd034, FUTEX_WAKE_PRIVATE, 2147483647
+> 11257 <... futex resumed>) = 0
+> 11293 <... futex resumed>) = 1
+> 11257 futex(0x5580907ffdb4, FUTEX_WAIT_PRIVATE, 0, NULL
+> 11293 mmap(NULL, 134217728, PROT_NONE, MAP_PRIVATE|MAP_ANONYMOUS|MAP_NORESERVE, -1, 0) = 0x7ffa04046000
+> 11293 munmap(0x7ffa04046000, 66822144) = 0
+> 11293 munmap(0x7ffa0c000000, 286720) = 0
+> 11293 mprotect(0x7ffa08000000, 135168, PROT_READ|PROT_WRITE) = 0
+> 11293 futex(0x5580907ffdb4, FUTEX_WAKE_PRIVATE, 2147483647
+> 11257 <... futex resumed>) = 0
+> 11293 <... futex resumed>) = 1
+> ```
+>
+
+
+
+#### 2. test_data
+
+>``` python
+>test_data = torchvision.datasets.MNIST(
+> root='./data/',
+> train=False # 表明是测试集
+>)
+>```
+>
+>```
+>11257 socket(AF_INET, SOCK_STREAM|SOCK_CLOEXEC, IPPROTO_IP) = 4
+>11257 stat("./data/MNIST/processed", 0x7ffc239123c0) = -1 ENOENT (No such file or directory)
+>11257 stat("./data/MNIST/raw/train-images-idx3-ubyte", {st_mode=S_IFREG|0664, st_size=47040016, ...}) = 0
+>11257 stat("./data/MNIST/raw/train-labels-idx1-ubyte", {st_mode=S_IFREG|0664, st_size=60008, ...}) = 0
+>11257 stat("./data/MNIST/raw/t10k-images-idx3-ubyte", {st_mode=S_IFREG|0664, st_size=7840016, ...}) = 0
+>11257 stat("./data/MNIST/raw/t10k-labels-idx1-ubyte", {st_mode=S_IFREG|0664, st_size=10008, ...}) = 0
+>11257 openat(AT_FDCWD, "./data/MNIST/raw/t10k-images-idx3-ubyte", O_RDONLY|O_CLOEXEC) = 5
+>11257 fstat(5, {st_mode=S_IFREG|0664, st_size=7840016, ...}) = 0
+>11257 ioctl(5, TCGETS, 0x7ffc239120c0) = -1 ENOTTY (Inappropriate ioctl for device)
+>11257 lseek(5, 0, SEEK_CUR) = 0
+>11257 lseek(5, 0, SEEK_CUR) = 0
+>11257 fstat(5, {st_mode=S_IFREG|0664, st_size=7840016, ...}) = 0
+>11257 mmap(NULL, 7843840, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7ffa10a84000
+>11257 read(5,
+>11293 futex(0x5580904cd034, FUTEX_WAIT_PRIVATE, 8, NULL
+>11257 <... read resumed>"\0\0\10\3\0\0'\20\0\0\0\34\0\0\0\34\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 7840017) = 7840016
+>11257 read(5, "", 1) = 0
+>11257 close(5) = 0
+>11257 mmap(NULL, 7843840, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7ffa10309000
+>11257 munmap(0x7ffa10a84000, 7843840) = 0
+>11257 openat(AT_FDCWD, "./data/MNIST/raw/t10k-labels-idx1-ubyte", O_RDONLY|O_CLOEXEC) = 5
+>11257 fstat(5, {st_mode=S_IFREG|0664, st_size=10008, ...}) = 0
+>11257 ioctl(5, TCGETS, 0x7ffc239120c0) = -1 ENOTTY (Inappropriate ioctl for device)
+>11257 lseek(5, 0, SEEK_CUR) = 0
+>11257 lseek(5, 0, SEEK_CUR) = 0
+>11257 fstat(5, {st_mode=S_IFREG|0664, st_size=10008, ...}) = 0
+>11257 read(5, "\0\0\10\1\0\0'\20\7\2\1\0\4\1\4\t\5\t\0\6\t\0\1\5\t\7\3\4\t\6\6\5"..., 10009) = 10008
+>11257 read(5, "", 1) = 0
+>11257 close(5) = 0
+>```
+
+
+
+#### 3. train_loader
+
+> ``` python
+> train_loader = Data.DataLoader(
+> dataset=train_data,
+> batch_size=BATCH_SIZE,
+> shuffle=True # 是否打乱数据,一般都打乱
+> )
+> ```
+>
+> ```
+> 11257 socket(AF_INET, SOCK_STREAM|SOCK_CLOEXEC, IPPROTO_IP) = 5
+> 11257 getsockname(4, {sa_family=AF_INET, sin_port=htons(0), sin_addr=inet_addr("0.0.0.0")}, [16]) = 0
+> 11257 getpeername(4, 0x7ffc23912670, [16]) = -1 ENOTCONN (Transport endpoint is not connected)
+> 11257 close(4) = 0
+> ```
+
+
+
+
+
+#### 4. test_x
+
+>```python
+>test_x = torch.unsqueeze(test_data.train_data, dim=1).type(torch.FloatTensor)[:2000] / 255
+>
+>```
+>
+>```
+>11257 socket(AF_INET, SOCK_STREAM|SOCK_CLOEXEC, IPPROTO_IP) = 4
+>11257 getsockname(5, {sa_family=AF_INET, sin_port=htons(0), sin_addr=inet_addr("0.0.0.0")}, [16]) = 0
+>11257 getpeername(5, 0x7ffc23912670, [16]) = -1 ENOTCONN (Transport endpoint is not connected)
+>11257 close(5) = 0
+>11257 stat("/home/tsdsnk/Downloads/home/tsdsnk/software/envs/python39/lib/python3.9/site-packages/torchvision/datasets/mnist.py", {st_mode=S_IFREG|0664, st_size=21205, ...}) = 0
+>11257 openat(AT_FDCWD, "/home/tsdsnk/Downloads/home/tsdsnk/software/envs/python39/lib/python3.9/site-packages/torchvision/datasets/mnist.py", O_RDONLY|O_CLOEXEC) = 5
+>11257 fstat(5, {st_mode=S_IFREG|0664, st_size=21205, ...}) = 0
+>11257 ioctl(5, TCGETS, 0x7ffc23911670) = -1 ENOTTY (Inappropriate ioctl for device)
+>11257 lseek(5, 0, SEEK_CUR) = 0
+>11257 read(5, "import codecs\nimport os\nimport o"..., 4096) = 4096
+>11257 read(5, " label_file = f\"{'train' if self"..., 8192) = 8192
+>11257 read(5, "_label_file(self.labels_file)\n\n "..., 8192) = 8192
+>11257 read(5, "\n return parsed.view(*s)\n\n\nde"..., 8192) = 725
+>11257 read(5, "", 8192) = 0
+>11257 close(5) = 0
+>11257 write(2, "/home/tsdsnk/Downloads/home/tsds"..., 218) = 218
+>11257 mmap(NULL, 31363072, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7ffa06217000
+>11257 futex(0x5580904cd034, FUTEX_WAKE_PRIVATE, 2147483647) = 1
+>11293 <... futex resumed>) = 0
+>11293 futex(0x5580907ffdb4, FUTEX_WAKE_PRIVATE, 2147483647
+>11257 brk(0x558090eaf000) = 0x558090eaf000
+>11257 futex(0x5580904cd034, FUTEX_WAIT_PRIVATE, 16, NULL
+>11293 <... futex resumed>) = 0
+>11293 futex(0x5580904cd034, FUTEX_WAKE_PRIVATE, 2147483647) = 1
+>11257 <... futex resumed>) = 0
+>11257 futex(0x5580907ffdb4, FUTEX_WAIT_PRIVATE, 16, NULL
+>11293 futex(0x5580907ffdb4, FUTEX_WAKE_PRIVATE, 2147483647
+>11257 <... futex resumed>) = -1 EAGAIN (Resource temporarily unavailable)
+>11293 <... futex resumed>) = 0
+>11257 munmap(0x7ffa06217000, 31363072
+>11293 futex(0x5580904cd034, FUTEX_WAIT_PRIVATE, 24, NULL
+>11257 <... munmap resumed>) = 0
+>```
+
+
+
+
+
+#### 5. test_y
+
+>```python
+>test_y = test_data.test_labels[:2000]
+>```
+>
+>
+>
+>```
+>11257 socket(AF_INET, SOCK_STREAM|SOCK_CLOEXEC, IPPROTO_IP) = 5
+>11257 getsockname(4, {sa_family=AF_INET, sin_port=htons(0), sin_addr=inet_addr("0.0.0.0")}, [16]) = 0
+>11257 getpeername(4, 0x7ffc23912670, [16]) = -1 ENOTCONN (Transport endpoint is not connected)
+>11257 close(4) = 0
+>11257 write(2, "/home/tsdsnk/Downloads/home/tsds"..., 226) = 226
+>```
+
+
+
+
+
+#### 6. cnn
+
+>``` python
+>cnn = CNN()
+>```
+>
+>
+>
+>```
+>11257 socket(AF_INET, SOCK_STREAM|SOCK_CLOEXEC, IPPROTO_IP) = 4
+>11257 getsockname(5, {sa_family=AF_INET, sin_port=htons(0), sin_addr=inet_addr("0.0.0.0")}, [16]) = 0
+>11257 getpeername(5, 0x7ffc23912670, [16]) = -1 ENOTCONN (Transport endpoint is not connected)
+>11257 close(5) = 0
+>11257 mmap(NULL, 262144, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7ffa12580000
+>```
+
+
+
+
+
+#### 7. optimizer
+
+>``` python
+>optimizer = torch.optim.Adam(cnn.parameters(), lr=LR)
+>```
+>
+>
+>
+>```
+>11257 socket(AF_INET, SOCK_STREAM|SOCK_CLOEXEC, IPPROTO_IP) = 5
+>11257 getsockname(4, {sa_family=AF_INET, sin_port=htons(0), sin_addr=inet_addr("0.0.0.0")}, [16]) = 0
+>11257 getpeername(4, 0x7ffc23912670, [16]) = -1 ENOTCONN (Transport endpoint is not connected)
+>11257 close(4) = 0
+>```
+
+
+
+
+
+#### 8. loss_func
+
+>```python
+>loss_func = nn.CrossEntropyLoss() # 目标标签是one-hotted
+>```
+>
+>
+>
+>```
+>11257 socket(AF_INET, SOCK_STREAM|SOCK_CLOEXEC, IPPROTO_IP) = 4
+>11257 getsockname(5, {sa_family=AF_INET, sin_port=htons(0), sin_addr=inet_addr("0.0.0.0")}, [16]) = 0
+>11257 getpeername(5, 0x7ffc23912670, [16]) = -1 ENOTCONN (Transport endpoint is not connected)
+>11257 close(5) = 0
+>```
+
+
+
+
+
+#### 9. batch_x, batch_y
+
+>``` python
+>for step, (b_x, b_y) in enumerate(train_loader):
+>```
+>
+>
+>
+>```
+>11257 socket(AF_INET, SOCK_STREAM|SOCK_CLOEXEC, IPPROTO_IP) = 5
+>11257 getsockname(4, {sa_family=AF_INET, sin_port=htons(0), sin_addr=inet_addr("0.0.0.0")}, [16]) = 0
+>11257 getpeername(4, 0x7ffc23912670, [16]) = -1 ENOTCONN (Transport endpoint is not connected)
+>11257 close(4) = 0
+>11257 brk(0x558090f40000) = 0x558090f40000
+>11257 futex(0x5580904cd034, FUTEX_WAKE_PRIVATE, 2147483647) = 1
+>11293 <... futex resumed>) = 0
+>11293 futex(0x5580907ffdb4, FUTEX_WAKE_PRIVATE, 2147483647) = 0
+>11257 brk(0x558090fb5000) = 0x558090fb5000
+>11257 mmap(NULL, 262144, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0
+>11293 futex(0x5580904cd034, FUTEX_WAIT_PRIVATE, 32, NULL
+>11257 <... mmap resumed>) = 0x7ffa12540000
+>11257 mmap(NULL, 262144, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7ffa11fc0000
+>11257 mmap(NULL, 262144, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7ffa11f80000
+>11257 mmap(NULL, 262144, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7ffa11f40000
+>11257 mmap(NULL, 262144, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7ffa111bf000
+>11257 mmap(NULL, 262144, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7ffa1117f000
+>11257 mmap(NULL, 262144, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7ffa1113f000
+>```
+
+
+
+
+
+#### 10. output
+
+> ``` python
+> output = cnn(b_x)
+> ```
+>
+>
+>
+> ```
+> 11257 socket(AF_INET, SOCK_STREAM|SOCK_CLOEXEC, IPPROTO_IP) = 4
+> 11257 getsockname(5, {sa_family=AF_INET, sin_port=htons(0), sin_addr=inet_addr("0.0.0.0")}, [16]) = 0
+> 11257 getpeername(5, 0x7ffc23912670, [16]) = -1 ENOTCONN (Transport endpoint is not connected)
+> 11257 close(5) = 0
+> 11257 mmap(NULL, 262144, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7ffa110ff000
+> 11257 mprotect(0x7ffa110ff000, 262144, PROT_READ|PROT_WRITE|PROT_EXEC) = 0
+> 11257 openat(AT_FDCWD, "/home/tsdsnk/Downloads/home/tsdsnk/software/envs/python39/lib/python3.9/site-packages/torch/lib/libJitPI.so", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
+> 11257 openat(AT_FDCWD, "/home/tsdsnk/Downloads/home/tsdsnk/software/envs/python39/lib/python3.9/site-packages/torch/lib/../../../../libJitPI.so", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
+> 11257 openat(AT_FDCWD, "/home/tsdsnk/Downloads/home/tsdsnk/software/envs/python39/bin/../lib/libJitPI.so", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
+> 11257 openat(AT_FDCWD, "/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 5
+> 11257 newfstatat(5, "", {st_mode=S_IFREG|0644, st_size=64319, ...}, AT_EMPTY_PATH) = 0
+> 11257 mmap(NULL, 64319, PROT_READ, MAP_PRIVATE, 5, 0) = 0x7ffa156d5000
+> 11257 close(5) = 0
+> 11257 openat(AT_FDCWD, "/lib/x86_64-linux-gnu/glibc-hwcaps/x86-64-v3/libJitPI.so", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
+> 11257 newfstatat(AT_FDCWD, "/lib/x86_64-linux-gnu/glibc-hwcaps/x86-64-v3", 0x7ffc2390dab0, 0) = -1 ENOENT (No such file or directory)
+> 11257 openat(AT_FDCWD, "/lib/x86_64-linux-gnu/glibc-hwcaps/x86-64-v2/libJitPI.so", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
+> 11257 newfstatat(AT_FDCWD, "/lib/x86_64-linux-gnu/glibc-hwcaps/x86-64-v2", 0x7ffc2390dab0, 0) = -1 ENOENT (No such file or directory)
+> 11257 openat(AT_FDCWD, "/lib/x86_64-linux-gnu/tls/haswell/x86_64/libJitPI.so", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
+> 11257 newfstatat(AT_FDCWD, "/lib/x86_64-linux-gnu/tls/haswell/x86_64", 0x7ffc2390dab0, 0) = -1 ENOENT (No such file or directory)
+> 11257 openat(AT_FDCWD, "/lib/x86_64-linux-gnu/tls/haswell/libJitPI.so", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
+> 11257 newfstatat(AT_FDCWD, "/lib/x86_64-linux-gnu/tls/haswell", 0x7ffc2390dab0, 0) = -1 ENOENT (No such file or directory)
+> 11257 openat(AT_FDCWD, "/lib/x86_64-linux-gnu/tls/x86_64/libJitPI.so", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
+> 11257 newfstatat(AT_FDCWD, "/lib/x86_64-linux-gnu/tls/x86_64", 0x7ffc2390dab0, 0) = -1 ENOENT (No such file or directory)
+> 11257 openat(AT_FDCWD, "/lib/x86_64-linux-gnu/tls/libJitPI.so", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
+> 11257 newfstatat(AT_FDCWD, "/lib/x86_64-linux-gnu/tls", 0x7ffc2390dab0, 0) = -1 ENOENT (No such file or directory)
+> 11257 openat(AT_FDCWD, "/lib/x86_64-linux-gnu/haswell/x86_64/libJitPI.so", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
+> 11257 newfstatat(AT_FDCWD, "/lib/x86_64-linux-gnu/haswell/x86_64", 0x7ffc2390dab0, 0) = -1 ENOENT (No such file or directory)
+> 11257 openat(AT_FDCWD, "/lib/x86_64-linux-gnu/haswell/libJitPI.so", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
+> 11257 newfstatat(AT_FDCWD, "/lib/x86_64-linux-gnu/haswell", 0x7ffc2390dab0, 0) = -1 ENOENT (No such file or directory)
+> 11257 openat(AT_FDCWD, "/lib/x86_64-linux-gnu/x86_64/libJitPI.so", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
+> 11257 newfstatat(AT_FDCWD, "/lib/x86_64-linux-gnu/x86_64", 0x7ffc2390dab0, 0) = -1 ENOENT (No such file or directory)
+> 11257 openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libJitPI.so", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
+> 11257 newfstatat(AT_FDCWD, "/lib/x86_64-linux-gnu", {st_mode=S_IFDIR|0755, st_size=77824, ...}, 0) = 0
+> 11257 openat(AT_FDCWD, "/usr/lib/x86_64-linux-gnu/glibc-hwcaps/x86-64-v3/libJitPI.so", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
+> 11257 newfstatat(AT_FDCWD, "/usr/lib/x86_64-linux-gnu/glibc-hwcaps/x86-64-v3", 0x7ffc2390dab0, 0) = -1 ENOENT (No such file or directory)
+> 11257 openat(AT_FDCWD, "/usr/lib/x86_64-linux-gnu/glibc-hwcaps/x86-64-v2/libJitPI.so", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
+> 11257 newfstatat(AT_FDCWD, "/usr/lib/x86_64-linux-gnu/glibc-hwcaps/x86-64-v2", 0x7ffc2390dab0, 0) = -1 ENOENT (No such file or directory)
+> 11257 openat(AT_FDCWD, "/usr/lib/x86_64-linux-gnu/tls/haswell/x86_64/libJitPI.so", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
+> 11257 newfstatat(AT_FDCWD, "/usr/lib/x86_64-linux-gnu/tls/haswell/x86_64", 0x7ffc2390dab0, 0) = -1 ENOENT (No such file or directory)
+> 11257 openat(AT_FDCWD, "/usr/lib/x86_64-linux-gnu/tls/haswell/libJitPI.so", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
+> 11257 newfstatat(AT_FDCWD, "/usr/lib/x86_64-linux-gnu/tls/haswell", 0x7ffc2390dab0, 0) = -1 ENOENT (No such file or directory)
+> 11257 openat(AT_FDCWD, "/usr/lib/x86_64-linux-gnu/tls/x86_64/libJitPI.so", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
+> 11257 newfstatat(AT_FDCWD, "/usr/lib/x86_64-linux-gnu/tls/x86_64", 0x7ffc2390dab0, 0) = -1 ENOENT (No such file or directory)
+> 11257 openat(AT_FDCWD, "/usr/lib/x86_64-linux-gnu/tls/libJitPI.so", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
+> 11257 newfstatat(AT_FDCWD, "/usr/lib/x86_64-linux-gnu/tls", 0x7ffc2390dab0, 0) = -1 ENOENT (No such file or directory)
+> 11257 openat(AT_FDCWD, "/usr/lib/x86_64-linux-gnu/haswell/x86_64/libJitPI.so", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
+> 11257 newfstatat(AT_FDCWD, "/usr/lib/x86_64-linux-gnu/haswell/x86_64", 0x7ffc2390dab0, 0) = -1 ENOENT (No such file or directory)
+> 11257 openat(AT_FDCWD, "/usr/lib/x86_64-linux-gnu/haswell/libJitPI.so", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
+> 11257 newfstatat(AT_FDCWD, "/usr/lib/x86_64-linux-gnu/haswell", 0x7ffc2390dab0, 0) = -1 ENOENT (No such file or directory)
+> 11257 openat(AT_FDCWD, "/usr/lib/x86_64-linux-gnu/x86_64/libJitPI.so", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
+> 11257 newfstatat(AT_FDCWD, "/usr/lib/x86_64-linux-gnu/x86_64", 0x7ffc2390dab0, 0) = -1 ENOENT (No such file or directory)
+> 11257 openat(AT_FDCWD, "/usr/lib/x86_64-linux-gnu/libJitPI.so", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
+> 11257 newfstatat(AT_FDCWD, "/usr/lib/x86_64-linux-gnu", {st_mode=S_IFDIR|0755, st_size=77824, ...}, 0) = 0
+> 11257 openat(AT_FDCWD, "/lib/glibc-hwcaps/x86-64-v3/libJitPI.so", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
+> 11257 newfstatat(AT_FDCWD, "/lib/glibc-hwcaps/x86-64-v3", 0x7ffc2390dab0, 0) = -1 ENOENT (No such file or directory)
+> 11257 openat(AT_FDCWD, "/lib/glibc-hwcaps/x86-64-v2/libJitPI.so", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
+> 11257 newfstatat(AT_FDCWD, "/lib/glibc-hwcaps/x86-64-v2", 0x7ffc2390dab0, 0) = -1 ENOENT (No such file or directory)
+> 11257 openat(AT_FDCWD, "/lib/tls/haswell/x86_64/libJitPI.so", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
+> 11257 newfstatat(AT_FDCWD, "/lib/tls/haswell/x86_64", 0x7ffc2390dab0, 0) = -1 ENOENT (No such file or directory)
+> 11257 openat(AT_FDCWD, "/lib/tls/haswell/libJitPI.so", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
+> 11257 newfstatat(AT_FDCWD, "/lib/tls/haswell", 0x7ffc2390dab0, 0) = -1 ENOENT (No such file or directory)
+> 11257 openat(AT_FDCWD, "/lib/tls/x86_64/libJitPI.so", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
+> 11257 newfstatat(AT_FDCWD, "/lib/tls/x86_64", 0x7ffc2390dab0, 0) = -1 ENOENT (No such file or directory)
+> 11257 openat(AT_FDCWD, "/lib/tls/libJitPI.so", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
+> 11257 newfstatat(AT_FDCWD, "/lib/tls", 0x7ffc2390dab0, 0) = -1 ENOENT (No such file or directory)
+> 11257 openat(AT_FDCWD, "/lib/haswell/x86_64/libJitPI.so", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
+> 11257 newfstatat(AT_FDCWD, "/lib/haswell/x86_64", 0x7ffc2390dab0, 0) = -1 ENOENT (No such file or directory)
+> 11257 openat(AT_FDCWD, "/lib/haswell/libJitPI.so", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
+> 11257 newfstatat(AT_FDCWD, "/lib/haswell", 0x7ffc2390dab0, 0) = -1 ENOENT (No such file or directory)
+> 11257 openat(AT_FDCWD, "/lib/x86_64/libJitPI.so", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
+> 11257 newfstatat(AT_FDCWD, "/lib/x86_64", 0x7ffc2390dab0, 0) = -1 ENOENT (No such file or directory)
+> 11257 openat(AT_FDCWD, "/lib/libJitPI.so", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
+> 11257 newfstatat(AT_FDCWD, "/lib", {st_mode=S_IFDIR|0755, st_size=4096, ...}, 0) = 0
+> 11257 openat(AT_FDCWD, "/usr/lib/glibc-hwcaps/x86-64-v3/libJitPI.so", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
+> 11257 newfstatat(AT_FDCWD, "/usr/lib/glibc-hwcaps/x86-64-v3", 0x7ffc2390dab0, 0) = -1 ENOENT (No such file or directory)
+> 11257 openat(AT_FDCWD, "/usr/lib/glibc-hwcaps/x86-64-v2/libJitPI.so", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
+> 11257 newfstatat(AT_FDCWD, "/usr/lib/glibc-hwcaps/x86-64-v2", 0x7ffc2390dab0, 0) = -1 ENOENT (No such file or directory)
+> 11257 openat(AT_FDCWD, "/usr/lib/tls/haswell/x86_64/libJitPI.so", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
+> 11257 newfstatat(AT_FDCWD, "/usr/lib/tls/haswell/x86_64", 0x7ffc2390dab0, 0) = -1 ENOENT (No such file or directory)
+> 11257 openat(AT_FDCWD, "/usr/lib/tls/haswell/libJitPI.so", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
+> 11257 newfstatat(AT_FDCWD, "/usr/lib/tls/haswell", 0x7ffc2390dab0, 0) = -1 ENOENT (No such file or directory)
+> 11257 openat(AT_FDCWD, "/usr/lib/tls/x86_64/libJitPI.so", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
+> 11257 newfstatat(AT_FDCWD, "/usr/lib/tls/x86_64", 0x7ffc2390dab0, 0) = -1 ENOENT (No such file or directory)
+> 11257 openat(AT_FDCWD, "/usr/lib/tls/libJitPI.so", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
+> 11257 newfstatat(AT_FDCWD, "/usr/lib/tls", 0x7ffc2390dab0, 0) = -1 ENOENT (No such file or directory)
+> 11257 openat(AT_FDCWD, "/usr/lib/haswell/x86_64/libJitPI.so", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
+> 11257 newfstatat(AT_FDCWD, "/usr/lib/haswell/x86_64", 0x7ffc2390dab0, 0) = -1 ENOENT (No such file or directory)
+> 11257 openat(AT_FDCWD, "/usr/lib/haswell/libJitPI.so", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
+> 11257 newfstatat(AT_FDCWD, "/usr/lib/haswell", 0x7ffc2390dab0, 0) = -1 ENOENT (No such file or directory)
+> 11257 openat(AT_FDCWD, "/usr/lib/x86_64/libJitPI.so", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
+> 11257 newfstatat(AT_FDCWD, "/usr/lib/x86_64", 0x7ffc2390dab0, 0) = -1 ENOENT (No such file or directory)
+> 11257 openat(AT_FDCWD, "/usr/lib/libJitPI.so", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
+> 11257 newfstatat(AT_FDCWD, "/usr/lib", {st_mode=S_IFDIR|0755, st_size=4096, ...}, 0) = 0
+> 11257 munmap(0x7ffa156d5000, 64319) = 0
+> 11257 futex(0x558090ef6fe8, FUTEX_WAKE_PRIVATE, 2147483647) = 0
+> 11257 mmap(NULL, 262144, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7ffa110bf000
+> 11257 mprotect(0x7ffa110bf000, 262144, PROT_READ|PROT_WRITE|PROT_EXEC) = 0
+> 11257 futex(0x5580904661d8, FUTEX_WAKE_PRIVATE, 2147483647) = 0
+> 11257 futex(0x5580904cd034, FUTEX_WAKE_PRIVATE, 2147483647) = 1
+> 11293 <... futex resumed>) = 0
+> 11257 futex(0x5580907ffdb4, FUTEX_WAKE_PRIVATE, 2147483647) = 0
+> 11257 brk(0x55809121a000) = 0x55809121a000
+> 11257 futex(0x5580904cd034, FUTEX_WAKE_PRIVATE, 2147483647) = 0
+> 11257 futex(0x5580907ffdb4, FUTEX_WAKE_PRIVATE, 2147483647) = 0
+> 11257 brk(0x55809147e000) = 0x55809147e000
+> 11257 mmap(NULL, 262144, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7ffa1107f000
+> 11257 mprotect(0x7ffa1107f000, 262144, PROT_READ|PROT_WRITE|PROT_EXEC) = 0
+> 11257 futex(0x558090ed6868, FUTEX_WAKE_PRIVATE, 2147483647) = 0
+> 11257 futex(0x5580904cd034, FUTEX_WAKE_PRIVATE, 2147483647) = 0
+> 11257 futex(0x5580907ffdb4, FUTEX_WAKE_PRIVATE, 2147483647) = 0
+> 11257 brk(0x5580916e3000) = 0x5580916e3000
+> 11257 futex(0x5580904cd034, FUTEX_WAKE_PRIVATE, 2147483647) = 0
+> 11257 futex(0x5580907ffdb4, FUTEX_WAKE_PRIVATE, 2147483647) = 0
+> 11257 futex(0x5580904cd034, FUTEX_WAKE_PRIVATE, 2147483647) = 0
+> 11257 futex(0x5580907ffdb4, FUTEX_WAKE_PRIVATE, 2147483647) = 0
+> 11257 mmap(NULL, 262144, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7ffa1103f000
+> 11257 mprotect(0x7ffa1103f000, 262144, PROT_READ|PROT_WRITE|PROT_EXEC) = 0
+> 11257 futex(0x558090eac3a8, FUTEX_WAKE_PRIVATE, 2147483647) = 0
+> 11257 mmap(NULL, 262144, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7ffa10fff000
+> 11257 mprotect(0x7ffa10fff000, 262144, PROT_READ|PROT_WRITE|PROT_EXEC) = 0
+> 11257 futex(0x558090eb0e68, FUTEX_WAKE_PRIVATE, 2147483647) = 0
+> 11257 futex(0x5580904cd034, FUTEX_WAKE_PRIVATE, 2147483647) = 0
+> 11257 futex(0x5580907ffdb4, FUTEX_WAKE_PRIVATE, 2147483647) = 0
+> 11257 mmap(NULL, 262144, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7ffa10fbf000
+> 11257 mprotect(0x7ffa10fbf000, 262144, PROT_READ|PROT_WRITE|PROT_EXEC) = 0
+> 11257 futex(0x558090eb06c8, FUTEX_WAKE_PRIVATE, 2147483647) = 0
+> 11257 futex(0x5580904cd034, FUTEX_WAKE_PRIVATE, 2147483647) = 0
+> 11257 futex(0x5580907ffdb4, FUTEX_WAKE_PRIVATE, 2147483647) = 0
+> 11257 futex(0x5580904cd034, FUTEX_WAKE_PRIVATE, 2147483647) = 0
+> 11257 futex(0x5580907ffdb4, FUTEX_WAIT_PRIVATE, 88, NULL
+> 11293 futex(0x5580907ffdb4, FUTEX_WAKE_PRIVATE, 2147483647
+> 11257 <... futex resumed>) = 0
+> 11293 <... futex resumed>) = 1
+> 11257 brk(0x558091815000) = 0x558091815000
+> 11257 mmap(NULL, 262144, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7ffa10f7f000
+> 11257 mprotect(0x7ffa10f7f000, 262144, PROT_READ|PROT_WRITE|PROT_EXEC) = 0
+> 11257 futex(0x5580903c8b48, FUTEX_WAKE_PRIVATE, 2147483647) = 0
+> 11257 futex(0x5580904cd034, FUTEX_WAKE_PRIVATE, 2147483647) = 0
+> 11257 futex(0x5580907ffdb4, FUTEX_WAKE_PRIVATE, 2147483647) = 0
+> 11257 futex(0x5580904cd034, FUTEX_WAKE_PRIVATE, 2147483647) = 0
+> 11257 futex(0x5580907ffdb4, FUTEX_WAKE_PRIVATE, 2147483647) = 0
+> 11257 futex(0x5580904cd034, FUTEX_WAKE_PRIVATE, 2147483647) = 0
+> 11257 futex(0x5580907ffdb4, FUTEX_WAKE_PRIVATE, 2147483647) = 0
+> 11257 futex(0x5580904cd034, FUTEX_WAKE_PRIVATE, 2147483647
+> 11293 mprotect(0x7ffa08021000, 4132864, PROT_READ|PROT_WRITE
+> 11257 <... futex resumed>) = 0
+> 11257 brk(0x558091aef000) = 0x558091aef000
+> 11293 <... mprotect resumed>) = 0
+> 11257 futex(0x5580907ffdb4, FUTEX_WAKE_PRIVATE, 2147483647) = 0
+> ```
+>
+>
+
+
+
+
+
+#### 11. loss
+
+> ``` python
+> loss = loss_func(output, b_y)
+> ```
+>
+>
+>
+> ```
+> 11257 socket(AF_INET, SOCK_STREAM|SOCK_CLOEXEC, IPPROTO_IP) = 5
+> 11257 getsockname(4, {sa_family=AF_INET, sin_port=htons(0), sin_addr=inet_addr("0.0.0.0")}, [16]) = 0
+> 11257 getpeername(4, 0x7ffc23912670, [16]) = -1 ENOTCONN (Transport endpoint is not connected)
+> 11257 close(4) = 0
+> ```
+
+
+
+
+
+#### 12. zero_grad
+
+> ``` python
+> optimizer.zero_grad()
+> ```
+>
+>
+>
+> ```
+> 11257 socket(AF_INET, SOCK_STREAM|SOCK_CLOEXEC, IPPROTO_IP) = 4
+> 11257 getsockname(5, {sa_family=AF_INET, sin_port=htons(0), sin_addr=inet_addr("0.0.0.0")}, [16]) = 0
+> 11257 getpeername(5, 0x7ffc23912670, [16]) = -1 ENOTCONN (Transport endpoint is not connected)
+> 11257 close(5) = 0
+> ```
+
+
+
+
+
+#### 13. backward
+
+> ``` python
+> loss.backward()
+> ```
+>
+>
+>
+> ```
+> 11257 socket(AF_INET, SOCK_STREAM|SOCK_CLOEXEC, IPPROTO_IP
+> 11293 futex(0x5580904cd034, FUTEX_WAIT_PRIVATE, 128, NULL
+> 11257 <... socket resumed>) = 5
+> 11257 getsockname(4, {sa_family=AF_INET, sin_port=htons(0), sin_addr=inet_addr("0.0.0.0")}, [16]) = 0
+> 11257 getpeername(4, 0x7ffc23912670, [16]) = -1 ENOTCONN (Transport endpoint is not connected)
+> 11257 close(4) = 0
+> 11257 futex(0x5580904cd034, FUTEX_WAKE_PRIVATE, 2147483647) = 1
+> 11293 <... futex resumed>) = 0
+> 11293 futex(0x5580907ffdb4, FUTEX_WAKE_PRIVATE, 2147483647) = 0
+> 11293 futex(0x5580904cd034, FUTEX_WAKE_PRIVATE, 2147483647) = 0
+> 11293 mprotect(0x7ffa08412000, 4624384, PROT_READ|PROT_WRITE) = 0
+> 11293 futex(0x5580907ffdb4, FUTEX_WAIT_PRIVATE, 136, NULL
+> 11257 brk(0x558091f58000) = 0x558091f58000
+> 11257 futex(0x5580907ffdb4, FUTEX_WAKE_PRIVATE, 2147483647) = 1
+> 11293 <... futex resumed>) = 0
+> 11293 futex(0x5580904cd034, FUTEX_WAKE_PRIVATE, 2147483647) = 0
+> 11293 futex(0x5580907ffdb4, FUTEX_WAIT_PRIVATE, 144, NULL
+> 11257 futex(0x5580907ffdb4, FUTEX_WAKE_PRIVATE, 2147483647) = 1
+> 11293 <... futex resumed>) = 0
+> 11257 brk(0x55809208a000
+> 11293 futex(0x5580904cd034, FUTEX_WAIT_PRIVATE, 152, NULL
+> 11257 <... brk resumed>) = 0x55809208a000
+> 11257 futex(0x5580904cd034, FUTEX_WAKE_PRIVATE, 2147483647) = 1
+> 11293 <... futex resumed>) = 0
+> 11257 futex(0x5580907ffdb4, FUTEX_WAKE_PRIVATE, 2147483647) = 0
+> 11257 futex(0x5580904cd034, FUTEX_WAKE_PRIVATE, 2147483647) = 0
+> 11257 futex(0x5580907ffdb4, FUTEX_WAKE_PRIVATE, 2147483647) = 0
+> 11257 brk(0x5580921bd000) = 0x5580921bd000
+> 11257 futex(0x5580904cd034, FUTEX_WAKE_PRIVATE, 2147483647) = 0
+> 11257 futex(0x5580907ffdb4, FUTEX_WAKE_PRIVATE, 2147483647) = 0
+> 11257 brk(0x5580922ef000) = 0x5580922ef000
+> 11257 mmap(NULL, 262144, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7ffa10f3f000
+> 11257 mprotect(0x7ffa10f3f000, 262144, PROT_READ|PROT_WRITE|PROT_EXEC) = 0
+> 11257 futex(0x558090eccca8, FUTEX_WAKE_PRIVATE, 2147483647) = 0
+> 11257 futex(0x5580904cd034, FUTEX_WAKE_PRIVATE, 2147483647) = 0
+> 11257 futex(0x5580907ffdb4, FUTEX_WAKE_PRIVATE, 2147483647) = 0
+> 11257 mmap(NULL, 262144, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7ffa10eff000
+> 11257 mprotect(0x7ffa10eff000, 262144, PROT_READ|PROT_WRITE|PROT_EXEC
+> 11293 futex(0x5580904cd034, FUTEX_WAIT_PRIVATE, 184, NULL
+> 11257 <... mprotect resumed>) = 0
+> 11257 futex(0x558090ec2328, FUTEX_WAKE_PRIVATE, 2147483647) = 0
+> 11257 futex(0x5580904cd034, FUTEX_WAKE_PRIVATE, 2147483647) = 1
+> 11293 <... futex resumed>) = 0
+> 11257 futex(0x5580907ffdb4, FUTEX_WAKE_PRIVATE, 2147483647) = 0
+> 11257 mmap(NULL, 262144, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7ffa10ebf000
+> 11257 mprotect(0x7ffa10ebf000, 262144, PROT_READ|PROT_WRITE|PROT_EXEC) = 0
+> 11257 futex(0x558090ec0d08, FUTEX_WAKE_PRIVATE, 2147483647) = 0
+> 11257 futex(0x5580904cd034, FUTEX_WAKE_PRIVATE, 2147483647) = 0
+> 11257 futex(0x5580907ffdb4, FUTEX_WAKE_PRIVATE, 2147483647) = 0
+> 11257 mmap(NULL, 262144, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7ffa10e7f000
+> 11257 mprotect(0x7ffa10e7f000, 262144, PROT_READ|PROT_WRITE|PROT_EXEC) = 0
+> 11257 futex(0x5580911d1d88, FUTEX_WAKE_PRIVATE, 2147483647) = 0
+> 11257 futex(0x5580904cd034, FUTEX_WAKE_PRIVATE, 2147483647) = 0
+> 11257 futex(0x5580907ffdb4, FUTEX_WAIT_PRIVATE, 200, NULL
+> 11293 futex(0x5580907ffdb4, FUTEX_WAKE_PRIVATE, 2147483647) = 0
+> 11257 <... futex resumed>) = -1 EAGAIN (Resource temporarily unavailable)
+> 11257 futex(0x5580904cd034, FUTEX_WAKE_PRIVATE, 2147483647) = 0
+> 11257 futex(0x5580907ffdb4, FUTEX_WAKE_PRIVATE, 2147483647) = 0
+> 11257 futex(0x5580904cd034, FUTEX_WAKE_PRIVATE, 2147483647) = 0
+> 11257 futex(0x5580907ffdb4, FUTEX_WAKE_PRIVATE, 2147483647) = 0
+> 11257 mmap(NULL, 262144, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7ffa10e3f000
+> 11257 mprotect(0x7ffa10e3f000, 262144, PROT_READ|PROT_WRITE|PROT_EXEC) = 0
+> 11257 futex(0x558090ebd468, FUTEX_WAKE_PRIVATE, 2147483647) = 0
+> 11257 futex(0x5580904cd034, FUTEX_WAKE_PRIVATE, 2147483647) = 0
+> 11293 futex(0x5580907ffdb4, FUTEX_WAIT_PRIVATE, 224, NULL
+> 11257 futex(0x5580907ffdb4, FUTEX_WAKE_PRIVATE, 2147483647) = 1
+> 11293 <... futex resumed>) = 0
+> 11257 futex(0x55809006fa48, FUTEX_WAKE_PRIVATE, 2147483647) = 0
+> 11257 futex(0x5580904cd034, FUTEX_WAKE_PRIVATE, 2147483647) = 0
+> 11257 futex(0x5580907ffdb4, FUTEX_WAKE_PRIVATE, 2147483647) = 0
+> 11257 mmap(NULL, 262144, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7ffa10dff000
+> 11257 mprotect(0x7ffa10dff000, 262144, PROT_READ|PROT_WRITE|PROT_EXEC) = 0
+> 11257 futex(0x558090ebd868, FUTEX_WAKE_PRIVATE, 2147483647) = 0
+> 11257 futex(0x5580904cd034, FUTEX_WAKE_PRIVATE, 2147483647) = 0
+> 11257 futex(0x5580907ffdb4, FUTEX_WAKE_PRIVATE, 2147483647) = 0
+> 11257 brk(0x558092421000) = 0x558092421000
+> 11257 futex(0x5580904cd034, FUTEX_WAIT_PRIVATE, 248, NULL
+> 11293 futex(0x5580904cd034, FUTEX_WAKE_PRIVATE, 2147483647) = 1
+> 11293 futex(0x5580907ffdb4, FUTEX_WAIT_PRIVATE, 248, NULL
+> 11257 <... futex resumed>) = 0
+> 11257 futex(0x5580907ffdb4, FUTEX_WAKE_PRIVATE, 2147483647) = 1
+> 11293 <... futex resumed>) = 0
+> 11257 futex(0x5580904cd034, FUTEX_WAKE_PRIVATE, 2147483647) = 0
+> 11257 futex(0x5580907ffdb4, FUTEX_WAKE_PRIVATE, 2147483647) = 0
+> 11257 brk(0x558092686000) = 0x558092686000
+> 11257 futex(0x5580904cd034, FUTEX_WAKE_PRIVATE, 2147483647) = 0
+> 11257 futex(0x5580907ffdb4, FUTEX_WAKE_PRIVATE, 2147483647) = 0
+> 11257 brk(0x5580928ea000) = 0x5580928ea000
+> 11257 mmap(NULL, 262144, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7ffa10dbf000
+> 11257 mprotect(0x7ffa10dbf000, 262144, PROT_READ|PROT_WRITE|PROT_EXEC) = 0
+> 11257 futex(0x558090eb5a08, FUTEX_WAKE_PRIVATE, 2147483647) = 0
+> 11257 futex(0x5580904cd034, FUTEX_WAKE_PRIVATE, 2147483647) = 0
+> 11257 futex(0x5580907ffdb4, FUTEX_WAKE_PRIVATE, 2147483647) = 0
+> 11257 mmap(NULL, 262144, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7ffa10d7f000
+> 11257 mprotect(0x7ffa10d7f000, 262144, PROT_READ|PROT_WRITE|PROT_EXEC) = 0
+> 11257 futex(0x558090eb8ac8, FUTEX_WAKE_PRIVATE, 2147483647) = 0
+> 11257 futex(0x5580904cd034, FUTEX_WAKE_PRIVATE, 2147483647) = 0
+> 11257 futex(0x5580907ffdb4, FUTEX_WAKE_PRIVATE, 2147483647) = 0
+> 11257 mmap(NULL, 262144, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7ffa10d3f000
+> 11257 mprotect(0x7ffa10d3f000, 262144, PROT_READ|PROT_WRITE|PROT_EXEC) = 0
+> 11257 futex(0x558090ed82a8, FUTEX_WAKE_PRIVATE, 2147483647) = 0
+> 11257 futex(0x5580904cd034, FUTEX_WAKE_PRIVATE, 2147483647) = 0
+> 11257 futex(0x5580907ffdb4, FUTEX_WAIT_PRIVATE, 288, NULL
+> 11293 futex(0x5580907ffdb4, FUTEX_WAKE_PRIVATE, 2147483647) = 1
+> 11257 <... futex resumed>) = 0
+> 11257 futex(0x558090eb7068, FUTEX_WAKE_PRIVATE, 2147483647) = 0
+> 11257 futex(0x5580904cd034, FUTEX_WAKE_PRIVATE, 2147483647) = 0
+> 11257 futex(0x5580907ffdb4, FUTEX_WAKE_PRIVATE, 2147483647) = 0
+> 11257 mmap(NULL, 262144, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7ffa10cff000
+> 11257 mprotect(0x7ffa10cff000, 262144, PROT_READ|PROT_WRITE|PROT_EXEC) = 0
+> 11257 futex(0x558090ec68a8, FUTEX_WAKE_PRIVATE, 2147483647) = 0
+> 11257 futex(0x5580904cd034, FUTEX_WAKE_PRIVATE, 2147483647) = 0
+> 11257 futex(0x5580907ffdb4, FUTEX_WAKE_PRIVATE, 2147483647) = 0
+> ```
+
+
+
+
+
+#### 14. step
+
+> ``` python
+> optimizer.step()
+> ```
+>
+>
+>
+> ```
+> 11257 socket(AF_INET, SOCK_STREAM|SOCK_CLOEXEC, IPPROTO_IP) = 4
+> 11257 getsockname(5, {sa_family=AF_INET, sin_port=htons(0), sin_addr=inet_addr("0.0.0.0")}, [16]) = 0
+> 11257 getpeername(5, 0x7ffc23912670, [16]) = -1 ENOTCONN (Transport endpoint is not connected)
+> 11257 close(5) = 0
+> 11293 futex(0x5580904cd034, FUTEX_WAIT_PRIVATE, 312, NULL
+> 11257 futex(0x5580904cd034, FUTEX_WAKE_PRIVATE, 2147483647) = 1
+> 11293 <... futex resumed>) = 0
+> 11293 futex(0x5580907ffdb4, FUTEX_WAKE_PRIVATE, 2147483647) = 0
+> 11257 futex(0x5580904cd034, FUTEX_WAKE_PRIVATE, 2147483647) = 0
+> 11257 futex(0x5580907ffdb4, FUTEX_WAKE_PRIVATE, 2147483647) = 0
+> 11257 munmap(0x7ffa111bf000, 262144) = 0
+> 11257 munmap(0x7ffa11f40000, 262144) = 0
+> 11257 munmap(0x7ffa11f80000, 262144) = 0
+> 11257 munmap(0x7ffa11fc0000, 262144) = 0
+> 11257 munmap(0x7ffa12540000, 262144) = 0
+> ```
+
+
+
+#### 15. save
+
+> ``` python
+> torch.save(cnn.state_dict(), 'cnn2.pkl')
+> ```
+>
+>
+>
+> ```
+> 11257 socket(AF_INET, SOCK_STREAM|SOCK_CLOEXEC, IPPROTO_IP) = 5
+> 11257 getsockname(4, {sa_family=AF_INET, sin_port=htons(0), sin_addr=inet_addr("0.0.0.0")}, [16]) = 0
+> 11257 getpeername(4, 0x7ffc23912670, [16]) = -1 ENOTCONN (Transport endpoint is not connected)
+> 11257 close(4) = 0
+> 11257 openat(AT_FDCWD, "cnn2.pkl", O_WRONLY|O_CREAT|O_TRUNC, 0666) = 4
+> 11257 writev(4, [{iov_base="PK\3\4\0\0\10\10\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\r\0\25\0cn"..., iov_len=960}, {iov_base="\372\0\321=&\326\266\275F\350\"\275\2364\276=\214\324A\276\241\230\363=M\240,\275aU\316="..., iov_len=1600}], 2) = 2560
+> 11257 writev(4, [{iov_base="PK\7\10\330\341Z\302@\6\0\0@\6\0\0PK\3\4\0\0\10\10\0\0\0\0\0\0\0\0"..., iov_len=192}, {iov_base="\21\276\36\275\32(6=Z\266\0\275\267\373\227\274J\230$\275TG?=7\233\v 11257 writev(4, [{iov_base="PK\7\10\361\347\22\342\0\310\0\0\0\310\0\0PK\3\4\0\0\10\10\0\0\0\0\0\0\0\0"..., iov_len=256}, {iov_base="\237\3631<\24n\230\274\307\202\247 11257 write(4, "PK\7\01012\302\370\0\365\0\0\0\365\0\0PK\3\4\0\0\10\10\0\0\0\0\0\0\0\0"..., 767
+> ```
+
+
+
+
+
+#### 16. python函数结束后的部分
+
+> ```
+>
+> 11293 futex(0x5580904cd034, FUTEX_WAIT_PRIVATE, 328, NULL
+> 11257 <... write resumed>) = 767
+> 11257 close(4) = 0
+> 11257 rt_sigaction(SIGINT, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=SA_RESTORER, sa_restorer=0x7ffa35e42520}, {sa_handler=0x55808a124690, sa_mask=[], sa_flags=SA_RESTORER, sa_restorer=0x7ffa35e42520}, 8) = 0
+> 11257 getsockname(5, {sa_family=AF_INET, sin_port=htons(0), sin_addr=inet_addr("0.0.0.0")}, [16]) = 0
+> 11257 getpeername(5, 0x7ffc23912950, [16]) = -1 ENOTCONN (Transport endpoint is not connected)
+> 11257 close(5) = 0
+> 11257 munmap(0x7ffa10309000, 7843840) = 0
+> 11257 munmap(0x7ffa0c046000, 47042560) = 0
+> 11257 munmap(0x7ffa15f70000, 262144) = 0
+> 11257 munmap(0x7ffa15fb0000, 262144) = 0
+> 11257 close(3) = 0
+> 11257 mprotect(0x7ffa10cff000, 262144, PROT_READ|PROT_WRITE) = 0
+> 11257 munmap(0x7ffa10cff000, 262144) = 0
+> 11257 mprotect(0x7ffa10d7f000, 262144, PROT_READ|PROT_WRITE) = 0
+> 11257 munmap(0x7ffa10d7f000, 262144) = 0
+> 11257 mprotect(0x7ffa10dbf000, 262144, PROT_READ|PROT_WRITE) = 0
+> 11257 munmap(0x7ffa10dbf000, 262144) = 0
+> 11257 mprotect(0x7ffa10e3f000, 262144, PROT_READ|PROT_WRITE) = 0
+> 11257 munmap(0x7ffa10e3f000, 262144) = 0
+> 11257 mprotect(0x7ffa1107f000, 262144, PROT_READ|PROT_WRITE) = 0
+> 11257 munmap(0x7ffa1107f000, 262144) = 0
+> 11257 mprotect(0x7ffa110bf000, 262144, PROT_READ|PROT_WRITE) = 0
+> 11257 munmap(0x7ffa110bf000, 262144) = 0
+> 11257 mprotect(0x7ffa10dff000, 262144, PROT_READ|PROT_WRITE) = 0
+> 11257 munmap(0x7ffa10dff000, 262144) = 0
+> 11257 mprotect(0x7ffa10fff000, 262144, PROT_READ|PROT_WRITE) = 0
+> 11257 munmap(0x7ffa10fff000, 262144) = 0
+> 11257 mprotect(0x7ffa110ff000, 262144, PROT_READ|PROT_WRITE) = 0
+> 11257 munmap(0x7ffa110ff000, 262144) = 0
+> 11257 mprotect(0x7ffa10f3f000, 262144, PROT_READ|PROT_WRITE) = 0
+> 11257 munmap(0x7ffa10f3f000, 262144) = 0
+> 11257 mprotect(0x7ffa10d3f000, 262144, PROT_READ|PROT_WRITE) = 0
+> 11257 munmap(0x7ffa10d3f000, 262144) = 0
+> 11257 mprotect(0x7ffa10eff000, 262144, PROT_READ|PROT_WRITE) = 0
+> 11257 munmap(0x7ffa10eff000, 262144) = 0
+> 11257 mprotect(0x7ffa1103f000, 262144, PROT_READ|PROT_WRITE) = 0
+> 11257 munmap(0x7ffa1103f000, 262144) = 0
+> 11257 mprotect(0x7ffa10f7f000, 262144, PROT_READ|PROT_WRITE) = 0
+> 11257 munmap(0x7ffa10f7f000, 262144) = 0
+> 11257 mprotect(0x7ffa10fbf000, 262144, PROT_READ|PROT_WRITE) = 0
+> 11257 munmap(0x7ffa10fbf000, 262144) = 0
+> 11257 mprotect(0x7ffa10ebf000, 262144, PROT_READ|PROT_WRITE) = 0
+> 11257 munmap(0x7ffa10ebf000, 262144) = 0
+> 11257 mprotect(0x7ffa10e7f000, 262144, PROT_READ|PROT_WRITE) = 0
+> 11257 munmap(0x7ffa10e7f000, 262144) = 0
+> 11257 clock_gettime(CLOCK_MONOTONIC, {tv_sec=15014, tv_nsec=428568394}) = 0
+> 11257 munmap(0x7ffa2e5af000, 331776) = 0
+> 11257 munmap(0x7ffa1f83b000, 331776) = 0
+> 11257 getpid() = 11257
+> 11257 exit_group(0) = ?
+> 11293 <... futex resumed>) = ?
+> 11293 +++ exited with 0 +++
+> 11257 +++ exited with 0 +++
+> ```
+>
+>