【发布时间】:2014-04-03 09:31:12
【问题描述】:
我目前正在阅读某人的论文,并且不断遇到术语“AND-parallelism”和“OR-parallelism”。一个简单的谷歌搜索并没有揭示一个简单的解释。那么什么是“AND-parallelism”和“OR-parallelism”,它们有什么不同呢?
【问题讨论】:
我目前正在阅读某人的论文,并且不断遇到术语“AND-parallelism”和“OR-parallelism”。一个简单的谷歌搜索并没有揭示一个简单的解释。那么什么是“AND-parallelism”和“OR-parallelism”,它们有什么不同呢?
【问题讨论】:
假设在逻辑编程上下文中,当您有目标的合取或析取时,就有可能并行证明所有目标。在目标结合的情况下,您谈论与并行性,而对于目标的分离,您谈论或并行性。当所有目标都是独立的时,与并行很简单(即,一个目标的输出不用作另一个目标的输入;但是,在某些情况下使用累加器被传递,目标仍然可以被视为独立的)。在其他情况下,它很快就会变得棘手。顾名思义,在和并行中,所有目标都必须为真才能使合取为真。对于或并行性,目标之一是真实的就足够了。这导致了一种称为竞争性或并行性的变体,一旦您证明了其中一个目标,您就可以停止寻找其他目标的证明。
独立的 or-parallelism 和 or-parallelism 都可以是隐式的,即编译器可以识别证明可以并行化的情况,也可以是显式的。在后一种情况下,通常是使用语言结构的程序员告诉编译器哪些目标可以并行运行。 YapOr 是隐式或并行实现的一个示例。
独立或并行和(竞争)或并行都可以使用多线程来实现。当使用 SWI-Prolog、XSB 或 YAP 作为 Prolog 后端编译器时,Logtalk 支持它。在独立或并行和竞争或并行的 Logtalk 分布中可以找到几个示例。 SWI-Prolog 发行版还包括一个提供类似功能的库。同样相关和有趣的是发现的逻辑引擎的概念,例如在精益序言中。
如果你想进一步挖掘,有很多关于这个主题的论文。如果您想了解和使用这些概念,我希望我提供了足够的信息来帮助您入门。
【讨论】:
这些术语出现在用 Prolog(一般逻辑语言)编写的程序的并行评估上下文中。 你可以在这里找到解释:
【讨论】: