TIS-100 Guide

TIS-100棋盘智能系统参考手册 for TIS-100

TIS-100棋盘智能系统参考手册

Overview

官方参考手册的个人中文翻译。封面不翻译,从第1页开始按章节翻译。全文采用直译而非意译。个人翻译,难免有纰漏。如有问题请留言指出,我会尽快改正。

综述

  棋盘智能系统是一个由不对等互联异构节点组成的大规模并行计算机体系。棋盘智能系统旨在应用于需要复杂数据流处理的场合,例如自动金融交易、批量数据收集以及市民行为分析。

提示:像这样的提示会出现在本手册中需要特别注意的地方以及关于某个话题的详细信息扩展阅读其他文档的场合。

系统架构和组织

  棋盘智能系统由很多在实际基础上连接的相互独立节点组成。(参考具体型号的手册关于特定设备精确的节点数目。)节点可被广泛地分类为处理节点或存储节点,每个分类又有几种变体。
  通常,节点通过端口来与最多4个相邻节点连接。端口可以满足轻量的节点间信息传递。通过端口的通信由允许节点对端口发出或者请求并阻塞,直到请求被相应的节点所响应。

提示:如果两个节点在它们之间的连接上发送了同样的通信指令(读或者写),节点就会死锁并且发生硬件错误。详情参考独立文档“Tessellated Intelligence System Best Practices – Patterns of Node Communication”关于如何高效安全地使用端口。 提示:如果一个节点发送了一条通信指令但是这个指令一直没有被相应的节点所相应,这个节点就会死锁并且发生硬件错误。(详情参考特定节点类型的文档)详情参考独立文档“Tessellated Intelligence System Best Practices – Patterns of Node Communication”关于如何高效安全地使用端口。 提示:本文档不描述节点通讯操作或指令的时间或流量,因为这些参数随着模型及硬件版本而改变。参考具体型号的手册来获得关于某一特定设备性能特点的详细描述。

T20节点 – 保留

提示:此类型节点的定义跟特定型号的棋盘智能系统相关所以在本文档中不予描述。只有当系统包含此类节点才有相应的文档。根据法律规定,未授权对描述此类型节点的文档进行复制的行为会被报告到国家安全局。

T21节点 – 基本执行节点

  1. 架构

      基本执行节点与棋盘智能系统的协调有关。处理过程可以发生在基本执行节点中,或者被授权到专门的处理或存储节点中。
      基本执行节点执行的程序由其指令集规定。一个基础的基本执行节点程序执行运算或通信操作。每步操作从程序的第一条指令开始依次执行。在执行完一个程序的最后一条指令之后,处理会自动从第一条指令继续进行。这种特性使得基本执行节点具有一种普遍的作用,即程序被编写来运行在一个连续的循环中。
      除了每个棋盘智能系统节点都有的通信端口之外,基本执行节点还包含了一些在程序执行过程中可被使用的寄存器。除此之外基本执行节点没有额外的存储空间可供使用;如果节点需要额外的存储空间,那么它应该与其他的基本执行节点或者存储节点进行协调(通信)。
      所有的寄存器可存储大于等于-999小于等于999的整数值。具体寄存器中数值的表示是编译器相关的,编写基本执行节点并不需要有关这种具体表示的知识。

    1. ACC
      类型:内部
      描述:ACC是基本执行节点中主要的存储寄存器。ACC在许多指令中被作为隐式源或目标操作数使用,包括算数和条件指令。
    2. BAK
      类型:内部(不可寻址)
      描述:BAK是ACC中数值的临时存储空间。它只能被SAV和SWP指令访问,不能直接读或写
    3. NIL
      类型:内部(特殊)
      描述:读取NIL产生数值0。写入NIL无效果。NIL能被用作目标操作数来执行一个指令的附带作用,而舍弃结果。
    4. LEFT,RIGHT,UP,DOWN
      类型:端口
      描述:四个通信寄存器 UP,DOWN,LEFT,RIGHT 对应于基本执行节点用来与其他拓扑相邻节点通信的四个端口。一些端口会在硬件中断开与特定节点的连接,并且可能会当触发一个读或写命令时无限阻塞。查看节点的互联图来判断哪些端口是可以使用的。
    5. ANY
      类型:端口(伪端口)
      描述:当ANY被用作一个指令的源时,该指令会读取任意端口上第一个可用的值。当ANY被用作一个指令的目的时,指令的结果会发往第一个对该节点任意端口作读取操作的其他节点。
    6. LAST
      类型:端口(伪端口)
      描述:LAST指向使用ANY伪端口最后读或写的端口。它相当于显示指定一个端口。在LAST没有成功被使用ANY伪端口进行读或写之前对LAST进行读或写会得到编译器相关的表现。详情参考独立文档“Tessellated Intelligence System Best Practices – Patterns of Node Communication”以获得关于示范LAST伪端口使用的示例代码。

  2. 指令系统

      <SRC>和<DST>指令参数可以指定一个端口或内部寄存器。对某一端口的任意使用会阻塞该端口直到对应的节点连接到该端口并通过读或写一个值来完成通讯。此外,一个<SRC>参数只能是一个大于等于-999小于等于999的常量值。
      BAK不能被指定为一个<SRC>或<DST>操作数。BAK中的数值只能通过特殊指令SAV和SWP来访问。
      <LABEL>参数可以被指定为任意文本名用来指定程序内的跳转目标。

    1. 注释
      语法:#注释内容
      描述:所有在注释符号(#)后面的文本会被忽略。

      提示:两个注释符号(##)后的文本会作为其所在程序的标题,该标题会显示在调试器中以便更清晰地浏览程序。
    2. 标签
      语法:<LABEL>:
      描述:标签用来标识跳转指令的目标。当作为跳转目标时,标签之后的指令会被下一步执行。
      示例:

      LOOP: 这是一个独立一行的标签 L: MOV 8,ACC 这是一个后跟其他指令的标签
    3. NOP
      语法:NOP
      等价语法:ADD NIL
      描述:NOP是一个伪指令,对节点的内部状态及通信端口均无作用。NOP会被自动转换成指令ADD NIL。
    4. MOV
      语法:MOV <SRC>,<DST>
      描述:读取<SRC>的值并将结果写入<DST>。
      示例:

      MOV 8,ACC 常量8被写入ACC寄存器 MOV LEFT,RIGHT 一个值从LEFT端口被读取,然后写入RIGHT端口 MOV UP,NIL 一个值从UP端口被读取,然后舍弃。
    5. SWP
      语法:SWP
      描述:交换ACC与BAK中的值。
    6. SAV
      语法:SAV
      描述:将ACC中的值写入BAK。
      译者注:相当于MOV ACC,BAK
    7. ADD
      语法:ADD <SRC>
      描述:将<SRC>中的值与ACC的值相加,并将结果存储在ACC。
      示例:

      ADD 16 将常量16加到ACC寄存器上 ADD LEFT 从LEFT端口读取一个值,并加到ACC上
    8. SUB
      语法:SUB <SRC>
      描述:从ACC的值中减去<SRC>中的值,并将结果存储在ACC。
      示例:

      SUB 16 将ACC寄存器上的值减去常量16 SUB LEFT 从LEFT端口读取一个值,并在ACC中减去该值
    9. NEG
      语法:NEG
      描述:将ACC中的值数学上取反。0值保持不变。
      译者注:即正负变换。
    10. JMP
      语法:JMP <LABEL>
      描述:无条件跳转。<LABEL>之后的指令会被下一步执行。
    11. JEZ
      语法:JEZ <LABEL>
      描述:条件跳转。当ACC中的值等于0时,<LABEL>之后的指令会被下一步执行。
    12. JNZ
      语法:JNZ <LABEL>
      描述:条件跳转。当ACC中的值不等于0时,<LABEL>之后的指令会被下一步执行。
    13. JGZ
      语法:JGZ <LABEL>
      描述:条件跳转。当ACC中的值大于0时,<LABEL>之后的指令会被下一步执行。
    14. JLZ
      语法:JLZ <LABEL>
      描述:条件跳转。当ACC中的值小于0时,<LABEL>之后的指令会被下一步执行。
    15. JRO
      语法:JRO <SRC>
      描述:无条件跳转。相对当前指令偏移<SRC>行的指令会被下一步执行。
      示例:

      JRO 0 本指令会被下一步执行,高效的停机操作。(译者注:死循环) JRO -1 前一条指令会被下一步执行。 JRO 2 后一条指令会被跳过,执行再下一步指令。 JRO ACC 下一步执行的指令由ACC中的值决定。

  3. 示例程序

      下面的示例程序从LEFT端口读取一串数值,将每个读到的数值翻倍后写到RIGHT端口。由于基本执行节点的自动循环特性,这个程序会在执行完最后一条指令之后从第一条指令重新开始。

    MOV LEFT,ACC 从LEFT端口读取一个数值存入ACC寄存器 ADD ACC ACC中的数值加上自己,即翻倍 MOV ACC,RIGHT 将ACC寄存器中的数值写入RIGHT端口

      下面的示例程序从UP端口读取一串数值,将其中的正值写到RIGHT端口、负值写到LEFT端口。0值舍弃。

    START: MOV UP,ACC 从UP端口读取一个数值存入ACC寄存器 JGZ POSITIVE 如果ACC中的数值大于0,跳转到“POSITIVE” JLZ NEGATIVE 如果ACC中的数值小于0,跳转到“NEGATIVE” JMP START 数值既不是正数也不是负数(译者注:就是0嘛),所以跳转到”START” POSITIVE: MOV ACC,RIGHT 将ACC寄存器中的数值写到RIGHT端口 JMP START 跳转到“START” NEGATIVE:: MOV ACC,LEFT 将ACC寄存器中的数值写到LEFT端口 JMP START 跳转到“START”

T30节点 – 栈内存节点

  1. 架构

      栈内存节点实现对大量数值的读、写,根据一个简单的基于栈的通信协议。(参考具体型号的手册来获得关于栈内存节点在特定设备上的具体性能。)

  2. 通信协议

      栈内存节点的所有交互都是通过端口来完成的。对栈内存节点的写于操作会将数值压入栈顶。如果栈是满的,写入操作会阻塞直到有写入空间。对栈内存节点的读取操作会将栈顶的数值弹出。如果栈是空的,读取操作会阻塞直到有数值可读。
      栈内存节点通常连接到多个其他节点,并且能被任意连接的节点所使用。对栈内存节点的同时读写会导致一个不确定的处理顺序,但是每个独立的通信则会根据通信协议来处理。关于从多节点中高效且可预测地使用存储节点的更多信息,参阅独立文档“Tessellated Intelligence System Best Practices – Patterns of Node Communication”。

T31节点 – 随机访问内存节点

提示:随机访问内存节点在标准棋盘智能系统设备中还不可用。模拟器和原型硬件可用,为了吸引用户。规范与行为还没有最终确定,所以在本文档中被省略。

内嵌交互调试器

  1. 快捷键

    内嵌交互调试器包含以下的快捷键:
    Ctrl+Z:撤销
    Ctrl+Y:重做
    Ctrl+X:剪切
    Ctrl+C:复制
    Ctrl+V:粘贴
    Ctrl+方向键:焦点转到该方向临近的节点
    F1:查看指令集快速参考
    F2:查看反篡改认证状态 ??【译者注:问号来自原文】
    F5:运行当前程序
    F6:步进或暂停当前程序

  2. 断点

      要设置断点,在一行的开始添加一个感叹号(!)。当一个断点被设置之后,程序会在执行该行之前暂停,使你能够方便地检查代码而不用乏味地一步一步步进代码。

    MOV LEFT,ACC !ADD ACC 程序会在执行该指令之前暂停 MOV ACC,DOWN

可视化模块

  1. 可视化模块用法

      TIS-1OO包含一个可视化模块使得程序能够编程创建和显示图像。该模型内容可以被发送命令序列来修改,序列包含开始X坐标,开始Y坐标,一个或多个颜色值,以及一个表示终止的负值(通常为-1)。坐标系统开始于(0,0),位于显示区域左上角。【译者注:等同于计算机屏幕坐标系】
    可视化模块提供以下颜色:
    0:黑色
    1:深灰色
    2:亮灰色
    3:白色
    4:红色

  2. 可视化模块分辨率

      标准TIS-100可视化模块为30字符宽18字符高
      “image console sandbox”包含一个更大的可视化模块,为36字符宽22字符高。

  3. 示例命令序列
    0,0,3,-1 在显示区域左上角显示单个白色像素 0,0,4,4,4,4,4,-1 在显示区域左上角显示一条红色横线
SteamSolo.com