Skip to content

Commit

Permalink
Update tutorial-08-matrix_multiply.md
Browse files Browse the repository at this point in the history
  • Loading branch information
holmes1412 authored Aug 5, 2020
1 parent ee3b0c1 commit 5c4cbf5
Showing 1 changed file with 8 additions and 8 deletions.
16 changes: 8 additions & 8 deletions docs/tutorial-08-matrix_multiply.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,16 +5,16 @@

# 关于matrix_multiply

程序执行两个代码里两个矩阵的乘法,并将相乘结果打印在屏幕上。
程序执行代码里两个矩阵的乘法,并将相乘结果打印在屏幕上。
示例的主要目的是展现怎么实现一个自定义CPU计算任务。

# 定义计算任务

定义计算任务需要提供3个基本信息,为别为INPUT,OUTPUT,和routine。
定义计算任务需要提供3个基本信息,分别为INPUT,OUTPUT,和routine。
INPUT和OUTPUT是两个模板参数,可以是任何类型。routine表示从INPUT到OUTPUT的过程,定义如下:
~~~cpp
template <class INPUT, class OUTPUT>
class WFThreadTask
class __WFThreadTask
{
...
std::function<void (INPUT *, OUTPUT *)> routine;
Expand Down Expand Up @@ -42,7 +42,7 @@ void add_routine(const add_input *input, add_output *output)

typedef WFThreadTask<add_input, add_output> add_task;
~~~
在我们的矩阵乘法的示例里,输入是两个矩阵,输出为一个矩阵。其实定义如下
在我们的矩阵乘法的示例里,输入是两个矩阵,输出为一个矩阵。其定义如下
~~~cpp
namespace algorithm
{
Expand Down Expand Up @@ -89,7 +89,7 @@ public:
...
};
~~~
与之前的网络工厂类或算法算法工厂类略有不同,这个类需要INPUT和OUTPUT两个模板参数。
与之前的网络工厂类或算法工厂类略有不同,这个类需要INPUT和OUTPUT两个模板参数。
queue_name相关的知识在上一个示例里已经有介绍。routine就是你的计算过程,callback是回调。
在我们的示例里,我们看到了这个调用的使用:
~~~cpp
Expand Down Expand Up @@ -141,9 +141,9 @@ callback里简单打印了输入输出。如果输入数据不合法,则打印
# 算法与协议的对称性
在我们的体系里,算法与协议在一个非常抽象的层面上是具有高度对称性的。
有自定义算法的线程任务,那显然也书写自定义协议的网络任务
有自定义算法的线程任务,那显然也存在自定义协议的网络任务
自定义自定义算法要求提供算法的过程,而自定义协议则需要用户提供序列化和反序列化的过程,之后会详细介绍。
无论是自定义算法还是自定协议,我们都必须强调算法和协议都是非常纯粹的。
无论是自定义算法还是自定义协议,我们都必须强调算法和协议都是非常纯粹的。
例如算法就是一个从INPUT到OUPUT的转换过程,算法并不知道task,series等的存在。
HTTP协议的实现上,也只关心序列化反序列化,无需要关心什么是task。而是在http task里去引用HTTP协议。
Expand All @@ -152,6 +152,6 @@ HTTP协议的实现上,也只关心序列化反序列化,无需要关心什
在这个示例里,我们通过WFThreadTaskFactory构建了一个线程任务。可以说这是一种最简单的计算任务构建,大多数情况下也够用了。
同样,用户可以非常简单的定义一个自有协议的server和client。
但在上一个示例里我们看到,我们可以通过算法工厂产生一个并行排序任务,这显然不是通过一个routine就能做到的。
对于网络任务,比如一个kafka任务,可能要经过与多台机器的交互才能得到结果,但用户来讲是完全透明的
对于网络任务,比如一个kafka任务,可能要经过与多台机器的交互才能得到结果,但对用户来讲是完全透明的
所以,我们的任务都是具有复合性的,如果你熟练使用我们的框架,可以设计出很多复杂的组件出来。

0 comments on commit 5c4cbf5

Please sign in to comment.