NPS,输送机,自动计算以及协程

1.关于协程


在我以前的文章中,亲爱的哈伯,我只谈到了现代编程的知识问题。随后的讨论只证实了自发的恐惧:臭名昭著的“理论基础”立即成为分歧的根源。他们(分歧)可能不存在或者它们具有不同的性质,这一事实似乎并没有打扰大量“真正的”程序员。而且,也许这不是特别有趣,因为程序员主要受到一种兴趣的刺激-代码,代码和唯一的代码。好吧,几乎是“按照医生的规定” [1] ...

在我的文章和评论中谈到corutin的话题时,我根本没有梦到它们在“当前”趋势中所占的比例。但是,无论有无,我的评论的“背景”都令人惊讶。他们说,程序员是做什么的?但是,在我看来,阅读有关最新批准的C ++ 20的文章及其进一步发展的前景后,一切都变得清晰了[2]。令我惊讶的是,事实证明,协程在我心爱的C ++的当前和未来创新中处于最前沿(另请参见CppCoro)。

好吧,告诉我,是否有可能认真对待和/或冷静地对待自己似乎是谁的额头?打所谓的! :(

我熟悉协程的背景(我会以旧的方式称呼它们)。需要并行化,但是没有合适的方法。我必须发明,研究可用的文献。结果,协程立即被拒绝,之后又线程化。原因是它们都是并行化程序的结构方法,而不是计算模型。但是我不想要那个。

我之前在哈布雷(Habré)上的文章中给出了对我最终想到的内容的描述。这段对话还远没有结束,但是就目前而言,协程已经成为这种激烈讨论的主题,如何记住这些协程呢?唯一的是停止/切换过程的“要点”。与线程不同,它们使预测模拟并行操作的进程的行为成为可能。从理论上讲,这还减少了实现并行性的系统损耗。但是,总而言之,所有这些从根本上来说并没有改变。而且由于“点”只是被自动机编程(AP)模型的状态所模仿,所以我对协程的了解已经完成了七个。

但是我不能认为协程的化身(现在称为协程)会超越我。因此,我的,可能是毫无道理的“攻击”,对此,我绝对向科鲁廷的辩护者道歉。大概赶时间。但是,新发现的情况并没有影响我对协程的态度。对于新代码,出于对它们有利的推理,我从未见过任何根本上新的东西。但是,我想指出的是,协程对我而言比线程更紧密和清晰,因为如上所述,它包含有限自动机(CA)内部状态集的类似物。

但是,停止re悔。让我们回到完全涵盖“协程主题”的自动机。接下来,我将介绍与在理论和实践中众所周知的并行模型建模相关联的AP的功能-分层并行和流水线算法模型。我认为,与基于相同的协程相比,它们的自动解决方案看起来更加直观,自然和简单。

2.层并行和流水线形式的算法


假设您需要计算表达式:

y =((((a + b)*(c + d))+((e * f)+(q + h))))。

另外,让操作执行时间定义为以离散时间的任意单位定义-小数加法为1小数,乘法为5小数。
基于计算表达式,操作的执行时间和中间变量的数量的逻辑,在一个实施例中,按层的操作分布和层本身的数量可以看起来例如如下:

t1 = a + b; t2 = c + d; t3 = e * f; t4 = q + h;
Tier0:t1; t2; t3; t4;
层1:t5 = t1 * t2; t6 = t3 + t4;
第2层:t7 = t5 + t6;

以图形方式显示在图5中。 1,显示了两个选项,用于按层分配计算和以滴答表示固定的计算时间。他们的比较表明,在一般情况下,减少层数并不能自动减少计算时间。

图片
图。 1.计算表达式的层级并行形式,

但可以考虑其他选择,它已经由解决单个问题的多种层级并行形式表示。在图。图2显示了这样的解决方案。计算时间减少了。考虑到NPS在多处理器系统上的执行,其并行化也可能很有吸引力。

图片
图。 2.并行NPS

如果旋转JPF图,则可以获得管道计算方案。在其中,传送带的元素将是层,将其运行时间减少到最慢的一层。在图。图3显示了原始表达式的这种流水线方案。

图片
图。3.管道模型

由于在此示例中,离散的输送机时间为5个时钟周期,因此计算时间将比最差版本的NPS还要差。流水线的优势仅在于计算的连续性。

3.用于计算表达式的自动机模型


如果取消了对操作同步的限制,则可以将NPS转换为将生成结果作为管线的电路,但没有与操作顺序和时间相关的限制。这种逻辑网络图以航天器网络模型的形式进行了加法运算(乘法的实现类似)的演示,如图2所示。 4.

图片
图4.基于有限状态机网络的表达式计算

您可以看到,网络将不断产生具有7个时钟周期延迟的结果,即以及最快的NPS模型(图7)。它的缺点包括与数据争用相关的输出不稳定。例如,变量g,h和e,f对中变量值的同时变化将导致在下一个时钟周期t4发生变化,一个时钟周期导致变量t6发生变化,另一个时钟周期导致输出变量t7发生变化(见图1和图4) 。同时,在5个时钟周期后,变量t3将发生变化,这将导致变量t6,t7的最终确定值发生变化并输出。

图片
图。 5.使用自动机网络对NPS进行建模

在图。图5显示了附加模块的引入如何使模拟NPS的计算成为可能。同样,您可以模拟流水线计算的模型,并阻止与数据竞争相关的输出更改。

3.结论


怀疑上面的“图片”不能使用协程实现,这很奇怪。就是说,老实说,我不想这样做。对我来说,创建实现必要操作的自动机要容易得多,然后仅更改其数量及其之间的关系,即可实现任何表达式的计算。

我将不厌其烦地重复说,我对在MATLAB的Stateflow包中实现的可视化编程的概念很感兴趣。在这里,您还可以创建必要的自动机操作,然后将它们用作标准块,为任何表达式“绘制”一个计算方案,在编译后将转化为一个工作程序(例如,在同一C ++中)。同时,在设计过程中,将提供针对自动化编程技术的可视化和调试工具。

没错,可能会出现一个问题-如果存在Stateflow,为什么要永久链接到CPSU的某个未知环境?但是我们还是要分开谈论这个问题......

做出预测是一件不感恩的事情,但是根据我的经验,我会表达一种煽动性的思想:由于高级语言用于否定汇编语言编程,因此可视化编程迟早不宜减少了用高级语言进行编程的压力。

文献

1.程序员,让我们研究经典程序的来源。 [电子资源],访问方式:habr.com/en/post/488808免费。亚兹俄语(治疗日期02.22.2020)。
2. C ++ 20批准!对C ++ 23开发人员的期望和准备。 [电子资源],访问方式:habr.com/en/company/yandex/blog/488588免费。亚兹 俄语 (治疗日期02.20.2020)。

All Articles