全共享多线程表处理的批量评估
1. 背景
表处理背后的基本思想很简单:通过将表式子目标的答案存储在一个合适的数据空间(称为表空间)中来评估程序。对表式子目标的重复调用不会根据程序子句重新评估,而是通过使用已经存储在其表条目中的答案来解决。在这个过程中,当找到更多新答案时,它们会被存储在表中,并在之后返回给所有重复调用。
Yap的表空间组织如下:
- 入口点是表条目数据结构,在编译表式谓词时分配,确保对该谓词的进一步调用从同一点访问表空间。
- 表条目下方是子目标trie结构,每个不同的表式子目标调用对应一条通过子目标trie结构的唯一路径,最终到达子目标框架。
- 子目标框架存储子目标的额外信息,并作为答案trie结构的入口点,每条通过答案trie数据单元的唯一路径对应一个不同的答案。
2. Yap的多线程表处理支持
在Yap中,线程将其表视为私有,但在引擎级别实现了三种并发表处理支持设计:
- 无共享(NS)设计 :每个线程分配完全私有的表。表条目数据结构存储谓词的公共信息,每个线程在桶数组中有自己的单元指向私有数据结构。
- 全共享(FS)设计 :线程共享完整的表空间。子目标和答案trie结构以及部分子目标框架(子目标条目数据结构)在所有线程之间共享,子目标框架数据结构被拆分为存储公共信息的子目标条目和每个线程私有的剩余信息。FS设计支持基于锁和无锁的方法来支持子目标/答案trie内的并发。
3. 调度策略
- 本地调度 :以广度优先的方
超级会员免费看
订阅专栏 解锁全文
970

被折叠的 条评论
为什么被折叠?



