《具有组格式的可变长度数据的改进型编码和解码.pdf》由会员分享,可在线阅读,更多相关《具有组格式的可变长度数据的改进型编码和解码.pdf(49页珍藏版)》请在专利查询网上搜索。
1、(10)申请公布号 CN 103582883 A (43)申请公布日 2014.02.12 CN 103582883 A (21)申请号 201280014197.3 (22)申请日 2012.02.22 61/446,364 2011.02.24 US 13/077,479 2011.03.31 US 13/077,417 2011.03.31 US G06F 17/30(2006.01) (71)申请人 A9.COM 公司 地址 美国加利福尼亚州 (72)发明人 丹尼尔E.罗斯 亚历山大A.斯特潘诺夫 阿尼尔拉梅什冈格利 帕拉姆吉特S.奥比罗 瑞安雅各布恩斯特 (74)专利代理机构 广州华。
2、进联合专利商标代理 有限公司 44224 代理人 何冲 王程 (54) 发明名称 具有组格式的可变长度数据的改进型编码和 解码 (57) 摘要 本发明的实施例提供了用于将可变长度数据 编码和解码的方法和系统, 其可包括用于将搜索 引擎收录列表进行编码和解码的方法。多个实施 例可以包括不同的编码格式, 这些不同的编码格 式包括组一进制、 封包一进制和 / 或封包二进制 格式。一些实施例可以利用单指令多数据 (SIMD) 指令, 单指令多数据 (SIMD) 指令可以作为解码过 程的一部分对编码的数据执行并行整理操作。一 些实施例可以采用查询表来确定解码过程中要采 用的整理序列和 / 或掩码和 / 。
3、或移位。一些实施 例可以采用混合格式。 (30)优先权数据 (85)PCT国际申请进入国家阶段日 2013.09.18 (86)PCT国际申请的申请数据 PCT/US2012/026152 2012.02.22 (87)PCT国际申请的公布数据 WO2012/116086 EN 2012.08.30 (51)Int.Cl. 权利要求书 2 页 说明书 32 页 附图 14 页 (19)中华人民共和国国家知识产权局 (12)发明专利申请 权利要求书2页 说明书32页 附图14页 (10)申请公布号 CN 103582883 A CN 103582883 A 1/2 页 2 1. 一种用于将可变长。
4、度数据解码的系统, 其包括 : 处理器 ; 以及 存储装置, 所述存储装置包括在被所述处理器执行时使所述系统执行如下操作的指 令 : 读取一个或多个数据块, 每个数据块包括多个编码的可变长度数据 ; 读取与所述一个或多个数据块链接的一个或多个描述符 ; 从查询表标识与所述一个或多个描述符链接的一个或多个整理序列 ; 使用一个或多个所标识的整理序列对所述一个或多个数据块执行一个或多个整理操 作 ; 以及 由整理的一个或多个数据块确定多个解码的可变长度数据。 2. 如权利要求 1 所述的用于将可变长度数据解码的系统, 其中执行所述一个或多个整 理操作还包括, 将一个或多个零序列插入到所述整理的一个。
5、或多个数据块以按标准格式来 表示所述一个或多个数据块的一个或多个部分。 3. 如权利要求 1 所述的用于将可变长度数据解码的系统, 其中所述一个或多个数据块 表示多个可变长度整数。 4. 如权利要求 1 所述的用于将可变长度数据解码的系统, 其中由所述整理的一个或多 个数据块确定多个解码的可变长度数据还包括 : 由所述整理的一个或多个数据块确定部分结果, 其中由另一个数据块确定与所述部分 结果关联的剩余部分。 5. 如权利要求 1 所述的用于将可变长度数据解码的系统, 其中所述一个或多个整理操 作包括来自单指令多数据 (SIMD) 处理器指令集的一个或多个并行整理指令。 6. 如权利要求 1 。
6、所述的用于将可变长度数据解码的系统, 其还包括 : 标识与所述一个或多个描述符链接的一个或多个偏移量。 7. 如权利要求 6 所述的用于将可变长度数据解码的系统, 其中与所述一个或多个描述 符链接的所述一个或多个偏移量包括具有固定尺寸的输入偏移量和可变尺寸的输出偏移 量。 8. 如权利要求 6 所述的用于将可变长度数据解码的系统, 其中与所述一个或多个数据 块链接的所述一个或多个偏移量包括具有可变尺寸的输入偏移量。 9. 一种计算机实施的方法, 其用于使用可变长度表达来将数据编码, 所述方法包括 : 在以可执行指令配置的一个或多个计算机系统的控制下, 确定用于数据存储的块的尺寸 ; 标识多个数。
7、据项 ; 确定每个数据项的编码表达, 其中所述数据项的编码表达使用可变长度表达 ; 标识所述数据项的所述多个编码表达的第一子集, 其中来自所述数据项的多个编码表 达的所述第一子集中的数据项的编码表达的相应尺寸之和小于或等于所确定的用于数据 存储的块的尺寸 ; 生成第一描述符, 所述第一描述符表示所述多个数据项的所述多个编码表达的所述第 一子集中的数据项的编码表达的相应尺寸 ; 将所述多个数据项的所述多个编码表达的所述第一子集中的数据项的编码表达作为 权 利 要 求 书 CN 103582883 A 2 2/2 页 3 第一存储组来存储 ; 以及 存储所述第一描述符。 10. 如权利要求 9 所。
8、述的使用可变长度表达将数据编码的计算机实施的方法, 其中存 储所述第一描述符包括, 将所述第一描述符与所述第一存储组连续地存储。 11. 如权利要求 9 所述的使用可变长度表达将数据编码的计算机实施的方法, 其中存 储所述第一描述符包括, 将所述第一描述符与所述第一存储组不连续地存储。 12. 如权利要求 9 所述的使用可变长度表达将数据编码的计算机实施的方法, 其中生 成所述第一描述符包括, 以一进制格式表示每个数据项的每个相应编码表达的尺寸。 13. 如权利要求 12 所述的使用可变长度表达将数据编码的计算机实施的方法, 其中以 一进制格式表示每个数据项的每个相应编码表达的尺寸包括, 生成。
9、所述一进制格式, 该一 进制格式将每个数据项的每个编码表达的相应尺寸描述为一进制尺寸减去一, 并且通过零 将每个相应尺寸的表达分隔。 14. 如权利要求 12 所述的使用可变长度表达将数据编码的计算机实施的方法, 其中生 成所述第一描述符包括, 将填充信息插入到所述第一描述符中, 表示所述第一子集与所述 数据块尺寸之间的尺寸之差。 15. 如权利要求 9 所述的使用可变长度表达将数据编码的计算机实施的方法, 其还包 括 : 从所述数据项的所述多个编码表达中标识相应数据项的附加编码表达 ; 将所述相应数据项的所述附加编码表达的至少第一部分存储为所述第一存储组的一 部分 ; 以及 将所述相应数据项。
10、的所述附加编码表达的至少第二部分存储为第二存储组的一部分。 权 利 要 求 书 CN 103582883 A 3 1/32 页 4 具有组格式的可变长度数据的改进型编码和解码 背景技术 0001 典型的搜索引擎索引算法采用反向索引数据结构。 这在概念上类似于书籍背后的 索引, 它是将例如, 词汇列表的索引数据结构映射到其在文档 (或文档集) 中的位置的索引 数据结构。在搜索引擎的应用环境中, 文档通常是 Web 页面、 电子邮件消息等。词汇在文 档中出现可以称为收录, 包括一个词汇的所有文档的列表可以称为收录列表。刚好与书籍 索引条目列表页码一样, 收录列表可以包括文档标识号 (docID) 。
11、。当搜索引擎接收查询时, 它可以对收录列表查找查询中的每个词汇, 并组合结果。为了高效地组合结果, 可以按其 docID 的次序存储器这些收录。 0002 期望将收录列表存储在尽可能小的空间中。使用相邻 docID 之间的差而非 docID 本身, 收录能够包括更少的数量。从常用数据库到 MIDI 规范, 有多种其他示例, 其中可以更 紧密地将数据编码, 然后在较后的点处将其解码, 其中常常基于需要数据的时间重复地进 行解码。有多种为将数据存储在更少的空间中而开发的技术。但是, 这些方法或许有缺点, 包括速度限制或存储效率限制。 附图简介 0003 将参考附图描述根据本发明披露的多种实施例, 。
12、其中 : 0004 图 1 图示其中能够实施多种实施例的环境 ; 0005 图 2A 图示能够根据一些实施例使用的拆分一进制编码格式 ; 0006 图 2B 图示根据一些实施例的采用拆分一进制编码格式编码的数据的示例 ; 0007 图 3A 图示能够根据一些实施例使用的封包一进制编码格式 ; 0008 图 3B 图示根据一些实施例的采用封包一进制编码格式编码的数据的示例 ; 0009 图 4A 图示能够根据一些实施例使用的封包二进制编码格式 ; 0010 图 4B 图示根据一些实施例的采用封包二进制编码格式编码的数据的示例 ; 0011 图 5A 图示能够根据一些实施例使用的组二进制编码格式 。
13、; 0012 图 5B 图示根据一些实施例的采用组二进制编码格式编码的数据的示例 ; 0013 图 6A 图示能够根据一些实施例使用的组一进制编码格式 ; 0014 图 6B 图示根据一些实施例的采用组一进制编码格式编码的数据的示例 ; 0015 图 6C 图示能够根据一些实施例使用的组一进制编码格式 ; 0016 图 7A 图示能够根据一些实施例使用的组一进制编码格式 ; 0017 图 7B 图示根据一些实施例的采用组一进制编码格式编码的数据的示例 ; 0018 图 7C 图示能够根据一些实施例使用的组一进制编码格式 ; 0019 图 8 图示能够根据一些实施例使用的用于将搜索引擎收录列表的。
14、文档标识号编 码的方法 ; 0020 图 9 图示能够根据一些实施例使用的用于将可变长度数据编码的方法 ; 0021 图 10 图示能够根据一些实施例使用的并行整理 (parallel shuffle) 操作 ; 0022 图 11 图示能够根据一些实施例使用的并行整理 (parallel shuffle) 操作 ; 说 明 书 CN 103582883 A 4 2/32 页 5 0023 图 12 图示能够根据一些实施例使用的解码的方法 ; 0024 图 13 图示如何构造能够根据一些实施例使用的整理序列 ; 0025 图 14 图示能够根据一些实施例使用的用于将搜索引擎收录列表中的编码的文。
15、档 标识号差解码的方法 ; 0026 图 15 图示能够根据一些实施例使用的用于将可变长度数据解码的方法 ; 0027 图 16 图示能够根据一些实施例使用的混合一进制序列编码格式 ; 0028 图 17 图示根据一些实施例的采用混合一进制序列编码格式编码的数据的示例 ; 0029 图 18 图示能够根据一些实施例使用的具有恒定长度描述符的块行程的混合编码 格式 ; 0030 图 19 图示根据一些实施例的采用具有恒定长度描述符的块行程的混合编码格式 编码的数据的示例 ; 0031 图 20 图示根据一些实施例的采用具有恒定长度描述符的块行程的混合编码格式 编码的数据的示例 ; 0032 图 。
16、21 图示根据一些实施例的采用具有恒定长度描述符的行程的混合编码格式编 码的数据的示例 ; 0033 图 22 图示根据一些实施例的采用具有可变长度描述符的行程的混合编码格式编 码的数据的示例 ; 以及 0034 图 23 图示根据一些实施例的采用具有可变长度描述符的行程的混合编码格式编 码的数据的示例。 具体实施方式 0035 根据本发明披露的多种实施例的系统和方法可以克服用于将数据集编码和解码 的常规方法中遇到的前文所述和其他缺点中的一个或多个缺点。具体来说, 多种方法提供 对包括整数序列, 如搜索引擎收录列表中遇到的那些整数序列的数据集进行改进的编码和 / 或解码。 0036 提供一些方。
17、法、 系统和 / 或装置, 其用于采用根据多种实施例的并行整理操作将 搜索引擎中的编码的文档标识号差解码。在一个实施例中, 将编码的文档标识号差解码包 括读一个或多个描述符。每个描述符包括有关一组编码的标识号差的尺寸信息。在一些实 施例中, 采用组一进制格式将编码的文档标识号差编码。读表示该组编码的文档标识号差 的多个数据。将该组编码的文档标识号差与一个或多个描述符链接。标识查询表中的与一 个或多个描述符链接的一个或多个整理序列。 使用所标识的整理序列对表示该组编码的文 档标识号差的多个数据执行一个或多个并行整理操作。 一个或多个并行整理操作包括将一 个或多个零序列插入到多个数据中。 从表示该。
18、组编码的文档标识号差的整理的多个数据中 确定多个解码的文档标识号差。 0037 根据多种实施例提供用于将可变长度数据解码的方法、 系统和 / 或装置。在一些 实施例中, 将可变长度数据解码包括读一个或多个数据块。每个数据块表示多个编码的可 变长度数据。读与一个或多个数据块链接的一个或多个描述符。从查询表标识与一个或多 个描述符链接的一个或多个整理序列。 使用所标识的整理序列对该一个或多个数据块执行 一个或多个整理操作。由整理的一个或多个数据块确定多个解码的可变长度数据。 说 明 书 CN 103582883 A 5 3/32 页 6 0038 在一些实施例中, 执行一个或多个整理操作包括将一个。
19、或多个零序列插入到整理 的一个或多个数据块以标准格式, 如整数的 32 位表示来表示该一个或多个数据块的一个 或多个部分。该一个或多个数据块可以表示以可变长度表达编码的多个整数。在一些实施 例中, 该一个或多个数据块可以表示以可变长度表达编码的其它数据。 0039 由整理的一个或多个数据块确定多个解码的可变长度数据还可以包括, 从整理的 一个或多个数据块确定部分结果。可以从另一个数据块确定与该部分结构关联的其余部 分。此类实施例可以采用完整块变体, 如上文论述。在一些情况中, 一个或多个整理操作可 以包括来自单指令多数据 (SIMD) 处理器指令集的一个或多个并行整理指令。 0040 一些实施。
20、例可以包括标识与一个或多个描述符链接的一个或多个偏移量。 与一个 或多个描述符链接的一个或多个偏移量可以包括具有固定尺寸的输入偏移量, 在一些情况 中, 与一个或多个描述符链接的一个或多个偏移量可以包括具有可变尺寸的输出偏移量。 该固定尺寸可以取决于一个或多个数据块和一个或多个描述符中包括的字节的数量。 与一 个或多个描述符链接的一个或多个偏移量可以包括具有可变尺寸的输入偏移量。 该可变尺 寸可以取决于数据块表示的数据的数量。一些实施例还可以包括标识输出偏移量。 0041 本文描述的计数包括若干可变长度编码格式以及可以允许使用非常快速的解码 方法的解码方法和系统。在一些情况中, 这些格式还可以。
21、允许更大的数据压缩。虽然一些 实施例可能是针对搜索引擎收录列表来采用的, 但是本文描述的技术可以用在其中紧密地 存储数字列表或其他数据集以及高效地将其解码是有益的的其他场合中, 如采用数据库的 情况中。 0042 多个实施例可以提供多种优点, 包括但不限于避免了可能与使用深流水线的一些 处理器中的深流水线的效益相干扰的分支。多个实施例可以比常规可变长度编码和解码 中的情况更频繁地读和写数据, 包括在一些情况中读未对齐的数据 (而非在对象尺寸边界 上) , 而非判断需要读多少。一些实施例可以采用将可能解码的选项预先编译并将该信息存 储在一个或多个表中。一些实施例可以使用单指令多数据 (SIMD)。
22、 指令并行地对多个字节 操作。一些实施例可以采用 SIMD 指令, 如类似封包整理字节 (PSHUFB) 的整理指令。一些 实施例可以采用包括有关数据的长度信息的描述符位和 / 或描述符字节。 0043 提供用于更高效地将标准格式解码的方法。该格式可以称为 varint-SU : 它包括 可变长度整数编码 (varint) , 其具有所编码的整数的长度的拆分 (S) 一进制 (U) 表示。该方 法可以采用并行处理来用于将此格式解码, 其具有即使无法按自然机器次序存储压缩的字 节仍有效的变化。 多个实施例可以一次对编码的数据的一组字节操作。 在一个实施例中, 一 次操作 8 个字节的块。该方法可。
23、以包括并行地提取或收集描述符位, 这些描述符位可以是 连续位和终止位。在一些实施例中, 此提取或收集过程使用封包移动掩码字节 (PMOVMSKB) 指令。该方法可以使用提取的位作为预先计算的整理序列的表中的偏移量。如 PSHUFB 的 并行排列指令可以使用此整理序列来确定如何将该数据解码。 可以执行一系列的位移位操 作以从解码的数据中移除初始连续和 / 或终止位。 0044 在一些实施例中, 提供编码格式连同解码方法, 其涉及封包一进制 (PU) 表示。此 格式可以称为varint-PU。 在一些情况中, 这可以包括将连续位和/或终止位移入能够在第 一个字节发现的单个描述符中。这样可以允许数据。
24、位被连续地存储在存储器中, 这可以使 得更高效地解码成为可能。 说 明 书 CN 103582883 A 6 4/32 页 7 0045 在一些实施例中, 提供用于将作为块存储的一组编码的整数解码的方法。该格式 可以包括组二进制 (GB) 表示, 在一些实施例中可以称为 varint-GB。在一些情况中, 此方法 可以采用如 PSHUFB 指令的整理指令以并行地将多组数据字节解码。整理序列从描述符类 型的值指定的表中获取。 0046 在一些实施例中, 同时提供用于多组整数的编码格式和解码方法。 在一些情况中, 此格式可以包括可包括组一进制 (GU) 表示的格式。例如, 对于一组 8 字节整数 。
25、(潜在地不 完整) , 该格式可以称为 varint-G8IU, 具有一进制长度编码。 0047 本文给出另一个编码格式为 varint G8CU, 其表示具有一进制长度编码的一组 8 字节信息 (每个完整) 。Varint-G8CU 一般是指编码期间整数或数据未刚好填入块中的剩余 空间时的情况。 在该情况下, 可以将数据的第一部分存储在当前数据块中, 以及可以将该数 据的剩余部分转移存储在下一个块中。多个实施例可以包括解码方法, 这些解码方法包括 将块之间的进位纳入考虑的表。 0048 在一些实施例中, 提供可变长度编码格式的变体, 其包括采用上述压缩方案的至 少其中之一连同位向量来节省空间。
26、的混合。在一些实施例中, 该可变长度编码格式可以包 括组一进制格式。 多个实施例可以包括检测要编码的即将到来的整数或数据的序列是否非 常小, 从而可以将这些整数或数据的多于一个整数或数据编码到一个字节中。可以将这些 整数或数据作为位向量来存储。例如, 第 n 位可以表示在位置基 +n 处的文档是否在收录列 表中。 特殊描述符值可以指示该组数据字节是否应该解释为使用可变长度整数格式之一还 是解释为位向量。 0049 在一些实施例中, 提供可变长度编码格式的变体, 其包括压缩方案和行程长度编 码的混合以便节省空间。 多个实施例可以通过存储行程的长度而非值本身来将一个行程的 相似数据编码, 如全部 。
27、1 的一个行程。 0050 采用组格式之一的实施例可以容易地扩充到更大的组, 并且这可以对可提供更宽 并行性 (例如, 256 位寄存器) 的处理器提供附加的效率增益。 0051 图 1 图示用于实施根据多种实施例的多个方面的环境 100 的示例。正如将认识到 的, 虽然出于解释的目的而使用了基于 Web 的环境, 但是也可以在适合的情况下使用不同 环境来实施多种实施例。电子客户端装置 102 包括可操作以通过适合的网络 104 发送和接 收请求、 消息或信息以及将信息送达回用户的装置的任何适合装置。此类客户端装置的示 例包括个人计算机、 蜂窝电话、 手持消息传送装置、 膝上型计算机、 机顶盒。
28、、 个人数字助理、 电子书阅读器等。 该网络可以包括任何适合的网络, 包括内联网、 因特网、 蜂窝网络、 局域网 或任何其他此类网络或其组合。用于此类系统的组件可以至少部分地根据所选的网络和 / 或环境的类型而定。用于经由此类网络通信的协议和组件是众所周知的, 并且在本文将不 予以详细论述。通过网络的通信可以通过有线或无线连接及其组合来实现。在此示例中, 该网络包括因特网, 因为环境包括用于接收请求并对此响应提供内容的 Web 服务器 106, 虽 然对于其他网络, 可以如本领域技术人员所显见的, 使用提供类似目的备选装置。 一些实施 例可以采用单个电子客户端装置 102。 0052 该说明性。
29、环境包括至少一个应用服务器 108 和多个资源、 服务器、 主机、 实例、 路 由器、 交换机、 数据存储和 / 或给予本文中将称为数据面 110 定义的其他此类组件, 当然应 该理解此数据面的资源不限于存储数据和提供对数据的访问。应该理解, 可以有若干个应 说 明 书 CN 103582883 A 7 5/32 页 8 用服务器、 层或其他元件、 过程或组件, 它们可以链接或以其他方式配置, 并且可以交互来 执行如从适合的数据存储获取数据的任务。正如本文所使用的, 术语 “数据存储” 是指能够 存储、 访问和检索数据的任何装置或装置的组合, 其可以包括任何标准、 分布式或集群式环 境中的任何。
30、组合和数量的数据服务器、 数据库、 数据存储装置和数据存储介质。 该应用服务 器可以包括用于按执行客户端装置的一个或多个应用的多个方面所需而与数据存储集成、 处理应用的数据访问和商业逻辑的大部分的任何适合的硬件和软件。 该应用服务器与数据 存储协同来提供许可控制服务, 以及能够生成如文本、 图形、 音频和 / 或视频的内容以传输 给用户, 在此示例中, 可以通过 Web 服务器以 HTML、 XML 或另一个适合的结构化语言的形式 将这些内容提供给用户。在一些实施例中, Web 服务器 106、 应用服务器 108 和类似组件视 为数据面的一部分。处理所有请求和响应以及在客户端装置 102 和。
31、应用服务器 108 之间的 内容交付可以由 Web 服务器来处理。应该理解, Web 和应用服务器并非必需的而仅仅是示 范组件, 因为结构化代码可以在任何适合的装置或主机机器上执行, 正如本文其他地方所 论述的。 0053 数据面的数据存储 110 可以包括用于存储与特定方面相关的数据的若干分开的 数据表、 数据库或其他数据存储机构和介质。例如, 图示的数据面包括用于存储生产数据 112和用户信息116的机构, 其可以用于为生产端提供内容。 该数据面还示出为包括用于存 储日志数据 114 的机构, 日志数据 114 可以用于如报告和分析之类的目的。应该理解, 可以 有可能需要存储在数据存储中的。
32、许多其他方面, 如用于页图像信息和访问权信息的方面, 可以根据情况将其存储在任何上文列出的机构中或存储在数据面 110 中的附加机构中。数 据面110可通过与之关联的逻辑操作以从应用服务器108接收指令, 并对此响应以获取、 更 新或以其他方式处理数据、 指令或其他此类信息。 在一个示例中, 用户可以提交针对某种类 型的项目的搜索请求。 在此情况中, 数据面的组件可以访问用户信息以验证用户的身份, 并 且可以访问目录细节信息以获取与该类型的项目有关的信息。 然后可以将该信息返回给用 户, 如在用户能够通过用户装置 102 上的浏览器查看的 Web 页面上列示的结果。可以在浏 览器的专用页面或窗。
33、口查看所关注的特定项目的信息。 0054 每个服务器通常将包括操作系统, 操作系统提供该服务器的常见管理和操作的可 执行程序指令, 并且通常将包括计算机可读介质, 计算机可读介质存储在被服务器的处理 器执行时使服务器能够执行其需要的功能的指令。 服务器的操作系统和常见功能性的适合 实现是众所周知的或可通过商业渠道获取的, 并且尤其根据本文公开, 被本领域技术人员 容易地实现。 0055 一个实施例中的环境是分布式计算环境, 其采用若干个计算机系统和组件, 这些 计算机系统和组件使用一个或多个计算机网络或直接连接经由通信链路互连。但是, 本领 域技术人员将认识到, 此类系统在具有比图 1 所示更。
34、少或更多数量的组件的系统中同样能 够很好地工作。因此, 图 1 中的系统 100 的图示应该被视为本质上是说明性的, 而非对本发 明披露范围的限制。 0056 如图 1 所示的环境对于如多种内容提供商或其他此类实体可以是有益的, 其中可 以使用多个主机和多种类型的资源来执行如提供内容、 认证用户、 分配资源的任务, 或执行 任何多种其他此类任务。这些主机的其中一些可以配置成提供相同的功能性, 而另一些服 务器可以配置成执行至少一些不同的功能。 说 明 书 CN 103582883 A 8 6/32 页 9 0057 多种实施例提供多种可变长度编码的方法。一些实施例可以包括面向字节的编 码。面向。
35、字节的编码包括如下属性。自然二进制表示的所有有效位均被保留。每个字节包 含仅来自一个整数或数据的位。 编码的单个字节内的数据位保留它们在原始数据或整数中 所具有的排序。 来自单个整数或数据的所有位优先于来自下一个整数或下一个数据的所有 位。 0058 编码的面向字节的格式可以因维数变化而有所不同。例如, 可以采用二进制或一 进制来表示数据或整数的长度。在一些情况中, 可以将表示数据或整数的位与对应整数或 数据的数据位相邻来存储, 以使一些数据字节兼有地包含数据和长度信息。 在一些情况中, 可以将表示若干整数或数据的长度的位一起分组在与包含数据位的字节不同的一个或多 个字节中。 0059 在一些。
36、实施例中, 可以将一进制或二进制表示或格式的位连续地封包或分组。还 可以将一进制表示的位拆分到编码的整数或数据的多个字节上。在一些情况中, 可以将二 进制表示拆分到编码的整数或数据的多个字节上。在一些实施例中, 用于表示一个或多个 编码的整数或数据的长度的位集称为描述符, 因为它可以描述数据位是如何组织的。可以 将描述符设为与数据位相连。在一些情况中, 可以将描述符设为不与数据位相连。 0060 在一些实施例中, 每个编码的整数或数据可以包括至少一个字节。二进制和一进 制描述符都可以通过记录值 n-1 来表示整数或数据的长度 n。这减少了表示给定长度所需 的位的数量。作为备选, 整数或数据的长。
37、度可以包括将长度存储为 n, 这可以允许长度零来 表示零数据字节的任意常数。 0061 可以采用上文论述的多个方面来提供对不同面向字节的编码格式的描述。 这些方 面可以用于将能够以四个字节或更少字节编码的整数编码。但是, 一些情况一般可以扩充 到覆盖编码数据。而且, 这些编码原理还可以用于例如数据和 / 或整数可能包括多于四个 字节的情况。 0062 下文描述用于不同可变长度编码的若干不同实施例。 在本发明披露的范围内可以 构造另外的实施例。一般, 多个实施例可以包括可具有不同长度的编码的值。可以将这些 长度编码在一个或多个描述符中。可以采用两个属性来描述不同编码类型的描述符。第一 个描述符属。
38、性可以包括安排描述。描述符的安排描述可以称为拆分、 封包或组。如上文提 到的, 拆分描述符可以包括将提供长度信息的描述符的位分布在也包括有关一个或多个整 数或数据的信息的若干字节之间。封包描述符可以指封包在一起的描述符位。在一些实施 例中, 封包描述符可以优先于相应的整数或数据的编码。组描述符可以包括将若干整数或 数据的描述符分组在一起。 0063 第二描述符属性可以包括长度编码描述。一些长度编码描述可以是一进制的, 采 用个别位, 而一些长度编码描述是二进制的, 采用两个位。 基于所关注的编码的整数或数据 的长度, 一些实施例可以采用更多的位。 0064 这些格式的其中一些有可在不同实施例中。
39、发现的多种变体。可以按小端或大端 顺序存储编码的数据的字节, 这是本领域中公知的技术。可以将描述符位存储在最小有效 (LS) 或最高有效位 (MSB) 中。虽然这些选择有时描述为任意约定, 在实践中, 可能存在一些 效率上的考虑, 以产生对于某些机器体系结构具有吸引力的某些变体的效率考虑。 例如, 在 拆分一进制表示 (如下文论述的) , 在最高有效位中将终止表示为 0 可以允许一个字节整数 说 明 书 CN 103582883 A 9 7/32 页 10 的常见情况能够不采用任何移位或掩码而进行解码。 在其他示例中, 对于封包表示, 使用最 小有效位来获益于非对齐加载从而将数据位保持在一起是。
40、有益的, 。虽然在表示保留原有 的字节排序时, 传统解码方法可以更有效率地运行, 但是, 本文披露的 SIMD 方法的性能可 以不依赖于排序。 下文示例一般将包括小端顺序, 但是, 可以根据本文所描述的来调适大端 顺序。例如, 采用封包编码 (如下文论述) , 可以将描述符存储在最小有效位并移位以获得具 有最小端机器的数据。对于大端机器, 可以将用于封包编码的描述符存储在最高有效位和 掩码中以获取数据。此外, 在一些实施例中可以扫描描述符中的 1 和 0 的读数。 0065 一些实施例可以对描述符采用一进制表示。 对于一进制格式, 可以采用自然约定, 其中可以通过连续 1 位的数量来表示数量 。
41、(其可以称为连续位) , 后接终止 0 (称为终止位) 。 一些实施例可以反向使用此约定, 使用连续0位, 后接终止1。 在一个实施例中, 采用自然约 定以及从最低有效位开始, 例如位 0111 可以表示数字 3。 0066 在一些实施例中, 拆分一进制格式可以视为表示在连续和 / 或终止位的序列中编 码的整数或数据的长度。描述符位可以视为分布式连续位, 其中每个字节中的位可以表征 连续或终止。例如, 三个字节整数编码可以看上去如下 : 0067 1xxxxxxx 0068 1xxxxxxx 0069 0xxxxxxx 0070 注意, 前导位可以形成一进制数 2, 表示长度 3。在一些实施例。
42、中, 这可以称为 Varint-SU, 因为它是具有拆分在若干字节上且以一进制表示的长度信息的整数的可变长 度表达。在一些实施例中, 拆分一进制表示可以使用最高有效位作为连续或终止位。这可 以使实施例对于终止字节的情况能够避免移位。对于编译器来说, 这还可以允许使用符号 校验以测试该位。但是, 一些实施例可以将字节的最低有效位用于连续位或终止位。 0071 图 2A 提供 8 位组成的字节的拆分一进制表示的实施例示例, 其中描述符位 210 设 在最高有效位 (MSB) 以及七个数据位 220 设在字节的其余位中。图 2B 提供可以使用拆分 一进制表示来表示整数 123456 的示例, 其中如。
43、果表示接续下一个字节, 每个字节在每个字 节中 MSB 或其余最左位 (例如 211 和 212) 中包括 1, 以及如果达到整数的结尾, 则在 213 中 包括 0。 0072 一些实施例可以包括描述符的封包一进制表示。在一些实施例中, 这可以称为 Varint-PU, 并且可以与 varint-SU 相似, 但是其中将描述符位封包在一起。封包位可以收 集在第一个字节的低阶位中而非拆分在所有字节上。 选择低阶位来保存描述符对于小端编 码或小端体系结构是适合的, 这是本领域中公知的, 从而一个整数的所有数据位均是连续 的。 出于相同的原因, 在大端体系结构上, 将描述符置于高阶位并使用大端编码。
44、对于解码可 能更有效率。图 3A 提供封包一进制表示的实施例的一个示例, 其中 n 个描述符位一起被封 包在最低有效 (LS) 位 310 中, 其中将 7n 个数据位封包在最高有效位 320 中。这提供小端 体系结构的示例。对于大端体系结构, 描述符位可以被置于最高有效位中。表 330 提供如 何采用 n 个描述符位来表示数据位中的字节的数量的四个示例。图 3B 示出数字 123456 的 封包一进制表示的示例, 其中前 3 个低阶位 011311 表示该数字涉及 3 个字节 321 的信息。 0073 多个实施例还可以包括组一进制表示, 下文对此予以更详细论述。 0074 多个实施例可以采。
45、用描述符的封包二进制表示。例如, 可以保留第一个字节的两 说 明 书 CN 103582883 A 10 8/32 页 11 个位来指示以二进制编码的整数或数据的长度。图 4A 提供其中采用两个描述符位 410 连 同多达 30 个数据位 420 的实施例示例。表 430 提供如何采用两个描述符位 410 来表示数 据位中的数量的四个示例。一些实施例可以采用更多或更少的数据位。图 4B 提供可以如 何采用封包二进制表示来将 123456 编码的一个示例。要表示 123456 涉及 17 个数据位, 这 多于 16 位 (即, 两个字节) 和少于 25 位 (即, 3 个字节) 。因此, 两个描。
46、述符位 411 表示对这 些数据位提供三个字节 421。在此情况中, 描述符位 411 将 3 个字节的长度表示为 10。 0075 其他实施例可以采用其他表示。例如, 在一些情况中, 可以采用拆分二进制表示, 其中可以将二进制描述符位拆分到若干字节上以用于给定的整数或数据表示。 一些实施例 可以包括组二进制表示, 下文对此予以更详细论述。 0076 在描述符长度可预先固定的情况中, 一些实施例可以采用二进制长度描述符。虽 然本文描述的实施例一般涉及以固定长度示出的二进制格式, 但是一些实施例可以采用附 加的元数据来存储描述符长度本身。此外, 一些实施例可以包括拆分固定长度的 k 位二进 制描。
47、述符 (每个字节一个位) , 这可以得到可能需要至少 k 个字节的面向字节的整数编码。 0077 一些编码格式可以将若干整数或数据分组在一起。这可以提供采用 SIMD 并行性 的机会。 一些实施例可以包括满足保留字节的面向字节的编码属性的编码, 其中包含原 (未 编码的) 整数或数据中的有效位的每个字节不修改地出现在编码的形式中。 0078 采用组编码的实施例可以包括从数据字节中分离出描述符字节。在一些实施例 中, 组格式中将描述符字节与数据字节分离可以能够实施更有效率的解码。这种分离能够 通过表的使用来简化解码过程。 但是, 封包和拆分表示也可以从表的使用获益, 正如下文更 详细描述的。 在。
48、一些实施例中, 组格式可以避免按位操作, 这在另一方面对于消除散布的描 述符位可能是必要的。具体来说, 采用字节保留编码的实施例可能尤其更易于采用 SIMD 技 术解码, 下文对此予以更详细的描述。 0079 图 5A 图示组二进制格式字节排序的示例。在图 5A 的示例中, 字节排序包括一组 四个整数 (520-a、 520-b、 520-c和520-d) , 包含四个2位二进制数的描述符字节510位于该 组之前。每个 2 位二进制数表示对应的整数的长度 (例如, 从右向左读, 第一个 2 位数表示 整数 0520-a, 接下来的 2 位数表示整数 1520-b 并以此类推) 。图 5A 所示。
49、的此格式一般可以 称为 varint-GB 格式。 0080 图 5B 示出可以使用组二进制格式以小端字节顺序表示四个十六进制数 0xAAAA521-a、 0xBBBBBB521-b、 0xCC521-c、 0xDDDDDDDD521-d。四个整数对应地占据 2 个字 节、 3 个字节、 1 个字节和 4 个字节。描述符字节 511 由 2 位二进制值 n-1 表示每个字节的 长度 n。使用此示例, 图 5B 所示的描述符字节 511 分别包括值 01、 10、 00 和 11(从右向左 读) 。01 表示整数 0xAAAA521-a 的 2 字节长度 ; 10 表示整数 0xBBBBBB521-b 的 3 字节长度 ; 00 表示整数 0xCC521-c 的 1 字节长度 ; 11 表示整数 0xDDDDDDDD521-d 的 4 字节长度。为了 在描述符位和数据字节之间保持一致性的顺序, 一些实施例可以将第一个二进制长度存储 在最低有效位中。由。