发明概述
提供本概述是为了用简化的形式介绍将在以下详细描述中进一步描述的一些概念。本概述并不旨在标识要求保护的主题的关键特征或必要特征,也不旨在用于确定要求保护的主题的范围。
对经网络分布内容进行编码的方法连同与对这些经网络分布的编码内容进行解码的方法一起描述。
第一示例提供了一种对经网络分布的内容进行编码方法。分布的内容被分为多个段,且每个段又包含多个数据块。此方法包含以下过程:从多个段中选择一个段、从一个块存储中选择所选段的至少两个块、以及从所选的至少两个块的线性组合创建新的经编码块。
这就有利地导致大大节省编码时间和处理要求,因为为了对内容编码,只需要将来自同一段的那些块读入存储器。
选择一个段的步骤可包括一个选择所有多个段的不频繁但周期性的步 骤。这样做的优点是通过创建少量的块用来代替来自任何段的块,缓解了稀有块的问题。
选择一个段可以包括随机地从多个段中选择一个段。
选择一个段可包括根据一指定的顺序从多个段中选择一个段。
选择至少两个块的步骤可包括从块存储的所选段中选择所有可用块。
在一个示例中,每个段都可包含有多个未经编码的块;并且选择至少两个块可包括:从已编码块存储的所选段中选择至少两个编码块;并且创建新编码块包括:从所选的至少两个编码块的线性组合创建新的编码块。
例如,选择至少两个编码块可包括:为一个新编码块选择一个目标级数(degree),其中新编码块的级数是从中创建该新编码块的未编码块的数量;尝试从编码块存储的所选段选择至少两个编码块来创建一个新的编码块,使得新块的级数不超过目标级数;如果尝试失败,则使目标级数递增1,并重复该尝试步骤;如果尝试成功,则创建其级数不超过目标级数的新编码块。
该方法还可包括存储新的编码块。
新的编码块例如可以利用预先计算的查找表来创建。其优点在于减少了处理时间和负荷,因为其没有进行计算而是在预先计算的表格内执行查找。
第二示例提供了对经网络分布的内容进行编码的方法,其中内容被分为多个未经编码的数据块。此方法包括为新编码块选择目标级数,新编码块的级数定义为从中创建新编码块的未编码块的数量。此方法还包括尝试从编码块存储中选择多个编码块以创建其级数不超过目标级数的新编码块。如果此尝试失败,目标级数递增1并重复该尝试该步骤。然而,如果尝试成功,则从所选的多个编码块的线性组合创建新的编码块。
这种编码方法的好处是在仍保有网络编码优点的同时维持了矩阵的稀疏性。这就降低了复杂性从而减少了解码内容所需的处理时间和处理负荷。
在一个示例中,所选的多个编码块包含了能够从中创建级数不超过目标级数的新编码块的最大数量的所选编码块。
该方法还可包括存储新的编码块。
新的编码块例如也可使用预先计算的查找表来创建。
第三示例提供了一种对经网络分布的内容进行编的码方法,其中内容被分成多个数据块。该方法包括从网络上块存储中选择多个块,从所选块的线性组合来创建新的编码块并存储该新的编码块。
这样有利地减少了节点用来形成新编码块必需执行的读操作次数,从而缩短了编码块所花的时间。
新编码块例如可存储在高速缓存中。
在一个示例中,新编码块可被存储一段预定的时间。
块存储可包括位于节点主存储器中的第一部分和位于节点高速缓存中的第二部分。
新的编码块可使用预先计算的查找表来创建。
再一个示例提供了对经网络分布的内容进行编码的方法,其中被创建并发送到网络上另一个节点的新编码块保持在高速缓存中。因此,被高速缓存的编码块可用于再次创建经网络分布的内容的另外的新编码块。
另一个示例提供了一种对从网络上以多个编码块的形式收到的内容进行解码的方法。该方法包括使用消息传递技术来解码和简化从接收到的编码块的系数向量所形成的矩阵。然后对所得矩阵使用矩阵求逆来完成解码过程。
这样通过在执行处理器密集的矩阵求逆前先尽可能化简矩阵就有利地减少了解码过程中的解码时间和处理负荷。
另一个示例提供了一种对从网络上以多个编码块的形式收到的内容进行解码的方法,其中原始内容被分成一些段。此方法包括将收到的与特定段相关的所有的块读入存储器,然后并行地对这些读入的块进行解码。
这种方法的好处是大大节省了解码的时间并降低了处理负荷,因为为了解码内容,只有来自单个段中的那些块才需要读入存储器。另一个好处是它减少了解码过程中所需的处理器操作的次数,因此减少了解码时间和处理器负荷两者。
再一个示例提供了一种对从网络上收到的内容进行解码的方法,收到的内容包括多个经编码的块。这种方法涉及将每一个收到的编码块的一小 部分读入存储器,然后在将每个编码块的下一部分读入存储器之前,并行地对读入的部分进行解码。
这样就通过预先载入所需的下一部分而有利地实现了高效率并且允许需计算机的操作系统帮助准备解码过程。这缩短了解码过程中的延迟,从而缩短了总的解码时间。
该些方法可利用包括计算机程序代码装置的计算机程序来实现,当所述程序在计算机上运行时适合执行上述任何方法的所有步骤。该计算机程序可在计算机可读介质上具体化。
本文描述的各方法可由存储介质上具备机器可读形式的软件或固件执行。软件或固件能够适于在并行处理器或串行处理器上执行,使得本方法的各步骤可以按任何合适的次序或同时开展。
这里承认软件能够是有价值的、可以单独交易的商品。它旨在包含运行于或者控制“哑(dumb)”或者标准的硬件以实现期望的功能的软件。它还旨在包含“描述”或者定义硬件配置的软件,例如HDL(硬件描述语言)软件,用于设计硅芯片,或者用于配置通用可编程芯片以实现期望的功能。
许多伴随特征将随着参考下面的详细描述并结合附图进行理解而得到更好的认识。
详细描述
下面结合附图提供的详细说明旨在作为本发明的例子的描述,但是并不旨在表示可以构造或者使用本例子的仅有的形式。该描述阐述本示例的功能以及用于构造和操作本示例的步骤序列。然而,相同或等价的功能与序列可由不同的示例来完成。
在对等体辅助的内容分布系统中,为了减少节点在编码和编解码过程中所涉及的读/写操作的次数,可使用多个编码和解码处理的优化。这些优化降低了节点上的处理负荷,并且减少了编码或解码块所花的时间。
在第一编码优化示例中,文件被分成多个段,每个段包括多个块,如图2示意性地示出。图2示出了文件200被分成3个段201-203,每段包括5个块。这仅是为了举例,通常块的数量可能远大于段的数量(例如,一个段内有20-30个块,或者一个段为100-200兆字节而一个块为1-10兆字节)。如图3和4所示,编码块由节点400产生为来自特定段的其保有的所有块的线性组合。首先选择一个段(步骤301),编码新的块(步骤302),然后应请求将新的编码块传递到另一节点(步骤303)。接着,选择另一个段(步骤301),编码另一个新块(步骤302)并将其传递到另一节点(步骤303),且这一过程继续。段选择操作(在步骤301中)可以根据已定义的顺序(例如,A段,然后B段,再A段等)进行,也可以随机地或者按照任何其它准则(例如在相邻段中选择最稀有的段)执行。在执行图3中编码和传送的操作的同时,节点也可从网络上其它节点接收(经编码的或未经编码的)块(步骤401-403)。
根据已定义的顺序或使用随机选择选择要编码的段,加之块的数量远远多于段的数量的事实,会导致网络中所有段都可用而没有特别稀有的段。然而,为了进一步有助于避免稀有段问题,可以通过从文件的所有段中的 所有块进行线性组合来产生一些编码块。这种从所有段产生一块的情况是一个不频繁但周期性的事件(比如,在过程的每第100次迭代时产生)。这些编码块因而可用来替代文件中任何段一块。这可通过在选择下一块的指令序列中包含这样一条指令(在步骤304中)来实现,或者在随机段选择步骤中对所有段的选择指定一个小的概率来实现。
通过使用这种编码优化技术,为了进行编码一个块,一节点仅仅需要把来自单段的所有块读入存储器,而不用读入其从整个文件接收到的所有块。这样就大大节省了时间和处理能力,例如在一个段包括30个块而文件却由3000个块组成的情况下。
尽管以上描述参考了其中描述了一个编码块是作为来自一特定段的在节点处本地保存的所有块的线性组合而产生的图3和4,但是在另一示例中编码块可通过来自一特定段内在节点处本地保存的两个或多个块的线性组合而产生。用来形成编码块的块数可以是固定的或者是根据指定准则而变化的,或者作为替代在另一个示例中,可以随机选择所选块的数量。
在第二编码优化示例中,保有整个文件的服务器产生各稀疏编码块。稀疏块被定义为具有较少数量非零元素项的块。服务器所产生的编码块是来自文件的i个随机块的线性组合,其中选择i个块的概率由p(i)给出,其p(i)可以是1/i,指数分布或者两项式分布等。图5示出了在服务器处编码过程的流程图。首先,选择i(步骤501),然后从文件的所有块中随机地选取i个块(步骤502),并用于产生新的编码块(步骤503)。新的编码块被发送到网络上的某个节点(步骤504),然后选择一个新的i值(步骤501)并重复所述过程。使用这种分布方式,服务器偏向于选择少量的块来用于编码新的编码块,但是服务器偶尔也将用较大量的块来编码一个块。这些大i的新编码块,充当与上面参照第一示例描述的从所有段编码块相同的作用,并且降低了与某个特定块有关的信息在网络中是稀有的机会。
在这样的示例中,网络中的节点可以不再重编码内容,从而保持网络的稀疏性,但失去了网络编码的某些好处,或者也可使用一些规则对内容进行重编码来确保块保持稀疏编码。参考图6和图7描述了可以保留稀疏性的示例过程。图6示出了示例流程图600而图7示出了两个节点701和 702的示意图,其中每个节点当前各自保有来自同一个原始文件(由6个块组成)的多个编码块703-707,708-711。原始块用字母A-F标记,编码块703-711内的字母指示这些编码块是从哪些块产生的,例如块703是原始块A和块B的线性组合。
节点首先选择一个目标级数i(步骤601),其中块的级数定义为从中形成编码块的原始块的数量(例如块703的级数i=2)。节点然后尝试选择它当前保有的块的一个子集,使得新编码块将具有级数f,其中f≤i(步骤602)。如果这条件不可能满足,节点选取一子集使得新编码块将具有接近最高可能的级数(步骤603)。选择了块的子集(步骤602或603)以后,节点从所选的子集编码一新块(步骤604)。然后重复上述步骤。较佳地节点选择尽可能多的块形成子集部分,同时不超过目标级数。例如,如果目标级数设定为2,节点1701(图7中)可选择3个块,即块703、706和707,来形成子集。从这三个块产生的新编码块将具有级数2,因为它是原始块A和块B的线性组合。然而,节点2702不能选择块的一个子集来满足目标阶级数2。作为替代,将必须选择一个带有级数3的子集(根据步骤603);该子集包括两个块,即块708和711,每个块是原始块A、B和C的一个线性集合。
在上面关于节点2702的示例中,各自包括原始块A、B和C的线性组合的两个块被组合以形成A、B和C的一个新线性组合。较佳地,组合这两个块并将这些块发送给一个新节点,因为如果接收节点已经具有了其中的一个块(如,块708),则该新块将提供此结点的新信息,而再次发送相同的块对接收节点而言是没有用的。
在以上描述的示例中和已知系统中,一旦新的编码块由一节点创建并被发送到另一节点,就不再存储与那个新编码块有关的信息。然而,在第三编码优化的示例中,已经由一节点产生的一些编码块被高速缓存并再次使用。这是很有利的,因为减少了节点为了产生要发送到系统内另一节点的编码块所必需之执行的读操作的次数。术语“高速缓存”是用来描述与处理单元相关联的、其操作速度比节点的主存储器更快的高速存储缓冲器。图8中的示例流程图描述了这个优化过程。一个示例节点已接收到两个块 A和B,初始读入这两个A块和B块(步骤801和802)并创建块A和B的线性组合的新编码块AB(步骤803)。该新的编码块AB被发送到网络中另一个节点(步骤804)并在此节点处高速缓存(步骤805)。当该节点接着需要创建新的编码块发送到网络中另一节点时,这个节点在其高速缓存中已有块AB,并可以决定是再次发送该块还是将它与一个或多个已经收到的块进行组合。在这个示例中,节点读取块B(步骤806)并使用块B和先前高速缓存的块AB创建新的编码块ABB(步骤807),然后将新的编码块ABB发送到网络中的另一节点(步骤808)。如前述,节点可以在高速缓存中保留块ABB(步骤809)或者也可不在高速缓存中存储有关该块的信息。如果节点在高速缓存中存储了块ABB(如图8所示),则在随后的步骤中节点可以使用高速缓存的块AB和ABB来创建新的编码块,而不需要执行任何附加的的读操作。可在高速缓存中保有的编码块的数量受高速缓存容量的限制,高速缓存容量比节点主存储器容量要小的多,其中节点主存储器存储了关于所有接收到块的信息。
在上述编码步骤中和已知的方法中,与创建块的线性组合相关联的用来形成新编码块的算术运算需要耗费大量的时间。然而,由于算术运算在也被称为伽罗华域(典型地是216,但是潜在地可以小很多,例如256)有限域内进行,因而第4编码优化的示例涉及预先计算所有可能的算术运算结果,这将算术运算简化为单个查表操作。在一个非常简单的示例中,要计算以下的运算:
5×100
这也可用以下四个步骤计算:
100+100=200
+100=300
+100=400
+100=500
或者如图9所示,也可以由一次查表操作来完成。
在另一个示例中,有限域(或伽罗华域)中两个数的乘法运算可以用三个查表步骤来完成。可以使用如下的等价运算来实现乘法:
A=B·C
log A=log B+log C
exp(log A)=exp(log B+log C)
A=exp(log B+log C)
这个乘法然后可化简为下面两个表中的三步查表的操作(其中有限域216 仅作为示例):
logTable(对数表)=65536(=216)个元素的向量,包含域中每个数的对数值(从0到65536每一个数的对数)。
expTable(指数表)=131072(=2×216)个元素的向量,包含有限域内的每一个数加上下216个数值的指数(0到131072的每一个数的指数)。
于是这个乘法运算可以如下执行:
function Mult(B,C)
Temp=logTable[B]+logTable[C]
return expTable[Temp]
以上描述涉及的编码优化可用来降低编码新数据块以供传输至网络中其它节点所需的处理负荷和时间。上述优化的每一项可以独立于其他项使用,也可以替换地组合使用两种或多种优化技术来进一步增进编码过程的优化。
上述编码优化的一些或全部还可改进解码过程,例如,一个稀疏编码块(见上述第二示例)会比密集填充的编码块更容易解码,并且级数较小的编码块会比级数较大的编码块更容易解码。此外,还可使用与所用的编码优化正交地操作的解码优化,这也有助于减少解码过程中所要求的读/写操作的次数。
存在有许多已知的解码技术,包括矩阵求逆和消息传递。这些技术可以应用于从每个收到编码块的系数向量所形成的矩阵(在此被称为系数矩阵)。例如,一个节点已经收到了与包含3个原始块的文件相关的3个编码块,则可随编码块接收以下的系数向量:
第一个收到的系数向量:[6,90,52]
第二个收到的系数向量:[18,2,128]
第三个收到的系数向量:[231,93,287]
这三个向量可以写成3×3的矩阵(系数矩阵):
(6 90 52)
(18 21 28)
(231 93 287)
矩阵求逆可能很复杂,但是在所有情况下(只要矩阵是满秩的)求逆是可能的。消息传递算法,又被称为置信传播算法及和-积算法能够简化矩阵,但是由于渐进式迭代求解可能失败,所以并不总是可行。
在第一解码优化示例中,如图10所示结合上述两种解码技术。首先,从节点所接收到的所有编码块中标识那些级数i较小的编码块,即那些来自原始文件的较少数目(i)的未编码块的线性组合产生的编码块(步骤1001)。然后,使用一种保留了矩阵稀疏特性的诸如消息传递的技术对这些被选中的块进行尽可能地解码(步骤1002)。尽可能地化简矩阵后,在部分或者整个矩阵上使用矩阵求逆来完成解码过程(步骤1003)。
一个解码过程的例子描述如下。设有下列矩阵:
其中矩阵中的各元素项是编码系数。第一步,标识第二行含有单个非零元素,从矩阵的其它行消去此行得到如下矩阵:
此次化简产生了一个新的只含单个非零元素的行(即第一行)。从矩阵中剩下的部分消去此行得到:
目前矩阵的最下面部分不能进一步化简,因此执行矩阵求逆得到如下最终的矩阵:
在算法的每一步中都会有下面两个事件发生:系数矩阵的化简,以及,编码内容的更新。结果,在算法结束时,原始信息已被恢复。
图10中的解码过程可以在节点已收到要求数量的块时开始,并且节点已停止进一步接收块。这样做可能是有利的,因为它允许矩阵的化简(在步骤1002中)在具有尽量多的信息基础上大规摸地进行。这使得矩阵求逆过程(步骤1003)更简单。
作为替换,如图11的示例性流程图所示,解码过程在节点在继续接收附加块的同时开始。当节点收到每一个新块后(步骤1101)时,它决定此接收块(可能是编码块)能否用来解码其它块(步骤1102)。如果新收到的块被确定不允许任何解码,节点将等待接收下一个块(步骤1101)。但如果新接收的块确实能够用来进一步解码,则开始解码(步骤1103)。当解码阶段不能再进行下去时,则节点确定解码是否完成(步骤1104),如果没有完成,节点等待下一个能够帮助解码的块的到来(步骤1101)。一旦所有块被解码,该过程停止(步骤1105)。解码过程(在步骤1103中)可参照图10使用上面描述的技术或任何其它合适的解码技术。与接收块并行地解码是有益的,因为此时解码的代价(在时间上和处理负荷上)在时间上被分散并且还因为解码开始地较早,其结束也应较早。
有许多算法可以用来确定接收到的块是否能用来解码其它块(步骤1102)。在第一示例中,节点确定接收到的新块是否仅从原始文件中的单个块(例如,块A)编码而得。如果是,则搜索系数矩阵以确定级数为2的且其中两个块之一是块A的编码块,例如块A&B。根据接收的块A和A&B,块B可以被确定。接下来,搜索系数矩阵以找出级数为2的两个编码块且其中两个编码块之一是块B,并且还找出级数为3的编码块,且其中三个块中的两个块是块A和B。这是一个迭代过程,该迭代过程在接收 到所有编码块时会导致最终解码过程的显著简化。另一示例中,节点可确定新接收到的编码块是否定义了一个可用矩阵求逆来求解的子矩阵。例如,如果新接收到的块的系数向量只在第1,2,3和10列有非零元素项,则可只在系数矩阵中的第1,2,3和10列搜索包含非零元素项的其它行。如果能标识另外3个这样的行,则可对该子矩阵执行矩阵求逆以解码第1,2,3和10个原始块。
在第二解码优化示例中,多个块可以被读入存储器且被并行解码。例如,原文件被划分为多个段(见上述第一编码优化示例),与一个段有关的所有块可被载入存储器并在随后被并行解码。段可以被顺序选择,使得解码过程将优先权给予来自较早段的块。这在数据涉及视频流时特别有利,因为较早需要的段在较晚需要的段之前被解码。在原始文件没被划分为段的系统中也可以应用这一并行解码技术。再次,所有接收到的块的子集被读入存储器并被并行解码,而该子集可由在系数矩阵的特定列中有一个非零值的所有块来定义,例如由块A和其它块线性组合而产生的所有块来定义。通过以这种对整个解码过程划分,算术运算的次数可从O(n2)降为O(n*k),其中n为原始文件中块的数量,k是段/子集中块的数量。
在第三解码优化示例中,使用一个滑动窗口跨所有已接收的块用于解码。这种优化提供了一种对磁盘和OS高速缓存高效的利用并允许操作系统辅助准备以供解码。在这个示例中,每个编码块的一小部分或窗口(例如,10KB)被载入存储器并分配一块缓冲区用来解码每个块的相应部分。一旦块的相应部分被解码,该部分就可被写入磁盘。因为这些编码块相继的各部分被顺序处理,操作系统就可以与前一个块的解码并行地预先加载每个块的下一部分数据,因此使得解码每部分间的延迟最小化。
上面的描述涉及的解码优化可以用来降低对从网络中其它节点接收的数据块进行解码所需的处理负荷和时间。每一个上述优化可独立于其它的优化实现,或者也可以组合使用两种或多种优化技术而进一步增进对编码过程的优化。解码优化可以附加先前描述的任何编码优化技术一并实现,也可与编码优化技术分开实现。
上面的描述涉及文件分布系统。上述的这些优化技术也可以应用于文 件共享应用。
本领域的技术人员将认识到用于存储程序指令的存储设备可分布在网络上。例如,远程计算机可存储描述为软件的该过程的示例。本地或终端计算机可访问远程计算机并下载该软件的一部分或全部以运行该程序。可替换地,本地计算机可按需下载软件的片断,或者可以在本地终端上执行一些软件指令而在远程计算机(或计算机网络)上执行一些软件指令。本领域的技术人员将认识到,通过使用本领域技术人员已知的常规技术,软件指令的全部或部分可由专用电路如DSP、可编程逻辑阵列等来执行。
如对于本领域的技术人员而言,显然此处给出的任何范围或者设备值可以被扩展或者改变而不失去所寻求的效果。
文本中描述的各方法步骤可以在需要时按任何合适的次序或同时执行。
可以理解,上面对于较佳实施例的描述仅仅是作为例子给出的,而本领域的技术人员可以做出多种改变。