|
@@ -336,15 +336,43 @@ end do
|
|
|
|
|
|
##### 性能结果
|
|
|
|
|
|
-
|
|
|
## 个人实验
|
|
|
|
|
|
+##### 问题描述
|
|
|
+
|
|
|
+###### LSTM长短时记忆
|
|
|
+
|
|
|
+长短期记忆(英语:Long Short-Term Memory,LSTM)是一种时间递归神经网络(RNN),论文首次发表于1997年。由于独特的设计结构,LSTM适合于处理和预测时间序列中间隔和延迟非常长的重要事件。LSTM可以应用在语音识别,机器翻译,自然语言处理,手写识别等机器学习应用。
|
|
|
+
|
|
|
+##### 串行算法描述
|
|
|
+
|
|
|
+###### 计算公式
|
|
|
+
|
|
|
+$$
|
|
|
+i_t=\text{sigmoid}(W_{ii}x_t+b_{ii}+W_{hi}h_{(t-1)}+b_{hi})\\
|
|
|
+f_t=\text{sigmoid}(W_{if}x_t+b_{if}+W_{hf}h_{(t-1)}+b_{hf})\\
|
|
|
+g_t=\text{tanh}(W_{ig}x_t+b_{ig}+W_{hc}h_{(t-1)}+b_{hg})\\
|
|
|
+o_t=\text{sigmoid}(W_{io}x_t+b_{io}+W_{ho}h_{(t-1)}+b_{ho})\\
|
|
|
+c_t=f_t\cdot c_{(t-1)}+i_t\cdot g_t\\
|
|
|
+h_t=o_t\cdot \text{tanh}(c_t)
|
|
|
+$$
|
|
|
+
|
|
|
##### 并行算法描述
|
|
|
|
|
|
+###### 依赖关系分析
|
|
|
|
|
|
-##### MPI实现
|
|
|
+从上面公式来看,输出$c_t,h_t$依赖于$c_{(t-1)},f_t,g_t,i_t,o_t$,而$i_t,f_t,g_t,o_t$又依赖于$h_{(t-1)}$,对于这种随时间的迭代计算,不同时间$t$之间不能并行计算,因而考虑$i_t,f_t,g_t,o_t$可以并行计算,而在$i_t,f_t,g_t,o_t$内有矩阵乘加计算,也可以使用分块矩阵的并行计算。
|
|
|
|
|
|
-##### 核心MPI代码
|
|
|
+###### MPI+OpenMP设计
|
|
|
+
|
|
|
+对于LSTM的各个时间点的计算,使用MPI分配在不同的节点上,使用流水化设计,节点间只需传输$h_t,c_t$
|
|
|
+
|
|
|
+对于LSTM的一个时间点内的计算,考虑在同一个节点上使用MPI分为$i_t,f_t,g_t,o_t$4个部分计算,需要广播$x_t$
|
|
|
+
|
|
|
+$i_t,f_t,g_t,o_t$每个部分内的矩阵乘法使用OpenMP计算,OpenMP的线程数设置为,一个节点上的处理器个数/4
|
|
|
+
|
|
|
+
|
|
|
+##### MPI+OpenMP实现
|
|
|
|
|
|
##### 性能结果
|
|
|
|