FR2951038A1 - Efficient extensible markup language interchange bit stream processing method, involves re-aligning coding values to predicted binary size, validating prediction of part of binary size, and processing events corresponding to binary size - Google Patents
Efficient extensible markup language interchange bit stream processing method, involves re-aligning coding values to predicted binary size, validating prediction of part of binary size, and processing events corresponding to binary size Download PDFInfo
- Publication number
- FR2951038A1 FR2951038A1 FR0956969A FR0956969A FR2951038A1 FR 2951038 A1 FR2951038 A1 FR 2951038A1 FR 0956969 A FR0956969 A FR 0956969A FR 0956969 A FR0956969 A FR 0956969A FR 2951038 A1 FR2951038 A1 FR 2951038A1
- Authority
- FR
- France
- Prior art keywords
- prediction
- values
- value
- predicted
- bit
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Classifications
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M7/00—Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
- H03M7/30—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
- H03M7/40—Conversion to or from variable length codes, e.g. Shannon-Fano code, Huffman code, Morse code
- H03M7/42—Conversion to or from variable length codes, e.g. Shannon-Fano code, Huffman code, Morse code using table look-up for the coding or decoding process, e.g. using read-only memory
- H03M7/425—Conversion to or from variable length codes, e.g. Shannon-Fano code, Huffman code, Morse code using table look-up for the coding or decoding process, e.g. using read-only memory for the decoding process only
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Document Processing Apparatus (AREA)
Abstract
Description
La présente invention concerne un procédé et un dispositif correspondant de traitement, généralement de décodage, d'un flux binaire comprenant des événements codés et correspondant notamment à un document structuré codé. Elle s'applique en particulier aux documents structurés de type XML (acronyme de "eXtensible Markup Language" pour langage de balisage extensible) codés sous la forme d'un flux binaire type EXI ("Efficient XML Interchange") ou Fast Infoset. Un document XML est composé d'éléments, chaque élément commençant par une balise ouvrante comportant le nom de l'élément (par exemple: <balise>) et se terminant par une balise fermante comportant, elle aussi, le nom de l'élément (par exemple: </balise>). Chaque élément peut contenir d'autres éléments ou des données textuelles. D'autre part, un élément peut être précisé par des attributs, chaque attribut étant défini par un nom et ayant une valeur. Les attributs sont placés dans la balise ouvrante de l'élément qu'ils précisent (par exemple: <balise attribut="valeur">). De façon connue en soi, la syntaxe XML permet aussi de définir des commentaires, des instructions de traitement et des sections d'échappement. The present invention relates to a method and a corresponding device for processing, generally decoding, a bit stream comprising coded events and corresponding in particular to an encoded structured document. It applies in particular to structured documents of the XML type (acronym for "eXtensible Markup Language" for extensible markup language) encoded in the form of an EXI (Efficient XML Interchange) or Fast Infoset type bitstream. An XML document is composed of elements, each element starting with an opening tag with the name of the element (for example: <tag>) and ending with a closing tag that also contains the name of the element ( for example: </ tag>). Each element can contain other elements or textual data. On the other hand, an element can be specified by attributes, each attribute being defined by a name and having a value. The attributes are placed in the opening tag of the element they specify (for example: <attribute tag = "value">). In a manner known per se, the XML syntax also makes it possible to define comments, processing instructions and escape sections.
On considère dans la suite que des données XML sont décrites en terme d'Items" ou "événements", chaque item ou événement pouvant être un début d'élément (par exemple <balise>), une fin d'élément (par exemple </balise>), un attribut (par exemple attribut="valeur"), un contenu textuel, un commentaire, une instruction de traitement ou une section d'échappement. We consider in the following that XML data are described in terms of Items "or" events ", each item or event can be an element start (for example <tag>), an end of element (for example < / tag>), an attribute (eg attribute = "value"), textual content, comment, processing instruction or escape section.
Le langage XML présente de nombreux avantages et est devenu un langage de référence pour stocker des données dans un fichier ou pour échanger des données. Le langage XML permet en particulier de disposer de nombreux outils pour traiter les fichiers générés. En particulier, un document XML peut être édité manuellement avec un simple éditeur de texte. En outre, comme un document XML contient sa structure intégrée aux données, ce document est très lisible même sans en connaître la spécification. XML has many advantages and has become a reference language for storing data in a file or exchanging data. The XML language allows in particular to have many tools to process the generated files. In particular, an XML document can be edited manually with a simple text editor. In addition, as an XML document contains its built-in data structure, this document is very readable even without knowing the specification.
Le principal inconvénient de la syntaxe XML est d'être très prolixe. Ainsi la taille d'un document XML peut être plusieurs fois supérieure à la taille intrinsèque des données. Cette taille importante des documents XML induit aussi un temps de traitement important lors de la génération et de la lecture de documents XML. Elle induit aussi un temps de transmission important. The main disadvantage of the XML syntax is to be very verbose. Thus the size of an XML document can be several times larger than the intrinsic size of the data. This large size of XML documents also induces a significant processing time during the generation and reading of XML documents. It also induces a significant transmission time.
Pour remédier à ces inconvénients, des méthodes de compression et d'encodage d'un document XML ont été recherchées. Le but de ces méthodes est de coder le contenu du document XML sous une forme plus efficace, tout en permettant de reconstruire facilement le document XML. C'est notamment le cas des formats binaires tels que EXI (format utilisé comme base pour la standardisation d'un format XML binaire par le groupe de travail EXI du W3C - "World Wide Web Consortium", organisation produisant des standards pour le Web) ou Fast Infoset spécifié par la norme ITU-T Rec. X.891 1 ISO/IEC 24824-1. Ces formats ont pour caractéristique de prendre en compte un nombre important d'informations structurelles du document afin de compresser davantage les données. Par exemple, la recommandation EXI, disponible au travers du document "Efficient XML Interchange (EXI) Format 1.0 - W3C Working Draft 28 July 2008", prend en compte l'ordre d'apparition des différents événements au sein d'un document structuré pour construire une ou plusieurs grammaires qui permettent d'encoder les événements les plus fréquents sur un faible nombre de bits. Une grammaire est composée d'un ensemble de productions, chaque production comprenant une description d'événement XML, une valeur de codage associée et l'indication de la grammaire suivante à utiliser. Pour coder un événement XML à l'aide d'une grammaire, la production contenant la description la plus précise de l'événement XML est utilisée. La valeur de codage contenue dans cette production est utilisée pour représenter l'événement dans le flux binaire codé, et les informations contenues dans l'événement et non décrites dans la production sont codées à la suite. Une grammaire selon Efficient XML est évolutive. Dans un certain nombre de cas, après l'occurrence d'un événement XML déjà décrit par une production de la grammaire (s'il n'est pas décrit par une production, il ne peut être encodé par la grammaire), la grammaire est modifiée pour inclure une nouvelle production plus efficace correspondant à cet événement XML. Cette production peut soit contenir une description plus précise de l'événement, diminuant le nombre d'informations à coder pour représenter l'événement, soit avoir une valeur de codage plus compacte. Les valeurs de codage, ou "codes", sont exprimées sous forme de "priorités" ayant, généralement, entre 1 et 3 niveaux. Coder une valeur de codage revient à coder les valeurs de sa priorité. Ces valeurs sont généralement exprimées sur un octet (8 bits) et manipulées ainsi par l'encodeur. Toutefois, chaque niveau peut être codé sur le nombre de bits minimum pour pouvoir coder la plus grande valeur de ce niveau associée à une production de la grammaire. Aussi, pour un niveau prenant des valeurs de 0 à 6, on utilise trois bits de codage. Pour coder un document XML, un ensemble de grammaires est utilisé. Quelques grammaires servent à coder la structure propre au document XML. En outre, pour chaque type d'événement XML présent dans le document (un type d'élément XML étant un ensemble d'événements ayant le même nom), un ensemble de grammaires est utilisé pour coder les événements XML de ce type. L'indication de la grammaire suivante au niveau des productions permet de naviguer à l'intérieur de ces grammaires. Un ensemble de dictionnaires de chaînes ou de valeurs est également utilisé pour encoder les noms d'événements ou attributs, et autres contenus du document XML. Ces dictionnaires évoluent également par l'incorporation de nouvelles chaînes/valeurs rencontrées dans le document et codées. Les règles de grammaires utilisées peuvent soit être des règles génériques, communes à tous les documents XML et construites à partir de la syntaxe XML, soit être des règles spécifiques à un type de document, construites à partir d'un Schéma XML décrivant la structure de ce type de document. Lors du décodage, le processus inverse est utilisé : la valeur de codage correspondant à un événement EXI est extraite du flux binaire EXI, et permet d'identifier l'événement XML codé ainsi que les informations complémentaires à décoder. En outre, lors du décodage, les mêmes règles d'évolution des grammaires et des dictionnaires de chaînes sont utilisées, permettant d'avoir à tout moment un ensemble de règles de grammaires et de dictionnaires identique à celui qui était utilisé lors du codage. A titre d'exemple, le fragment XML suivant est utilisé pour décrire le codage d'un document XML à l'aide de la spécification EXI: <person> <firstname>John</firstname> <lastname>Smith</lastname> </person> Au début de l'encodage de ce fragment, puisque l'encodeur n'a pas encore rencontré d'événement "person", ici un début d'élément <person>, une grammaire par défaut est créée pour cet événement. Il s'agit d'une grammaire ne contenant que des productions génériques. Durant l'encodage de l'élément "person", de nouvelles productions seront créées et insérées pour rendre la grammaire liée à l'élément "person" plus efficace. La grammaire par défaut utilisée pour coder le contenu de l'élément "person" est la suivante (de manière simplifiée par rapport à la spécification Efficient XML, notamment en utilisant une seule grammaire pour coder l'élément "person") : Les événements EE, SE, CH représentés ici (d'autres événements sont prévus dans la recommandation EXI) utilisés pour décrire les événements ElementContent : EE 0 SE (*) ElementContent 1.0 CH ElementContent 1.1 XML sont appelés événements EXI et sont directement associés aux valeurs de codage (ou "priorités") du flux EXI binaire. En particulier, "EE" correspond à l'événement de fin d'élément, "SE (*)" correspond un événement de début d'élément quelconque (générique, le nom n'est donc pas précisé), et "CH" correspond à un événement de contenu textuel. Lors de l'encodage, après avoir reçu l'événement correspondant au début d'élément "person" (SE (person)), et l'avoir codé par exemple de façon littérale (ou à l'aide d'une grammaire appropriée de plus haut niveau), l'encodeur sélectionne la grammaire de codage du contenu de l'élément "person", décrite ci-dessus. Ensuite, l'encodeur reçoit l'événement de début d'élément "firstname" (<firstname> correspondant à un événement EXI SE (firstname)). La production la plus précise qui correspond à cet événement dans la grammaire ci-dessus est la deuxième : SE (*) ElementContent 1.0 L'encodeur code donc cet événement en insérant la priorité "1.0" dans le flux EXI binaire. Comme le premier niveau de priorité comprend deux valeurs distinctes ("0" et "1") parmi les productions de la grammaire, ce niveau peut être codé sur un bit, avec la valeur "1". De même, le deuxième niveau de priorité comprend deux valeurs distinctes et peut être codé sur un bit, avec la valeur "0". La priorité "1.0" est donc codée ici avec les deux bits "10". Cette donnée codée est ainsi générée initialement sur un ou plusieurs octets. Selon différentes options de codage disponibles dans la recommandation EXI, cette valeur de codage est alors insérée, telle qu'elle, dans le flux EXI, sous la forme d'un ou plusieurs octets entiers (option dite "byte-aligned" où chaque nouvelle valeur codée recommence sur un nouvel octet), ou bien sous une forme compactée avec uniquement deux bits (option dite "bit-packed" où les valeurs codées sont concaténées les unes aux autres sur un nombre minimal de bits pour représenter toutes les priorités possibles). Comme on peut aisément le comprendre, cette dernière option produit une version plus compacte du flux binaire codé, mais requiert, en contrepartie, un temps de traitement légèrement allongé pour procéder au compactage (concaténation) lors de l'encodage, ou au réalignement sur les octets lors du décodage. Ensuite, comme la production ne précise pas le nom de l'élément, "firstname" est codé, par exemple de façon littérale à l'aide d'un format spécifique à la spécification Efficient XML (similaire au format UTF8). On poursuit ensuite l'encodage du contenu de "firstname". Dans ce dessein, on recherche la production associée à cet élément. Comme aucun élément "firstname" n'a encore été rencontré, on crée une grammaire "firstname" à partir de la grammaire par défaut évoquée précédemment. L'élément "firstname" contient un noeud texte pour unique enfant. On encode ce noeud texte, par exemple littéralement. Une fois ce noeud texte encodé, on met à jour la grammaire de "firstname" en insérant une production texte CH. Grammaire "firstname" ElementContent : CH 0 EE 1 SE (*) ElementContent 2.0 CH ElementContent 2.1 Une fois le contenu de "firstname" codé, l'encodeur modifie la grammaire associée à l'élément "person" pour adapter la grammaire aux données XML rencontrées. Pour cela, une nouvelle production est ajoutée à la grammaire, cette production correspondant au début d'élément "firstname". A cette production est associée la priorité "0", et les autres priorités sont décalées pour conserver l'unicité des priorités. On rappelle ici que le décodeur agissant de façon symétrique sera en mesure de réaliser des décalages de priorités (ou index) similaires au fur et à mesure du décodage des données reçues. Ainsi la grammaire "person" devient : Grammaire "person" ElementContent : SE (firstname) ElementContent 0 7 SE (*) ElementContent 2.0 CH ElementContent 2.1 L'événement suivant du fragment XML à coder est le début de l'élément "lastname". Comme pour "firstname", cet élément est codé à l'aide de la production : SE (*) ElementContent 2.0 puisque aucune production correspondant à l'élément "lastname" n'est trouvée. Le premier niveau de priorité ayant maintenant trois valeurs possibles, il est codé sur deux bits, avec la valeur "2". Le deuxième niveau de priorité est toujours codé sur un seul bit. La priorité "2.0" est donc codée ici avec les trois bits "100". Selon l'option "byte-aligned" ou "bit-packed" choisie, ces priorités sont soit insérées sur des octets entiers, soit compactées et concaténées. To overcome these drawbacks, methods of compression and encoding of an XML document have been sought. The purpose of these methods is to encode the content of the XML document in a more efficient form, while allowing easy rebuilding of the XML document. This is particularly the case for binary formats such as EXI (format used as a basis for the standardization of a binary XML format by the W3C EXI Working Group - "World Wide Web Consortium", an organization producing standards for the Web) or Fast Infoset specified by ITU-T Rec. X.891 1 ISO / IEC 24824-1. These formats have the characteristic of taking into account a large number of structural information of the document in order to further compress the data. For example, the EXI recommendation, available through the document "Efficient XML Interchange (EXI) Format 1.0 - W3C Working Draft 28 July 2008", takes into account the order of appearance of the different events within a structured document for build one or more grammars that can encode the most frequent events on a small number of bits. A grammar is composed of a set of productions, each production comprising an XML event description, an associated coding value, and the indication of the next grammar to use. To code an XML event using a grammar, the output containing the most accurate description of the XML event is used. The encoding value contained in this output is used to represent the event in the encoded bitstream, and the information contained in the event and not described in the output is encoded in sequence. A grammar according to Efficient XML is scalable. In a certain number of cases, after the occurrence of an XML event already described by a grammar production (if it is not described by a production, it can not be encoded by the grammar), the grammar is modified to include a new and more efficient production corresponding to this XML event. This output can either contain a more accurate description of the event, decreasing the amount of information to be encoded to represent the event, or have a more compact encoding value. The coding values, or "codes", are expressed in the form of "priorities" having, generally, between 1 and 3 levels. Coding an encoding value amounts to coding the values of its priority. These values are usually expressed in one byte (8 bits) and thus manipulated by the encoder. However, each level can be coded on the minimum number of bits to be able to encode the highest value of this level associated with a grammar production. Also, for a level taking values from 0 to 6, three coding bits are used. To encode an XML document, a set of grammars is used. Some grammars are used to code the structure of the XML document. In addition, for each type of XML event present in the document (an XML element type being a set of events with the same name), a set of grammars is used to encode XML events of that type. Indication of the following grammar at the level of productions allows you to navigate within these grammars. A set of string or value dictionaries is also used to encode the event or attribute names, and other contents of the XML document. These dictionaries also evolve by incorporating new strings / values encountered in the document and coded. The grammar rules used can either be generic rules, common to all XML documents and built from the XML syntax, or be document type-specific rules, constructed from an XML Schema describing the structure of the document. this type of document. During decoding, the inverse process is used: the encoding value corresponding to an EXI event is extracted from the EXI bit stream, and makes it possible to identify the coded XML event as well as the additional information to be decoded. In addition, during decoding, the same rules for the evolution of grammars and string dictionaries are used, making it possible to have at any time a set of rules for grammars and dictionaries identical to the one used during coding. As an example, the following XML fragment is used to describe the encoding of an XML document using the EXI specification: <personname> <firstname> John </ firstname> <lastname> Smith </ lastname> < / person> At the beginning of the encoding of this fragment, since the encoder has not yet encountered a "person" event, here a <person> element start, a default grammar is created for this event. It is a grammar containing only generic productions. During the encoding of the "person" element, new productions will be created and inserted to make the grammar linked to the "person" element more efficient. The default grammar used to encode the content of the "person" element is as follows (simplified with respect to the Efficient XML specification, including using a single grammar to code the "person" element): EE events , SE, CH shown here (further events are provided in the EXI recommendation) used to describe ElementContent events: EE 0 SE (*) ElementContent 1.0 CH ElementContent 1.1 XML are called EXI events and are directly associated with the encoding values ( or "priorities") of the binary EXI flow. In particular, "EE" corresponds to the event of end of element, "SE (*)" corresponds an event of beginning of any element (generic, the name is not specified), and "CH" corresponds to a textual content event. During encoding, after receiving the event corresponding to the beginning of "person" element (SE (person)), and having it coded for example literally (or with the help of an appropriate grammar of higher level), the encoder selects the encoding grammar of the content of the "person" element, described above. Then, the encoder receives the element start event "firstname" (<firstname> corresponding to an EXI event SE (firstname)). The most accurate output that corresponds to this event in the above grammar is the second: SE (*) ElementContent 1.0 The encoder therefore encodes this event by inserting the "1.0" priority into the binary EXI stream. Since the first level of priority includes two distinct values ("0" and "1") among the productions of the grammar, this level can be coded on a bit, with the value "1". Similarly, the second priority level includes two distinct values and can be bit-coded with the value "0". The priority "1.0" is thus encoded here with the two bits "10". This coded data is thus initially generated on one or more bytes. According to various coding options available in the EXI recommendation, this coding value is then inserted, such that, in the EXI flow, it is in the form of one or more whole bytes (so-called "byte-aligned" option where each new coded value begins again on a new byte), or in a compacted form with only two bits (so-called "bit-packed" option where the coded values are concatenated to each other on a minimum number of bits to represent all the possible priorities) . As can be easily understood, the latter option produces a more compact version of the coded bitstream, but requires, in return, a slightly longer processing time to proceed with compaction (concatenation) during encoding, or realignment over time. bytes during decoding. Then, since the production does not specify the name of the element, "firstname" is encoded, for example literally using a specific format to the Efficient XML specification (similar to the UTF8 format). We then continue encoding the content of "firstname". In this design, we look for the production associated with this element. As no "firstname" element has yet been met, we create a "firstname" grammar from the default grammar mentioned above. The "firstname" element contains a text node for a single child. We encode this text node, for example literally. Once this encoded text node, we update the grammar of "firstname" by inserting a text production CH. Grammar "firstname" ElementContent: CH 0 EE 1 SE (*) ElementContent 2.0 CH ElementContent 2.1 Once the content of "firstname" is coded, the encoder modifies the grammar associated with the "person" element to adapt the grammar to the XML data encountered. For this, a new production is added to the grammar, this production corresponding to the beginning of element "firstname". This production is associated with the priority "0", and the other priorities are shifted to preserve the uniqueness of the priorities. It will be recalled here that the decoder acting symmetrically will be able to achieve similar priority (or index) offsets as the received data is decoded. Thus the grammar "person" becomes: Grammar "person" ElementContent: SE (firstname) ElementContent 0 7 SE (*) ElementContent 2.0 CH ElementContent 2.1 The following event of the XML fragment to be encoded is the beginning of the element "lastname". As for "firstname", this element is coded using the production: SE (*) ElementContent 2.0 since no production corresponding to the element "lastname" is found. Since the first priority level now has three possible values, it is coded on two bits, with the value "2". The second priority level is always coded on a single bit. The priority "2.0" is thus encoded here with the three bits "100". Depending on the option "byte-aligned" or "bit-packed" chosen, these priorities are either inserted on whole bytes, or compacted and concatenated.
Le nom de l'élément, "lastname", est ensuite codé, par exemple littéralement. Puis le contenu de "lastname" est codé à l'aide de la grammaire associée à l'élément "lastname", à créer si nécessaire lors de la première itération, de façon similaire à ce qui est décrit ci-dessus pour la grammaire "firstname". The name of the element, "lastname", is then encoded, for example literally. Then the content of "lastname" is coded using the grammar associated with the element "lastname", to create if necessary during the first iteration, similar to what is described above for the grammar " firstname ".
Suite à l'encodage de l'élément "lastname", la grammaire "person" est modifiée pour y ajouter une production correspondant au début de l'élément "lastname" (avec décalage des priorités), et elle devient alors : Grammaire "person" ElementContent : 30 Ensuite, l'événement de fin d'élément, correspondant à la fin de l'élément "person" est codé, en utilisant la production : SE (lastname) ElementContent 0 SE (firstname) ElementContent 1 EE 2 SE (*) ElementContent 3.0 CH ElementContent 3.1 Si, par la suite, dans le document XML, le codeur rencontre un autre élément "person" similaire, cet élément va être codé à partir de cette grammaire. Ainsi le premier événement correspondant au contenu de l'élément "person" est l'événement de début de l'élément "firstname". Cet élément est codé avec la production: SE (firstname) ElementContent 1 On note que la production 3.0 SE (*) ElementContent correspond aussi à cet événement, mais est moins précise (elle ne 10 précise pas le nom "firstname" de l'élément). C'est donc la première production qui est utilisée pour une efficacité de codage accrue. L'encodeur code donc la priorité de cette production, à savoir la valeur "1", qui est codée sur deux bits (car prenant des valeurs de 0 à 3), soit "01". Il n'y a pas besoin de coder le nom de l'élément, puisque celui-ci est 15 précisé par la production et ressort du codage littéral initial lorsque l'élément "firstname" a été rencontré pour la première fois. L'encodeur code ensuite le contenu de l'élément "firstname". Comme une production spécifique à l'événement de début de l'élément "firstname" existe déjà dans la grammaire, il n'est pas nécessaire 20 d'ajouter une nouvelle production à la grammaire. L'encodeur code ensuite, de manière similaire, l'événement de début de l'élément "lastname", en codant uniquement la priorité "0" avec les deux bits ,,00,,. Ainsi, pour le codage du deuxième élément "person" similaire au 25 premier, le code généré est plus compact, puisqu'il n'est plus nécessaire de coder le nom des éléments contenus dans "person", ni littéralement (en codant l'intégralité de la chaîne de caractères), ni même à l'aide d'un index. On observe ainsi, tout au long du codage d'un document XML, que l'on navigue d'une grammaire à l'autre pour trouver les productions adaptées au 30 codage des événements XML. Cette navigation est fonction de l'événement XML qui vient d'être codé, et dont la production associée indique la grammaire suivante à utiliser. Following the encoding of the "lastname" element, the "person" grammar is modified to add a production corresponding to the beginning of the "lastname" element (with shift of priorities), and it becomes: Grammar "person" "ElementContent: 30 Next, the end element event, corresponding to the end of the" person "element is encoded, using the output: SE (lastname) ElementContent 0 SE (firstname) ElementContent 1 EE 2 SE ( *) ElementContent 3.0 CH ElementContent 3.1 If, subsequently, in the XML document, the encoder encounters another similar "person" element, this element will be encoded from this grammar. Thus the first event corresponding to the content of the "person" element is the start event of the "firstname" element. This element is coded with the production: SE (firstname) ElementContent 1 Note that the production 3.0 SE (*) ElementContent also corresponds to this event, but is less precise (it does not specify the name "firstname" of the element ). This is the first production that is used for increased coding efficiency. The encoder therefore encodes the priority of this production, namely the value "1", which is coded on two bits (because taking values from 0 to 3), or "01". There is no need to encode the name of the element, since this is specified by the output and comes out of the initial literal encoding when the "firstname" element was encountered for the first time. The encoder then encodes the contents of the "firstname" element. Since a production specific to the start event of the "firstname" element already exists in the grammar, it is not necessary to add a new production to the grammar. The encoder then similarly encodes the start event of the "lastname" element, encoding only the "0" priority with the two bits "00". Thus, for the coding of the second "person" element similar to the first, the generated code is more compact, since it is no longer necessary to code the names of the elements contained in "person", nor literally (by coding the entire string), or even using an index. Thus, throughout the coding of an XML document, one navigates from one grammar to another to find the productions adapted to the coding of the XML events. This navigation is based on the XML event that has just been coded, and whose associated output indicates the next grammar to use.
La recommandation EXI prévoit par ailleurs des mécanismes pour préparer, avant le codage ou le décodage, les grammaires en tout ou partie, à partir d'un fichier de description structurelle de documents, dit Schéma XML ("XML Schema"). The EXI recommendation also provides mechanisms to prepare, before coding or decoding, the grammars in whole or in part, from a file of structural description of documents, called XML Schema ("XML Schema").
Si un tel schéma XML est disponible pour décrire le contenu de l'élément "person", à savoir un élément "firstname" et un élément "lastname", il est possible de construire dès le départ la grammaire générée après la fin du codage du premier élément "person". Cependant, si le schéma précise en outre que les éléments "firstname" et "lastname" doivent être ordonnés à l'intérieur de l'élément "person" ("firstname" précédant "lastname"), il est possible de générer les grammaires suivantes pour décrire le contenu de l'élément "person" (toujours de manière simplifiée par rapport à la spécification Efficient XML). ElementContentl : SE (firstname) ElementContent2 0 EE 1.0 SE (*) ElementContentl 1.1 CH ElementContentl 1.2 ElementContent2 : SE (lastname) ElementContent3 0 EE 1.0 SE (*) ElementContent2 1.1 CH ElementContent2 1.2 ElementContent3 : EE 0 SE (*) ElementContent2 1.0 CH ElementContent2 1.1 Ces grammaires se servent de l'ordre connu d'apparition des éléments "firstname" et "lastname" pour séparer les productions en plusieurs grammaires et diminuer le nombre de productions par grammaire, et par conséquent le nombre de bits nécessaires pour coder une priorité. Ces grammaires peuvent même être réduites si l'on n'accepte pas les déviations par rapport au schéma. Une déviation correspond à la présence d'un événement XML non décrit par le schéma. Ce peut être la présence d'un élément XML autre que ceux décrits par le schéma, ou la présence d'un élément XML décrit par le schéma, mais à un endroit non prévu par le schéma. Lors de l'utilisation d'un schéma pour construire les grammaires EXI, un premier mode, le mode déviation, permet de prendre en compte ces déviations et de les coder. Un autre mode, le mode strict, n'autorise pas ces déviations et ne permet pas de coder un document contenant une telle déviation. Dans ce dernier mode, il est ainsi possible de s'affranchir des productions dites "génériques" (telles que SE(*)) utiles pour traiter des événements inattendus) et celles qui ne se réaliseront pas. If such an XML schema is available to describe the content of the "person" element, namely a "firstname" element and a "lastname" element, it is possible to build from the start the generated grammar after the end of the coding. first "person" element. However, if the schema further specifies that the elements "firstname" and "lastname" must be ordered inside the "person" element ("firstname" preceding "lastname"), it is possible to generate the following grammars to describe the content of the "person" element (always in a simplified way compared to the Efficient XML specification). ElementContentl: SE (firstname) ElementContent2 0 EE 1.0 SE (*) ElementContentl 1.1 ElementContent2 1.2 ElementContent2: SE (lastname) ElementContent3 0 EE 1.0 SE (*) ElementContent2 1.1 ElementContent2 1.2 ElementContent3: EE 0 SE (*) ElementContent2 1.0 ElementContent2 1.1 These grammars use the known order of appearance of the elements "firstname" and "lastname" to separate the productions in several grammars and to reduce the number of productions per grammar, and consequently the number of bits necessary to code a priority . These grammars can even be reduced if deviations from the schema are not accepted. A deviation is the presence of an XML event not described by the schema. It may be the presence of an XML element other than those described by the schema, or the presence of an XML element described by the schema, but in a place not provided for by the schema. When using a schema to construct the EXI grammars, a first mode, the deviation mode, makes it possible to take these deviations into account and to code them. Another mode, the strict mode, does not allow these deviations and does not allow to encode a document containing such a deviation. In this last mode, it is thus possible to get rid of so-called "generic" productions (such as SE (*)) useful for dealing with unexpected events) and those that will not be realized.
Aussi, dans le mode strict, les grammaires deviennent: ElementContentl : SE (firstname) ElementContent2 0 Also, in strict mode, the grammars become: ElementContentl: SE (firstname) ElementContent2 0
ElementContent2 : SE (lastname) ElementContent3 0 ElementContent2: SE (lastname) ElementContent3 0
ElementContent3 : EE 0 Dans ce cas, chaque grammaire ne contenant qu'une seule priorité, cette priorité n'a pas besoin d'être codée. Ainsi, l'ensemble des événements décrivant le contenu de l'élément "person" tel que décrit ci-dessus est codé en zéro bit (tous les événements peuvent être prédits de façon sûre) et peut être décodé rapidement par prédiction. ElementContent3: EE 0 In this case, since each grammar contains only one priority, this priority does not need to be coded. Thus, the set of events describing the content of the "person" element as described above is encoded in zero bit (all events can be predicted safely) and can be decoded quickly by prediction.
Le décodage d'un flux binaire résultant de tels encodages ou l'accès à une partie du document encodé sont généralement réalisés en accédant successivement aux événements, par exemple EXI, composant le flux binaire puis en les décodant les uns après les autres. Dans le cas de l'activation de l'option "bit-packed" de compactage des données codées, un réalignement des données codées sur les limites d'octets est alors mené pour pouvoir être manipulées par le décodeur et comparées avec d'autres données manipulées, sous la même forme, par ce décodeur. Les interfaces de programmation SAX (« Simple API for XML » en anglais, ou « Interface de programmation simple pour XML » en français) et StAX (« Streaming API for XML » en anglais, ou « Interface de programmation au fur et à mesure pour XML » en français) permettent cet accès événement EXI par événement EXI. Ce décodage séquentiel introduit des temps de traitement longs, principalement car un nouvel événement EXI ne commencera à être décodé que lorsque l'événement EXI précédent aura été totalement décodé. Pour améliorer l'efficacité du décodage, on a pu faire appel à des processeurs actuels disposant de plusieurs unités de traitement pouvant fonctionner en parallèle (par exemple les processeurs mufti-coeurs). De tels processeurs sont coûteux et parfois non intégrables dans des équipements de petite taille. Récemment, l'introduction d'instructions uniques à données multiples, autrement connues sous l'acronyme SIMD pour "Single Instruction Multiple Data", a ouvert de nouvelles perspectives pour réaliser de traitements parallèles. Les instructions SIMD, mises en oeuvre notamment dans les instructions AltiVec des processeurs PowerPC ou les instructions MMX ou SSE des processeurs Pentium, permettent d'effectuer, en un seul cycle d'instruction, des opérations sur plusieurs opérandes différents. Notons que de telles instructions peuvent être mises en oeuvre sur chaque coeur d'un processeur mufti-coeurs pour améliorer les performances de calcul. Ces instructions SIMD ont ainsi pu être utilisées, comme décrit par la publication US 2008/033974, pour accélérer le décodage de documents XML à l'aide d'une technique de flux de bits parallèles, encore connue sous le nom de Parabix ("Parallel bit streams for XML"). The decoding of a bit stream resulting from such encodings or access to a part of the encoded document is generally achieved by successively accessing the events, for example EXI, composing the bitstream and then decoding them one after the other. In the case of activating the "bit-packed" coded data compaction option, a realignment of the coded data on the byte boundaries is then carried out in order to be manipulated by the decoder and compared with other data. manipulated, in the same form, by this decoder. The programming interfaces SAX ("Simple API for XML" in English, or "Simple programming interface for XML" in French) and StAX ("Streaming API for XML" in English, or "Programming interface as you go XML "in French) allow this EXI event access by EXI event. This sequential decoding introduces long processing times, mainly because a new EXI event will only start to be decoded when the previous EXI event has been fully decoded. To improve the efficiency of the decoding, it has been possible to use current processors having several processing units that can operate in parallel (for example multi-core processors). Such processors are expensive and sometimes not integrable in small equipment. Recently, the introduction of single, multiple data instructions, otherwise known by the acronym SIMD for "Single Instruction Multiple Data", has opened new perspectives for parallel processing. The SIMD instructions, implemented in particular in the AltiVec instructions of the PowerPC processors or the MMX or SSE instructions of the Pentium processors, make it possible to perform, in a single instruction cycle, operations on several different operands. Note that such instructions can be implemented on each core of a core processor to improve computational performance. These SIMD instructions could thus be used, as described by the publication US 2008/033974, to accelerate the decoding of XML documents using a parallel bit stream technique, also known as Parabix ("Parallel bit streams for XML ").
Cette technique réalise le décodage d'un flux binaire aligné sur les octets (c'est-à-dire sensiblement selon l'option "byte-aligned", car les données sont encodées en mode UTF-8) et met en oeuvre les étapes suivantes : - transformation du flux codé d'octets en huit flux de bits. Ainsi, à partir d'un flux de 128 octets, on obtient huit flux de 128 bits, chacun des flux de bits contenant le bit placé à une position donnée pour chacun des 128 octets. Cette transformation peut être réalisée selon le principe "inductive doubling" consistant à diviser récursivement le flux par deux: chaque octet est coupé en deux demi-octets, les demi-octets étant regroupés ensemble pour obtenir deux flux de 128 demi-octets; puis l'opération est répétée, mais avec des tailles deux fois moindres, pour obtenir quatre flux de 128 quart d'octets; enfin, une nouvelle répétition permet d'obtenir les huit flux de 128 huitièmes d'octets, c'est-à-dire de 128 bits ; - génération de flux lexicaux décrivant le contenu du flux XML. This technique performs the decoding of an octet-aligned bitstream (that is, substantially according to the "byte-aligned" option, because the data is encoded in UTF-8 mode) and implements the steps following: - transformation of the coded stream of octets into eight bit streams. Thus, from a stream of 128 bytes, eight 128-bit streams are obtained, each bit stream containing the bit placed at a given position for each of the 128 bytes. This transformation can be performed according to the "inductive doubling" principle of recursively dividing the stream by two: each byte is split into two half-bytes, the half-bytes being grouped together to obtain two streams of 128 half-bytes; then the operation is repeated, but with twice the size, to obtain four streams of 128 quarter bytes; finally, a new repetition makes it possible to obtain the eight streams of 128 eighths of bytes, that is to say 128 bits; - generation of lexical flows describing the content of the XML stream.
Ainsi, il y a un flux lexical qui correspond au caractère « < », utilisé en XML pour noter les débuts d'éléments. Ces flux lexicaux sont calculés à partir des huit flux de bits ; - décodage du flux XML à partir des huit flux de bits et des flux lexicaux. Les flux lexicaux permettent de déterminer les limites des événements XML. A partir de ces limites et des huit flux de bits, des événements représentant le contenu XML sont générés. L'accélération du décodage dans cette méthode réside principalement dans les opérations de détermination des marqueurs lexicaux XML qui peuvent être effectuées sur 128 octets en parallèle, en utilisant peu d'opérations pour chaque marqueur lexical. Par ailleurs, ces déterminations partagent des étapes qui peuvent être factorisées, ce qui permet de réduire encore les calculs. Ces mêmes instructions uniques à données multiples peuvent également être utilisées lors du codage pour paralléliser certaines opérations sur plusieurs opérandes. Thus, there is a lexical flow which corresponds to the character "<", used in XML to note the beginnings of elements. These lexical flows are calculated from the eight bit streams; decoding the XML stream from the eight bit streams and lexical streams. Lexical flows are used to determine the limits of XML events. From these limits and the eight bit streams, events representing the XML content are generated. The acceleration of decoding in this method lies mainly in the operations of determining XML lexical markers that can be performed on 128 bytes in parallel, using few operations for each lexical marker. In addition, these determinations share steps that can be factored, which further reduces the computations. These same single multiple-data instructions can also be used during encoding to parallelize certain operations on multiple operands.
Les instructions SIMD constituent donc des moyens efficaces pour accélérer les traitements tels que le codage ou le décodage de document structuré. Toutefois, ces instructions ne sont pas adaptées aux formats de codage dans lesquels les données codées sont compactées (par exemple l'option "bit-packed") et ne sont donc pas alignées sur les limites d'octets. Cette inadaptation est évidente lors du décodage puisque le décodeur ne connaît pas le nombre de bits utilisés pour chaque donnée codée tant qu'il n'a pas décodé les données précédentes. En effet, comme expliqué ci- dessus, le nombre de bits utilisés dépend du nombre de productions dans la grammaire courante, cette dernière étant fonction de la production utilisée lors du codage de la donnée précédente. Le décodeur est ainsi dans l'impossibilité de traiter simultanément deux données codées successives ou plus. The SIMD instructions are therefore an effective means of accelerating processing such as structured document coding or decoding. However, these instructions are not suitable for encoding formats in which the encoded data is compacted (for example the "bit-packed" option) and are therefore not aligned with the byte boundaries. This misfit is evident during decoding since the decoder does not know the number of bits used for each coded data until it has decoded the previous data. Indeed, as explained above, the number of bits used depends on the number of productions in the current grammar, the latter being a function of the production used during the coding of the previous data. The decoder is thus unable to simultaneously process two or more successive coded data.
L'invention vise à pallier ces inconvénients de l'art antérieur pour permettre de réaliser, de façon groupée, le compactage ou le réalignement de plusieurs données codées, notamment à l'aide d'instructions de type SIMD. Il en résulte des traitements (décodage, accès à une partie du document codé) accélérés. The aim of the invention is to overcome these disadvantages of the prior art in order to make it possible, in a grouped manner, to compact or realign a plurality of coded data, in particular using instructions of the SIMD type. This results in accelerated processing (decoding, access to part of the encoded document).
Dans ce dessein, l'invention concerne notamment un procédé de traitement d'un flux binaire correspondant notamment à un document structuré codé, le flux binaire comprenant des valeurs de codage d'événements, le procédé comprenant les étapes consistant à : - récupérer une pluralité de valeurs de codage d'événements 25 consécutives dudit flux binaire ; - prédire la taille binaire desdites valeurs de codage récupérées ; - réaligner, à l'aide desdites tailles binaires prédites, les valeurs de codage de ladite pluralité récupérée pour correspondre à un alignement binaire donné ; 30 - valider la prédiction d'au moins une partie des tailles binaires ; - traiter les événements correspondant aux tailles binaires dont la prédiction est validée. For the purpose of this invention, a method for processing a bit stream corresponding in particular to a coded structured document, the bit stream comprising event coding values, the method comprising the steps of: - recovering a plurality consecutive event coding values of said bit stream; predicting the binary size of said recovered coding values; realigning, with the aid of said predicted bit sizes, the encoding values of said recovered plurality to correspond to a given bit alignment; 30 - validating the prediction of at least a portion of the bit sizes; - handle the events corresponding to the binary sizes whose prediction is validated.
Selon l'invention, on cherche à connaître les valeurs de codage dont on a réalisé correctement le décompactage, c'est-à-dire le réalignement avec le format utilisé par le décodeur. En effet, ce décompactage permet ensuite au décodeur de trouver, dans les grammaires ou dictionnaires de décodage, les événements EXI et XML correspondants sans difficulté. Pour connaître ces valeurs, on fait des suppositions sur leur taille compactée (prédiction des tailles) que l'on valide généralement à l'aide des valeurs de codage elles-mêmes. En effet, la taille compactée d'une valeur dépend du type de valeur à coder. En particulier, dans le cas d'une valeur de priorité, la taille compactée dépend de la grammaire contenant la production correspondant à cette priorité. Or la grammaire utilisée dépend de l'événement précédent, donc de la valeur de la priorité précédente. Ainsi, pour vérifier la prédiction de taille d'une valeur, il peut suffire (dans le cas d'une priorité) de vérifier la prédiction de la valeur précédente. According to the invention, one seeks to know the encoding values which have been correctly decompacted, that is to say the realignment with the format used by the decoder. In fact, this decompacting then allows the decoder to find, in the grammars or decoding dictionaries, the corresponding EXI and XML events without difficulty. To know these values, one makes assumptions about their compacted size (prediction of the sizes) which one validates generally using the values of coding themselves. Indeed, the compacted size of a value depends on the type of value to be encoded. In particular, in the case of a priority value, the compacted size depends on the grammar containing the production corresponding to this priority. But the grammar used depends on the previous event, so the value of the previous priority. Thus, to verify the size prediction of a value, it may be sufficient (in the case of a priority) to check the prediction of the previous value.
Grâce notamment aux instructions SIMD, les opérations visant au réalignement des valeurs peuvent être menées simultanément sur plusieurs valeurs, sans être limité par le parcours séquentiel des grammaires et tables de décodage normalement nécessaire pour connaître la taille compactée de la valeur suivante. Le décodage des flux EXI est donc accéléré. Thanks in particular to the SIMD instructions, the operations aimed at the realignment of the values can be carried out simultaneously on several values, without being limited by the sequential browsing of the grammars and decoding tables normally necessary to know the compacted size of the following value. The decoding of the EXI flows is thus accelerated.
Par ailleurs, le traitement des valeurs ainsi délimitées dans le flux EXI peut être mené de façon classique, en récupérant directement les valeurs réalignées, pour par exemple les décoder ou accéder directement à une partie souhaité du document codé. Dans un mode de réalisation principale de l'invention, le procédé 25 comprend en outre les étapes consistant à : - prédire des valeurs de codage récupérées de sorte à former une pluralité prédite de valeurs de codage, lesdites valeurs de codage de la pluralité prédite étant selon ledit alignement binaire donné ; et - vérifier la prédiction des valeurs de codage par comparaison des 30 pluralités prédite et réalignée de sorte à valider la prédiction d'au moins une partie des tailles binaires. Furthermore, the processing of the values thus delimited in the EXI flow can be carried out in a conventional manner, by directly recovering the realigned values, for example to decode them or to directly access a desired part of the encoded document. In a main embodiment of the invention, the method further comprises the steps of: - predicting retrieved encoding values so as to form a predicted plurality of encoding values, said encoding values of the predicted plurality being according to said given bit alignment; and - checking the prediction of the encoding values by comparing the predicted and realigned pluralities so as to validate the prediction of at least a portion of the bit sizes.
On réalise ici la validation des prédictions des tailles à l'aide d'une vérification de certaines valeurs de codage, généralement les priorités des grammaires. Dans un mode de réalisation, le procédé comprend l'association, à au moins une table de décodage dudit flux binaire, d'une séquence de prédictions dont les entrées comprennent au moins une valeur de codage d'événement et une taille binaire associée à cette valeur de codage; et lesdites prédictions des valeurs de codage et des tailles binaires sont récupérées de ladite séquence de prédictions associée à la table de décodage courante. L'accès aux prédictions est ainsi immédiat pour un ensemble d'événements à décoder. En particulier, de telles séquences de prédictions permettent d'obtenir aisément ces prédictions indépendamment de la taille des opérandes des instructions SIMD utilisées. Notamment, lesdites tables de décodage sont des grammaires (de préférence EXI) correspondant à un type d'élément structuré. Selon une caractéristique particulière, le procédé comprend une étape de construction de ladite séquence de prédictions à partir d'au moins une prédiction simple associée à au moins une entrée des tables de décodage, ladite prédiction simple renseignant une autre entrée de table de décodage (et donc une autre valeur de codage). A titre d'exemple, dans le cas EXI, une telle entrée peut être une production. Une prédiction simple comprend notamment l'indication d'un événement (ou d'une entrée correspondante des tables) susceptible de se produire après l'entrée concernée, par exemple une production EXI qui ferait suite à une première production. Ces prédictions simples peuvent notamment être mises à jour en fonction du résultat des prédictions effectuées selon l'invention. Grâce à ces productions simples, la constitution, voire la mise à jour, des séquences de prédictions s'avère simple. Validation of size predictions is carried out here by means of a verification of certain coding values, generally the grammar priorities. In one embodiment, the method comprises associating, with at least one decoding table of said bit stream, a prediction sequence whose inputs comprise at least one event coding value and a binary size associated with this encoding value; and said predictions of coding values and bit sizes are retrieved from said prediction sequence associated with the current decoding table. Access to predictions is thus immediate for a set of events to be decoded. In particular, such prediction sequences make it easy to obtain these predictions independently of the size of the operands of the SIMD instructions used. In particular, said decoding tables are grammars (preferably EXI) corresponding to a type of structured element. According to a particular characteristic, the method comprises a step of constructing said sequence of predictions from at least one simple prediction associated with at least one input of the decoding tables, said simple prediction providing another decoding table entry (and therefore another coding value). By way of example, in the EXI case, such an entry may be a production. A simple prediction includes in particular the indication of an event (or a corresponding entry of the tables) likely to occur after the entry concerned, for example an EXI production which would follow a first production. These simple predictions can in particular be updated according to the result of the predictions made according to the invention. Thanks to these simple productions, the constitution, or even the updating, of the prediction sequences proves to be simple.
En particulier, ladite construction comprend le parcours d'une pluralité d'entrées des tables de décodage en navigant à l'aide des prédictions simples associées auxdites entrées parcoures, et l'ajout desdites prédictions simples parcourues à ladite séquence de prédictions. Cette réalisation des séquences de prédictions utiles pour des traitements simultanés avec des instructions SIMD reste ainsi de complexité simple. Et notamment, ledit parcours est réalisé jusqu'à atteindre une prédiction simple d'une table de décodage renseignant une entrée d'une autre table de décodage à laquelle est déjà associée une séquence de prédictions. On évite ainsi un bouclage infini générant une séquence infinie. De plus, cette disposition optimise l'invention puisque, à terme, les entrées des tables de décodage ne seront chacune que dans une seule séquence de prédictions. In particular, said construct comprises traversing a plurality of decode table entries by navigating with simple predictions associated with said traversed entries, and adding said simple predictions traversed to said prediction sequence. This realization of the prediction sequences useful for simultaneous treatments with SIMD instructions thus remains of simple complexity. In particular, said path is performed until a simple prediction of a decoding table is obtained which indicates an input of another decoding table to which a sequence of predictions is already associated. This avoids an infinite looping generating an infinite sequence. In addition, this arrangement optimizes the invention since, in the long run, the entries of the decoding tables will each be in a single prediction sequence.
Selon une caractéristique, le procédé comprend la mise à jour de ladite séquence de prédictions en fonction de ladite vérification. En particulier, ladite séquence de prédictions est mise à jour par découpage au niveau d'une valeur de codage pour laquelle une information de statistique de prédictions atteint une valeur seuil. Typiquement, cette valeur de codage correspond à un événement trop souvent mal prédit. Cette disposition permet d'optimiser les séquences de prédictions pour un meilleur décodage de flux EXI. Selon une autre caractéristique de l'invention, au moins un masque de décalage de bits est calculé pour le réalignement de l'ensemble des valeurs de codage. En particulier, un masque de décalage de bits est stocké en mémoire, associé à ladite séquence de prédictions. Le masque est notamment mémorisé dans un registre de la taille des opérandes des instructions SIMD. Un tel masque permet ainsi, en un cycle d'instruction, de procéder au réalignement de plusieurs valeurs de codage du flux EXI. Selon une autre caractéristique de l'invention, ledit traitement comprend le décodage de la première valeur de codage récupérée dont la prédiction est erronée, à l'aide d'une information de lien associée à une entrée de ladite séquence de prédictions. Cette disposition permet de poursuivre efficacement le décodage alors même qu'une erreur de prédiction peut avoir eu lieu, car on récupère ainsi une entrée de table de décodage pour la valeur mal prédite et la suite du décodage du flux EXI peut être réalisée soit classiquement, soit par une nouvelle mise en oeuvre de l'invention. According to one characteristic, the method comprises updating said sequence of predictions according to said verification. In particular, said prediction sequence is updated by splitting at a coding value for which prediction statistics information reaches a threshold value. Typically, this coding value corresponds to an event that is too often poorly predicted. This arrangement makes it possible to optimize the prediction sequences for a better decoding of EXI flows. According to another characteristic of the invention, at least one bit shift mask is calculated for the realignment of the set of coding values. In particular, a bit shift mask is stored in memory, associated with said sequence of predictions. The mask is notably stored in a register of the operand size of the SIMD instructions. Such a mask thus makes it possible, in one instruction cycle, to realign several encoding values of the flow EXI. According to another characteristic of the invention, said processing comprises the decoding of the first recovered coding value whose prediction is erroneous, using link information associated with an input of said sequence of predictions. This arrangement makes it possible to continue the decoding efficiently even though a prediction error may have occurred, since a decoding table entry is thus recovered for the incorrectly predicted value and the subsequent decoding of the EXI flow can be carried out either conventionally, either by a new implementation of the invention.
Selon une encore autre caractéristique de l'invention, ladite séquence de prédictions comprend un nombre d'entrées qui est un multiple du nombre de valeurs contenues, selon ledit alignement binaire de la pluralité prédite, dans un opérande d'instruction unique à multiples données (SIMD). According to still another characteristic of the invention, said prediction sequence comprises a number of entries which is a multiple of the number of values contained, according to said binary alignment of the predicted plurality, in a single multiple data instruction operand ( SIMD).
Ainsi, le décodage peut être réalisé de façon optimale (en termes de vitesse) car, à tous les cycles de calcul, les instructions uniques à multiples données (SIMD) manipuleront un nombre maximal d'événements, tant que les prédictions sont validées. Dans un mode de réalisation de l'invention, ladite vérification comprend l'application d'un masque de prédiction de sorte à ne pas prendre en compte au moins une valeur de codage lors de ladite comparaison. Notamment, ladite pluralité de valeurs de codage récupérées est stockée, sous forme réalignée, dans un deuxième registre d'instruction unique à multiples données. Notamment, ladite vérification met en oeuvre au moins une instruction unique à multiples données (SIMD) ayant, pour première opérande, ledit deuxième registre stockant ladite pluralité de valeurs de codage récupérées réalignées et, pour seconde opérande, un troisième registre stockant ladite pluralité de valeurs de codage prédites, de sorte à obtenir une indication de comparaison pour chaque valeur de codage. Thus, decoding can be done optimally (in terms of speed) because, at all cycles of calculation, the Multiple Data Unique Instructions (SIMD) will handle a maximum number of events, as long as the predictions are validated. In one embodiment of the invention, said verification comprises the application of a prediction mask so as not to take into account at least one coding value during said comparison. In particular, said plurality of retrieved coding values is stored, in realigned form, in a second single multiple data instruction register. In particular, said verification implements at least one single multiple data instruction (SIMD) having, for first operand, said second register storing said plurality of realigned recovered coding values and, for second operand, a third register storing said plurality of values predicted coding, so as to obtain a comparison indication for each coding value.
En particulier, ladite vérification comprend l'application d'un masque de prédiction au résultat de ladite instruction unique à multiples données, de sorte à effacer ladite indication de comparaison pour au moins une valeur de codage. Cette disposition permet la mise en oeuvre de l'invention même pour les valeurs pour lesquelles la prédiction de valeurs n'est pas utilisée, typiquement des valeurs de contenu. Le masque exclut donc de telles valeurs pour la comparaison. Dans un mode de réalisation de l'invention, le réalignement des valeurs de codage met en oeuvre au moins une instruction unique à multiples données (SIMD) de décalage de bits. Notamment, le procédé comprend la concaténation des tailles binaires prédites dans un premier registre d'instruction unique à multiples données (SIMD). Egalement, on envisage que les valeurs de décalage de bits pour chaque valeur de codage récupérée sont calculées à l'aide d'au moins une instruction unique à multiples données (SIMD) appliquée audit premier registre. L'utilisation des instructions SIMD dans la plupart des calculs menant au réalignement assure un décodage plus rapide puisque, en un cycle d'instruction, on détermine le décalage de bits pour tous les événements de ladite pluralité. A titre d'exemple, des registres courants d'instructions SIMD ont une taille de 128 bits, permettant par exemple de réaligner seize événements codés en un cycle. Dans un autre mode de réalisation, ledit réalignement met en oeuvre une pluralité d'instructions uniques à multiples données (SIMD) aptes à réaliser un alignement progressif des valeurs de codage récupérées, par décalage itératif de sous-groupes de valeurs de codage successives. L'itération est naturellement arrêtée lorsque l'alignement obtenu correspond à celui des valeurs de codage prédites, par exemple lorsque chaque événement récupéré est désormais représenté sur un octet. In particular, said checking comprises the application of a prediction mask to the result of said single multiple-data instruction, so as to delete said comparison indication for at least one coding value. This arrangement allows the implementation of the invention itself for the values for which the value prediction is not used, typically content values. The mask therefore excludes such values for comparison. In one embodiment of the invention, the realignment of the encoding values implements at least one bit-shift multiple data instruction (SIMD). In particular, the method includes concatenating the predicted bit sizes in a first single data multiple instruction register (SIMD). Also, it is contemplated that the bit shift values for each retrieved code value are calculated using at least one single multiple data instruction (SIMD) applied to said first register. The use of the SIMD instructions in most calculations leading to realignment provides faster decoding since, in one instruction cycle, bit shift is determined for all events of said plurality. By way of example, current SIMD instruction registers have a size of 128 bits, allowing, for example, to realign sixteen coded events in one cycle. In another embodiment, said realignment implements a plurality of single data multiple instructions (SIMD) capable of progressively aligning the retrieved coding values, by iterative shifting of subgroups of successive coding values. The iteration is naturally stopped when the alignment obtained corresponds to that of the predicted coding values, for example when each recovered event is now represented on one byte.
En particulier, on divise par deux les sous-groupes d'une itération SIMD à l'autre. Cette disposition offre une mise en oeuvre simple du réalignement à l'aide des instructions SIMD déjà existantes sur les processeurs actuels. Dans un mode de réalisation simplifié de l'invention, ladite validation comprend la comparaison d'au moins une partie du flux binaire récupéré avec une structure prédéfinie, et, en cas de comparaison positive, on utilise une séquence de prédictions associée à ladite structure prédéfinie pour prédire les tailles binaires. Cette configuration permet de simplifier la validation des prédictions par l'utilisation préalable d'une structure prédéfinie. En effet, si les valeurs binaires récupérées du flux sont semblables, au moins en partie (là où elles se révèlent pertinentes, en utilisant des masques par exemple), à une structure connue, alors il est prévu d'utiliser directement la séquence de prédictions rattachée à cette structure et de considérer son contenu comme désormais validé, notamment pour connaître concrètement les tailles permettant le décompactage/réalignement. Ainsi, on évite de mener des vérifications ultérieures sur des valeurs prédites. In particular, the subgroups are divided in two from one SIMD iteration to the other. This arrangement provides a simple implementation of the realignment using existing SIMD instructions on current processors. In a simplified embodiment of the invention, said validation comprises comparing at least a portion of the recovered bitstream with a predefined structure, and, in the case of a positive comparison, using a prediction sequence associated with said predefined structure. to predict the bit sizes. This configuration simplifies the validation of predictions by the prior use of a predefined structure. Indeed, if the binary values recovered from the stream are similar, at least in part (where they prove to be relevant, using masks for example), to a known structure, then it is intended to directly use the sequence of predictions attached to this structure and to consider its content as now validated, especially to know concretely the sizes for unpacking / realignment. Thus, subsequent checks on predicted values are avoided.
On dispose ainsi d'un mécanisme plus rapide et plus efficace, permettant en particulier des accès plus rapides à des emplacements précis d'un document structuré codé. Corrélativement, l'invention vise un dispositif de traitement d'un flux 5 binaire comprenant des valeurs de codage d'événements d'un document structuré, le dispositif comprenant : - un moyen apte à récupérer une pluralité de valeurs de codage d'événements consécutives dudit flux binaire ; - un moyen de prédiction pour prédire la taille binaire desdites 10 valeurs de codage récupérées ; - un moyen de réalignement apte à réaligner, à l'aide desdites tailles binaires prédites, les valeurs de codage de ladite pluralité récupérée pour correspondre à un alignement binaire donné ; - un moyen de validation apte à valider la prédiction d'au moins une 15 partie des tailles binaires ; - un module de traitement pour traiter les événements correspondant aux tailles binaires dont la prédiction est validée. Le dispositif de décodage présente des caractéristiques et avantages analogues au procédé de décodage selon l'invention. 20 De façon optionnelle, le dispositif peut comprendre des moyens se rapportant aux caractéristiques du procédé de décodage exposé précédemment. Notamment, le moyen de prédiction est également apte à prédire des valeurs de codage récupérées de sorte à former une pluralité prédite de valeurs 25 de codage, lesdites valeurs de codage de la pluralité prédite étant selon ledit alignement binaire donné; et le moyen de validation est apte à vérifier la prédiction des valeurs de codage par comparaison des pluralités prédite et réalignée de sorte à valider la prédiction d'au moins une partie des tailles binaires. 30 En particulier, le dispositif peut comprendre des instructions uniques à données multiples et des registres associés pour stocker simultanément des informations (valeurs de codage, tailles prédites, valeurs prédites, masques de décalage de bits) relatives à une pluralité de valeurs de codage successives à traiter. Dans un mode de réalisation, le dispositif comprend des tables de décodage auxquelles sont associées des séquences de prédictions dont les entrées comprennent au moins une valeur de codage d'événement et une taille binaire associée à cette valeur de codage. En particulier, le dispositif comprend des prédictions simples associées à des entrées des tables de décodage et renseignant une autre entrée de table de décodage, et des moyens de construction d'une telle séquence de prédictions à partir des prédictions simples. Un moyen de stockage d'informations, éventuellement totalement ou partiellement amovible, lisible par un système informatique, comprend des instructions pour un programme informatique adapté à mettre en oeuvre le procédé de traitement conforme à l'invention lorsque ce programme est chargé et exécuté par le système informatique. Un programme d'ordinateur lisible par un microprocesseur, comprend des portions de code logiciel adaptées à mettre en oeuvre le procédé de traitement conforme à l'invention, lorsqu'il est chargé et exécuté par le microprocesseur. This provides a faster and more efficient mechanism, in particular allowing faster access to specific locations of a structured coded document. Correlatively, the invention is directed to a device for processing a bit stream comprising event coding values of a structured document, the device comprising: a means capable of recovering a plurality of consecutive event coding values said bit stream; prediction means for predicting the bit size of said retrieved code values; realignment means adapted to realign, using said predicted bit sizes, the encoding values of said recovered plurality to correspond to a given bit alignment; a validation means able to validate the prediction of at least a portion of the bit sizes; a processing module for processing the events corresponding to the binary sizes whose prediction is validated. The decoding device has characteristics and advantages similar to the decoding method according to the invention. Optionally, the device may comprise means relating to the characteristics of the decoding method set forth above. In particular, the prediction means is also able to predict retrieved coding values so as to form a predicted plurality of coding values, said coding values of the predicted plurality being according to said given bit alignment; and the validation means is adapted to verify the prediction of the coding values by comparison of the predicted and realigned pluralities so as to validate the prediction of at least a portion of the bit sizes. In particular, the device may comprise single multi-data instructions and associated registers for simultaneously storing information (encoding values, predicted sizes, predicted values, bit shift masks) relating to a plurality of successive encoding values to treat. In one embodiment, the device comprises decoding tables with associated prediction sequences whose inputs comprise at least one event coding value and a bit size associated with this coding value. In particular, the device comprises simple predictions associated with inputs of the decoding tables and informing another decoding table entry, and means for constructing such a sequence of predictions from simple predictions. An information storage means, possibly totally or partially removable, readable by a computer system, comprises instructions for a computer program adapted to implement the processing method according to the invention when this program is loaded and executed by the computer system. A microprocessor readable computer program comprises portions of software code adapted to implement the processing method according to the invention, when loaded and executed by the microprocessor.
Les moyens de stockage d'information et programme d'ordinateur présentent des caractéristiques et avantages analogues aux procédés qu'ils mettent en oeuvre. Grâce à l'invention, on améliore le décodage de flux binaire, par exemple de type EXI, en décompactant, en un groupe d'instructions, une pluralité d'événements EXI codés sous forme compactée ("bit-packed"). D'autres particularités et avantages de l'invention apparaîtront encore dans la description ci-après, illustrée par les dessins ci-joints, dans lesquels : - la figure 1 représente un exemple de grammaires EXI mettant en 30 oeuvre la présente invention ; - les figures 2a à 2c illustrent la constitution d'un exemple de flux binaire à traiter par l'invention, ainsi qu'un tel exemple avant et après le décompactage ; - la figure 3 représente, sous forme d'ordinogramme, des étapes générales de décodage selon l'invention ; - la figure 4 représente, sous forme d'ordinogramme, des étapes de mise à jour d'une prédiction simple selon l'invention, mise en oeuvre lors du décodage de la figure 3 ; - la figure 5 représente, sous forme d'ordinogramme, des étapes de construction de séquences de prédictions selon l'invention, mise en oeuvre lors du décodage de la figure 3 ; - la figure 6 illustre une séquence de prédictions selon l'invention pour l'exemple des figures 2 ; - la figure 7 représente, sous forme d'ordinogramme, des étapes 15 du décodage de l'invention mises en oeuvre lors du décodage général de la figure 3 ; - les figures 8a à 8h illustrent les opérations de décodage de la figure 7 pour l'exemple de la figure 2 ; - la figure 9 représente, sous forme d'ordinogramme, des étapes 20 de mise à jour des séquences de prédictions selon l'invention ; et - la figure 10 montre une configuration matérielle particulière d'un dispositif de décodage ou d'encodage apte à une mise en oeuvre du procédé selon l'invention. La présente invention est notamment mise en oeuvre pour le 25 décodage d'un flux binaire, de type EXI dans la suite de la description, correspondant à un document structuré XML codé, le flux binaire comprenant des valeurs de codage d'événements, le procédé comprenant les étapes consistant à : - récupérer une pluralité de valeurs de codage d'événements 30 consécutives dudit flux binaire ; - prédire la taille binaire desdits valeurs de codage récupérées, et éventuellement prédire des valeurs de codage récupérées de sorte à former une pluralité prédite de valeurs de codage ; - réaligner, à l'aide desdites tailles binaires prédites, les valeurs de codage de ladite pluralité récupérée pour correspondre à un alignement binaire donné, lequel peut notamment être celui des valeurs de codage de la pluralité prédite ; - valider la prédiction d'au moins une partie des tailles binaires, par exemple en vérifiant la prédiction des valeurs de codage par comparaison des pluralités prédite et réalignée ; - traiter les événements correspondant aux tailles binaires dont la prédiction est validée. A l'aide d'instructions uniques à multiples données (SIMD) notamment, ces étapes conduisant au réalignement et celles éventuellement de vérification peuvent être menées simultanément sur un grand nombre d'événements codés. Comme on le verra par la suite en détail, un élément clé du décodage efficace selon l'invention à l'aide typiquement d'instructions SIMD est la détermination au préalable (par prédiction) des tailles compactées des valeurs de codage, afin d'identifier chacune des valeurs de codage dans le flux EXI et de procéder au décodage des événements correspondant à ces valeurs, en une seule fois. Le réalignement des valeurs de codage avec celles prédites permet de procéder à une vérification de celles-ci par comparaison afin d'en déduire si les prédictions sont exactes et donc si les tailles prédites sont aussi exactes. Ainsi toutes les valeurs qui précèdent la première valeur mal prédite ont été correctement délimitées dans le flux binaire EXI, et cela de façon simultanée grâce aux instructions SIMD. Le décodage des événements correspondants à ces valeurs délimitées peut alors être mené de façon classique en faisant correspondre ces valeurs avec les priorités des grammaires EXI ou les index des dictionnaires de décodage. The information storage means and computer program have characteristics and advantages similar to the processes they implement. Thanks to the invention, the binary stream decoding, for example of the EXI type, is improved by decompressing, in a group of instructions, a plurality of EXI events coded in compacted form ("bit-packed"). Other features and advantages of the invention will become apparent from the following description, illustrated by the accompanying drawings, in which: FIG. 1 shows an example of EXI grammars embodying the present invention; FIGS. 2a to 2c illustrate the constitution of an exemplary bit stream to be processed by the invention, as well as such an example before and after decompacting; FIG. 3 represents, in the form of a flow chart, general decoding steps according to the invention; FIG. 4 represents, in the form of a flow chart, steps for updating a simple prediction according to the invention, implemented during the decoding of FIG. 3; FIG. 5 represents, in the form of a flow chart, steps of construction of prediction sequences according to the invention, implemented during the decoding of FIG. 3; FIG. 6 illustrates a sequence of predictions according to the invention for the example of FIG. 2; FIG. 7 represents, in the form of a flow chart, decoding steps of the invention implemented during the general decoding of FIG. 3; FIGS. 8a to 8h illustrate the decoding operations of FIG. 7 for the example of FIG. 2; FIG. 9 represents, in the form of a flow chart, steps for updating the prediction sequences according to the invention; and FIG. 10 shows a particular hardware configuration of a decoding or encoding device suitable for carrying out the method according to the invention. The present invention is in particular implemented for the decoding of a bit stream, of the EXI type in the following description, corresponding to an encoded XML structured document, the bit stream comprising event coding values, the method comprising the steps of: - recovering a plurality of consecutive event coding values from said bit stream; predicting the binary size of said retrieved encoding values, and optionally predicting retrieved encoding values to form a predicted plurality of encoding values; realigning, with the aid of said predicted bit sizes, the coding values of said recovered plurality to correspond to a given bit alignment, which may notably be that of the coding values of the predicted plurality; - Validate the prediction of at least a portion of the bit sizes, for example by checking the prediction of the coding values by comparison of the predicted and realigned pluralities; - handle the events corresponding to the binary sizes whose prediction is validated. By means of unique instructions with multiple data (SIMD) in particular, these steps leading to realignment and those possibly verification can be conducted simultaneously on a large number of coded events. As will be discussed hereinafter in detail, a key element of the efficient decoding according to the invention typically using SIMD instructions is the prior determination (by prediction) of the compacted sizes of the coding values, in order to identify each of the encoding values in the EXI flow and to decode the events corresponding to these values, at one time. The realignment of the coding values with those predicted makes it possible to verify them by comparison in order to deduce from them whether the predictions are accurate and therefore whether the predicted sizes are also accurate. Thus all the values which precede the first badly predicted value have been correctly delimited in the EXI bit stream, and this simultaneously thanks to the SIMD instructions. The decoding of the events corresponding to these delimited values can then be carried out in a conventional manner by matching these values with the priorities of the EXI grammars or the indexes of the decoding dictionaries.
On constate donc que la prédiction exacte de toutes les valeurs de codage peut être optionnelle, le principal étant de prédire la taille utilisée dans le flux EXI pour coder cette valeur. Il est intéressant, pour valider la prédiction, de disposer d'un certain nombre de valeurs dont on peut obtenir une prédiction supposée certaine. C'est le cas des priorités utilisées pour les productions EXI, au contraire des contenus associés aux événements (valeur d'un attribut par exemple) qui sont généralement fortement variables. Dans le mode de réalisation préféré de l'invention, les grammaires EXI sont adaptées, comme illustré par la figure 1, pour permettre la génération de prédictions. Pour rappel, les grammaires EXI 10 comprennent des productions 11 qui associent un événement EXI 12 (correspondant à un type d'événement XML) à une valeur de codage 13 (ou "priorité"). Sur la figure 1, on associe en outre aux productions 11 des prédictions dites "simples" 14 consistant, pour la majorité des productions, à indiquer la production utilisée à la suite de cette première production pour traiter l'événement de même profondeur suivant celui traité par cette production. La "profondeur" ici a le même sens que la "profondeur" des éléments XML au sein du document XML 1. Chaque prédiction simple 14 de production 11 contient une information statistique (non représentée) sur la ou les productions effectivement utilisées lors des occurrences de la production 11. Par exemple, le modèle de prédiction simple 14 de production utilisé est un système avec deux états de probabilité et une prédiction. Les deux états correspondent à "peu probable" et "très probable". It is therefore found that the exact prediction of all the coding values can be optional, the main one being to predict the size used in the EXI flow to code this value. It is interesting, to validate the prediction, to have a certain number of values from which we can obtain a certain prediction. This is the case of the priorities used for EXI productions, unlike the content associated with the events (value of an attribute for example) which are generally highly variable. In the preferred embodiment of the invention, the EXI grammars are adapted, as illustrated in FIG. 1, to allow the generation of predictions. As a reminder, the EXI grammars 10 include productions 11 which associate an event EXI 12 (corresponding to an XML event type) to a coding value 13 (or "priority"). In FIG. 1, production 11 is also associated with so-called "simple" predictions 14 which, for the majority of productions, indicate the production used after this first production to treat the event of the same depth following that treated. by this production. The "depth" here has the same meaning as the "depth" of the XML elements within the XML document 1. Each simple production prediction 14 contains statistical information (not shown) on the production (s) actually used during the occurrences of For example, the simple production prediction model 14 used is a system with two states of probability and a prediction. Both states are "unlikely" and "very likely".
Les données statistiques peuvent être collectées dans un premier temps à partir du document EXI 2 à décoder ou par l'intermédiaire du codage/décodage de données XML similaires aux données à coder/décoder. Ces données statistiques peuvent aussi être initialisées à partir d'un schéma XML. Dans le cadre d'un mode préféré de mise en oeuvre, on se limite à récupérer les données statistiques au fur et à mesure du décodage des données EXI. Le principal avantage est un coût très faible en termes de complexité calculatoire et de temps de traitement tout en conservant des performances de prédiction intéressantes. Ainsi, au début du décodage, l'état initial d'une prédiction simple 14 est "peu probable" avec aucune production associée. The statistical data can be collected initially from the document EXI 2 to be decoded or through the coding / decoding of XML data similar to the data to be encoded / decoded. This statistical data can also be initialized from an XML schema. In the context of a preferred mode of implementation, it is limited to recover the statistical data as the decoding EXI data. The main advantage is a very low cost in terms of computational complexity and processing time while maintaining interesting predictive performance. Thus, at the beginning of the decoding, the initial state of a simple prediction 14 is "unlikely" with no associated production.
Puis au cours du décodage, lorsqu'une production est utilisée, la mise à jour de la prédiction simple se fait comme suit : - si cette production utilisée correspond à celle de la prédiction simple 14 associée à la production précédente, l'état de cette prédiction simple passe de "peu probable" à "très probable", ou reste à "très probable" ; - si cette production utilisée ne correspond pas à celle de la prédiction simple et que l'état est "peu probable", alors le modèle de prédiction remplace l'ancienne production prédite 14 par cette nouvelle production, avec un état "peu probable" associé. C'est aussi le traitement qui est réalisé si le modèle ne contenait pas de production du fait de l'état initial par exemple ; - enfin, si cette production ne correspond pas à celle de la prédiction simple 14 mais que l'état est "très probable", l'état passe à "peu probable". Dans ce modèle, la production simple contenue 14 est celle qui est retournée quand un algorithme recherche une production simple à partir de la production courante 11. Dans une variante, la production contenue n'est retournée que si l'état est à "très probable" (aucune prédiction n'étant alors réalisée depuis cette production courante 11 pour un état "peu probable"). Cette modélisation des prédictions simples 14 permet de mémoriser et de conserver une production utilisée fréquemment dans une circonstance particulière. Toutefois d'autres modèles plus complexes peuvent être mis en oeuvre, en conservant par exemple une liste des dernières productions utilisées suite à la production courante 11 et en retournant la production la plus utilisée. Dans ce cas, chaque prédiction simple 14 contient une ou plusieurs productions probables, avec éventuellement des taux de probabilité correspondant. Toujours en référence à la figure 1, pour chaque production 11 correspondant à un événement EXI ou XML ayant une valeur ou un contenu (c'est le cas des attributs qui prennent une valeur, des contenus textuels, des débuts d'élément dont le nom n'est pas précisé, ou encore des commentaires et instructions de traitement), une prédiction simple 15 portant sur ce contenu est associée à la production 11. Then during the decoding, when a production is used, the update of the simple prediction is as follows: - if this production used corresponds to that of the simple prediction 14 associated with the previous production, the state of this simple prediction goes from "unlikely" to "very likely", or stays at "very likely"; - if this production used does not correspond to that of the simple prediction and the state is "unlikely", then the prediction model replaces the old production predicted by this new production, with an "unlikely" associated state . It is also the treatment that is carried out if the model did not contain production because of the initial state for example; - finally, if this production does not correspond to that of the simple prediction 14 but that the state is "very probable", the state passes to "not probable". In this model, the simple contained production 14 is the one that is returned when an algorithm looks for a simple production starting from the current production 11. In a variant, the contained production is returned only if the state is at "very probable "(no prediction then being made since this current production 11 for an" unlikely "state). This modeling of simple predictions 14 makes it possible to memorize and preserve a production frequently used in a particular circumstance. However other more complex models can be implemented, for example by keeping a list of the last productions used following the current production 11 and by returning the most used production. In this case, each simple prediction 14 contains one or more probable productions, possibly with corresponding probability ratios. Still with reference to FIG. 1, for each production 11 corresponding to an EXI or XML event having a value or a content (this is the case for attributes that take a value, textual contents, elementary beginnings, the name of which is not specified, or comments and processing instructions), a simple prediction 15 relating to this content is associated with the production 11.
Dans une mise en oeuvre particulière de l'invention, seuls les événements correspondant à une valeur textuelle ou un attribut dont le nom est précisé ont des prédictions simples de contenu 15 associées. En effet, les autres événements sont soit trop peu fréquents pour qu'il soit intéressant de les traiter (en particulier pour les commentaires ou les instructions de traitement), soit trop variables pour pouvoir réaliser des prédictions correctes sur leur contenu et surtout sur la taille (c'est le cas des événements représentant un attribut dont le nom n'est pas précisé). Pour les productions 11 correspondant à une valeur textuelle ou un attribut, les prédictions simples 15 de contenu sont composées d'un état et du type de codage pour la valeur textuelle. Comme pour les prédictions simples 14 de production, cet état peut par exemple prendre deux valeurs "peu probable" et "très probable". Le type de codage indiqué est soit la table d'index local, soit la table d'index global, soit la longueur de la chaîne dans le cas d'un codage littéral. In a particular embodiment of the invention, only events corresponding to a textual value or an attribute whose name is specified have associated simple content predictions. Indeed, other events are either too infrequent to be interesting to treat (especially for comments or treatment instructions), too variable to be able to make correct predictions about their content and especially about the size (This is the case of events representing an attribute whose name is not specified). For productions 11 corresponding to a textual value or attribute, the simple content predictions are composed of a state and the type of encoding for the textual value. As for simple production predictions 14, this state can for example take two values "unlikely" and "very likely". The type of encoding shown is either the local index table, the global index table, or the length of the string in the case of literal encoding.
La mise à jour des prédictions simples 15 de contenu est similaire à celle des prédictions simples 14 de production. Comme on le verra par la suite, l'invention offre un décodage de flux EXI efficace en délimitant simultanément plusieurs valeurs de codage dans ledit flux EXI, dans la mesure où leur taille binaire dans le flux EXI peut être prédite. The updating of the simple content predictions is similar to that of the simple production predictions. As will be seen later, the invention provides efficient EXI flow decoding by simultaneously delimiting several coding values in said EXI flow, since their binary size in the EXI flow can be predicted.
Les prédictions simples 14 de production, étant plus cernables, serviront à valider les prédictions de tailles. Comme illustré par la figure 1, une prédiction simple 16 est également associée à chaque grammaire représentant le début du contenu d'un élément (c'est-à-dire la grammaire utilisée après avoir traité la balise de début d'élément ouvrant ledit élément). Cette prédiction concerne la production utilisée pour traiter le premier événement représentant une partie du contenu de cet élément. Dans notre exemple, il s'agit de l'événement AT(title). Simple production predictions, being more reliable, will be used to validate size predictions. As illustrated in FIG. 1, a simple prediction 16 is also associated with each grammar representing the beginning of the content of an element (that is, the grammar used after processing the element start tag opening said element. ). This prediction concerns the production used to process the first event that represents part of the content of this element. In our example, this is the AT event.
La mise à jour de cette prédiction simple 16 est similaire à celle des prédictions simples 14 et 15 décrite ci-dessus. The updating of this simple prediction 16 is similar to that of the simple predictions 14 and 15 described above.
Enfin, afin d'améliorer les performances de prédiction selon l'invention, on associe une séquence de prédictions 17 à chacune des grammaires représentant le début du contenu d'un élément. Cette séquence de prédictions 17 liste en particulier des informations de prédictions simples pour plusieurs événements consécutifs, ici AT(title), puis SE(firstname), etc. Finally, to improve the prediction performance according to the invention, a sequence of predictions 17 is associated with each of the grammars representing the beginning of the content of an element. This prediction sequence 17 lists in particular simple prediction information for several consecutive events, here AT (title), then SE (firstname), etc.
Comme il sera décrit ci-après en référence à la figure 5, cette séquence de prédictions 17 est construite, pour la grammaire 10, à partir des prédictions simples 14, 15 et 16. As will be described hereinafter with reference to FIG. 5, this prediction sequence 17 is constructed, for grammar 10, from simple predictions 14, 15 and 16.
Selon une réalisation de l'invention, la prédiction des tailles binaires des valeurs de codage d'événements est réalisée à l'aide de cette séquence de prédictions 17. According to one embodiment of the invention, the prediction of the bit sizes of the event coding values is carried out using this prediction sequence 17.
Une séquence de prédictions 17 est constituée d'un ensemble 15 d'informations (dont un exemple plus détaillé est fourni dans la suite en référence à la figure 6). A prediction sequence 17 consists of a set of information (a more detailed example of which is provided below with reference to FIG. 6).
La première de ces informations est une liste des tailles binaires 20 de valeurs de codage correspondant aux événements prédits dans la séquence, dans le format compacté utilisé lors du codage binaire EXI The first of these information is a list of bit sizes 20 of encoding values corresponding to the events predicted in the sequence, in the compacted format used in EXI binary coding
20 (fournissant le flux EXI 2). La taille binaire d'une valeur de codage est par exemple le nombre minimal de bits nécessaires pour coder l'ensemble des valeurs de codage. Comme expliqué précédemment en lien avec les priorités EXI, cette taille peut être la somme des nombres minimaux de bits pour coder 20 (providing the flow EXI 2). The binary size of an encoding value is for example the minimum number of bits needed to encode the set of encoding values. As previously explained in relation to the EXI priorities, this size can be the sum of the minimum number of bits to code
l'ensemble des trois priorités d'une même grammaire: 25 L [log2(nombre de priorités i)1 où [1 est la valeur entière supérieure. i=1,2,3 La deuxième de ces informations est une liste des valeurs de codage 21 prédites. Ces valeurs de codage sont mémorisées dans le format dans lequel le décodeur les manipule, généralement chaque valeur étant exprimée sur un octet. the set of three priorities of the same grammar: 25 L [log2 (number of priorities i) 1 where [1 is the upper integer value. i = 1,2,3 The second of this information is a list of predicted coding values 21. These encoding values are stored in the format in which the decoder manipulates them, typically each value being expressed in one byte.
30 Ces valeurs correspondent, dans le cas d'événements structurels EXI, aux priorités 13 correspondantes. On notera que pour certaines valeurs, il peut ne pas y avoir de valeur prédite car la valeur n'influe pas sur la suite du décodage, seule la connaissance de la taille binaire de la valeur de codage compacté est nécessaire. C'est le cas par exemple pour les valeurs représentant un caractère, ou pour les valeurs représentant un index dans une table de valeurs. These values correspond, in the case of EXI structural events, to the corresponding priorities 13. Note that for some values, there may not be a predicted value because the value does not affect the subsequent decoding, only the knowledge of the bit size of the compacted coding value is necessary. This is the case, for example, for values representing a character, or for values representing an index in a table of values.
La troisième de ces informations est un ensemble de liens 22 (par exemple des pointeurs informatiques) vers des productions 11 ou grammaires 10 correspondant aux valeurs de codage 21. Ces liens permettent à l'algorithme de décodage de redémarrer quand une erreur de prédiction survient, en se rattachant par exemple à la dernière production correctement prédite. Notamment, on peut prévoir que seules les valeurs de codage 21 correspondant à une priorité ont une telle information associée. Enfin, à chaque séquence de prédictions sont associées des statistiques (non représentées) indiquant la pertinence de cette séquence. Ces statistiques sont décrites par la suite en référence à la figure 9 lors de la mise à jour des séquences de prédictions. Dans la suite de la description, on s'intéresse au décodage d'un flux EXI 2 codé en mode "bit-packed" pour lequel le décompactage ou ré-alignement des valeurs de codage est réalisé en utilisant des instructions SIMD portant sur des opérandes, par exemple, de 128 bits. Cela permet ainsi de décompacter simultanément 16 valeurs de 8 bits (c'est-à-dire 16 octets au total). Toutefois, il n'y a aucune difficulté pour l'homme du métier à étendre l'invention à des tailles d'opérandes différentes et/ou à des formats de valeurs décompactées différents de 8 bits. Pour des raisons de simplicité d'explication, la description qui suit s'appuie sur un exemple de décodage de 8 valeurs, c'est-à-dire que le nombre de valeurs de cet exemple a été diminué de moitié par rapport aux algorithmes décrits. Toutefois, l'extension de cet exemple à un exemple de 16 valeurs est immédiate. La figure 2a illustre l'exemple pour la suite de la description, en listant huit types de valeurs (première colonne) présentes dans le flux EXI 2 (codé avec l'option "bit-packed") que l'on souhaite décompacter simultanément avant décodage. La deuxième colonne renseigne la taille binaire des valeurs de codage correspondantes dans le flux EXI 2. La figure 2b montre le flux EXI avec ces huit valeurs 30. A titre d'exemple, la première valeur de codage vaut "001", la deuxième "00", la troisième "0100", etc. Les indications "+" et "-" en dessous permettent de délimiter chacune de ces huit valeurs (jusqu'aux symboles "." qui désignent la suite du flux EXI qui peut initialement être chargée en mémoire). Afin de pouvoir être traitées pour le décodage, ces valeurs de codage 30 doivent être décompactées pour obtenir un flux similaire au flux illustré à la figure 2c. Dans ce flux, chaque valeur de codage a été réalignée sur un octet (8 bits). Ce réalignement nécessite l'introduction de bits d'alignement dont la valeur est '0' (indiqués dans le flux réaligné par des "."). On décrit maintenant, en référence à la figure 3, un algorithme général de décodage selon l'invention. The third of this information is a set of links 22 (for example computer pointers) to productions 11 or grammars 10 corresponding to the coding values 21. These links allow the decoding algorithm to restart when a prediction error occurs, for example, to the last correctly predicted production. In particular, it can be provided that only the coding values 21 corresponding to a priority have such associated information. Finally, for each sequence of predictions are associated statistics (not shown) indicating the relevance of this sequence. These statistics are described later with reference to FIG. 9 during the updating of the prediction sequences. In the rest of the description, we are interested in the decoding of an EXI 2 stream coded in "bit-packed" mode for which the decompacting or re-alignment of the coding values is carried out using SIMD instructions relating to operands. for example, 128 bits. This makes it possible to simultaneously decompose 16 values of 8 bits (that is to say 16 bytes in total). However, there is no difficulty for those skilled in the art to extend the invention to different operand sizes and / or decompact size formats different from 8 bits. For the sake of simplicity of explanation, the following description is based on an example of decoding of 8 values, that is to say that the number of values of this example has been halved compared to the algorithms described. . However, extending this example to an example of 16 values is immediate. FIG. 2a illustrates the example for the rest of the description, by listing eight types of values (first column) present in the EXI 2 stream (coded with the "bit-packed" option) that we wish to uncompress simultaneously before decoding. The second column informs the bit size of the corresponding coding values in the flow EXI 2. FIG. 2b shows the flow EXI with these eight values 30. For example, the first coding value is "001", the second is "001". 00 ", the third" 0100 ", etc. The indications "+" and "-" below allow to delimit each of these eight values (up to the symbols "." Which designate the continuation of the flow EXI which can initially be loaded in memory). In order to be processed for decoding, these coding values must be decompacted to obtain a flux similar to the flux illustrated in FIG. 2c. In this stream, each encoding value was realigned on one byte (8 bits). This realignment requires the introduction of alignment bits whose value is '0' (indicated in the stream realigned with "."). We will now describe, with reference to FIG. 3, a general decoding algorithm according to the invention.
Dans une première étape E100, on teste s'il reste des données à décoder, c'est-à-dire des valeurs de codage (ou événements codés) dans le flux EXI 2. Si ce n'est pas le cas, l'algorithme se termine à l'étape E110. Si au contraire il reste des événements à décoder, l'algorithme se poursuit à l'étape E120 en testant si une séquence de prédictions 17 est associée à la grammaire courante (c'est-à-dire à la grammaire devant être utilisée pour décoder la valeur suivante). Si c'est le cas (sortie oui de l'étape E120), l'algorithme se poursuit à l'étape E130 en procédant au décodage prévu par l'invention. Ce décodage utilise la séquence de prédictions 17 pour décompacter simultanément un ensemble de valeurs de codage 30, notamment les huit valeurs de notre exemple ci-dessus. Ce décodage est décrit ci-après en référence à la figure 7. Après cette étape, l'algorithme retourne à l'étape El 00 pour traiter des données suivantes à décoder. In a first step E100, it is tested whether there remains data to be decoded, that is to say coding values (or coded events) in the flow EXI 2. If this is not the case, the algorithm ends in step E110. If, on the other hand, there are still events to be decoded, the algorithm continues in step E120 by testing whether a prediction sequence 17 is associated with the current grammar (that is, with the grammar to be used for decoding). the next value). If this is the case (yes output of step E120), the algorithm continues in step E130 by performing the decoding provided by the invention. This decoding uses the prediction sequence 17 to simultaneously decompose a set of encoding values 30, including the eight values of our example above. This decoding is described below with reference to FIG. 7. After this step, the algorithm returns to step El 00 to process subsequent data to be decoded.
Dans le cas où aucune séquence 17 n'est détectée (sortie non de l'étape E120), l'algorithme se poursuit à l'étape E140 en testant si une prédiction simple 14, 15 ou 16 est disponible. In the case where no sequence 17 is detected (non-output of step E120), the algorithm continues in step E140 by testing whether a simple prediction 14, 15 or 16 is available.
De préférence, ce test est réalisé de la manière suivante. En premier lieu, l'algorithme vérifie si la grammaire courante 10 correspond au début du contenu d'un élément XML. Si ce n'est pas le cas, aucune prédiction simple 14, 15 ou 16 n'est disponible. Si c'est le cas, l'algorithme vérifie si une prédiction simple 16 est associée à cette grammaire 10. Dans une variante, le test recherche aussi les prédictions simples pour une grammaire courante ne correspondant pas au début du contenu d'un élément. Dans un tel cas, comme aucune prédiction simple 16 n'est associée à une telle grammaire 10, la recherche s'effectue à partir de la dernière production utilisée : l'algorithme vérifie si une prédiction simple 14 ou 15 est associée à la dernière production utilisée. Si une prédiction simple 14, 15 ou 16 est disponible, l'algorithme se poursuit à l'étape E150, qui procède à la construction d'une séquence 17 de productions prédites (pour la grammaire courante) à partir de cette prédiction simple 14, 15 ou 16. Cette étape est décrite plus en détail ci-après, en référence à la figure 5. Après l'étape E150, l'algorithme utilise la séquence de prédictions 17 ainsi construite pour réaliser un décodage selon l'invention lors de l'étape E130. Si aucune prédiction simple 14, 15 ou 16 n'est disponible, l'algorithme se poursuit à l'étape E160 au cours de laquelle un décodage classique est réalisé. Un tel décodage classique permet, bien entendu, de mettre à jour (étape E170) les prédictions simples 14, 15 ou 16 en modifiant par exemple les états "très probable" ou "peu probable" évoqués précédemment. Cette mise à jour permet notamment d'ajouter des prédictions simples pour des productions 11 ou des grammaires 10 qui n'en disposaient pas. En référence à la figure 4, cette mise à jour E170 comprend une première étape E200 consistant à obtenir la production utilisée lors du décodage classique E160 et celle correspondant à la prédiction simple 14, 15 ou 16 à mettre à jour. A l'étape suivante E210, on met à jour les statistiques de la prédiction simple 14, 15 ou 16. Preferably, this test is carried out as follows. First, the algorithm checks whether the current grammar corresponds to the beginning of the content of an XML element. If this is not the case, no simple prediction 14, 15 or 16 is available. If so, the algorithm checks whether a simple prediction 16 is associated with this grammar 10. In a variant, the test also looks for simple predictions for a current grammar that does not correspond to the beginning of the content of an element. In such a case, since no simple prediction 16 is associated with such a grammar 10, the search is made from the last production used: the algorithm checks whether a simple prediction 14 or 15 is associated with the last production. used. If a simple prediction 14, 15 or 16 is available, the algorithm continues in step E150, which proceeds to the construction of a sequence 17 of predicted outputs (for the current grammar) from this simple prediction 14, 15 or 16. This step is described in more detail below, with reference to FIG. 5. After step E150, the algorithm uses the prediction sequence 17 thus constructed to perform a decoding according to the invention during the first time. step E130. If no simple prediction 14, 15 or 16 is available, the algorithm continues in step E160 in which a conventional decoding is performed. Such a conventional decoding makes it possible, of course, to update (step E170) the simple predictions 14, 15 or 16 by modifying, for example, the "very probable" or "unlikely" states mentioned above. This update makes it possible to add simple predictions for productions 11 or grammars 10 that did not have any. With reference to FIG. 4, this update E170 comprises a first step E200 consisting of obtaining the production used during the conventional decoding E160 and that corresponding to the simple prediction 14, 15 or 16 to be updated. In the next step E210, the statistics of the simple prediction 14, 15 or 16 are updated.
Puis, lors de l'étape E220, on met à jour la liste des productions prédites. Dans la mise en oeuvre préférée de l'invention, aussi bien pour les prédictions simples de production que pour les prédictions simples de contenu, 5 ces deux étapes E210 et E220 sont fusionnées. De retour à la figure 3, après la mise à jour E170 de la prédiction simple associé à la production précédente 11 ou à la grammaire courante 10, le décodage se poursuit à l'étape E100 par la prise en compte de données suivantes. 10 On décrit maintenant, en référence à la figure 5, l'étape E150 de construction d'une nouvelle séquence de prédictions 17 pour une grammaire 10. On rappelle ici qu'une séquence de prédictions 17 comprend une liste de tailles binaires 20 correspondant au format compacté du flux EXI 2, une liste de valeurs de codage prédites 21 mémorisées chacune dans un format non 15 compacté, par exemple sur un octet, et un ensemble de liens 22. Lors du démarrage de l'algorithme de construction d'une séquence de prédictions 17, une grammaire 10 correspondant au début du contenu d'un élément XML est sélectionnée. Cette grammaire 10 est l'objet courant initial pour l'algorithme. Toutefois, dans d'autres mises en oeuvre de l'invention dont 20 les adaptations sont à la portée de l'homme du métier, d'autres types d'objets (notamment d'autres grammaires ou des productions) peuvent être sélectionnés au démarrage de cet algorithme. La première étape E300 consiste à obtenir la ou les prédictions simples 14, 15, 16 associées à l'objet courant. 25 Dans le cas d'une grammaire 10 de début de contenu d'élément, il s'agit de la prédiction simple 16 de production associée à cette grammaire 10. Dans le cas d'une production 11 correspondant à un événement sans contenu, il s'agit de la prédiction simple 14 de production associée à cette production. 30 Dans le cas d'une production 11 représentant un contenu textuel ou un attribut dont le nom est précisé, il s'agit de la prédiction simple 15 de contenu correspondant à la valeur, et de la prédiction simple 14 de production associée à cette production. Lors de l'étape suivante E310, on ajoute cette ou ces prédictions 14, 15, 16 à la séquence de prédictions 17, tout en conservant l'ordre dans lequel elles sont utilisées pour le traitement du flux EXI 2. Cet ajout consiste à renseigner, si possible, la taille binaire 20, la valeur de codage prédite 21 et le lien 22. En particulier, pour une prédiction simple 14 ou 16 de production, les informations suivantes sont utilisées : - la taille binaire 20 de la valeur à décoder 30 dans le format utilisé lors du codage. Cette taille binaire "compactée" est fonction du nombre de productions possibles au niveau de la prédiction, comme il est décrit dans la spécification EXI ; - la valeur de codage prédite 21 qui est la valeur de priorité correspondant à la production prédite ; et - le lien 22 qui pointe sur la grammaire contenant la production prédite (si la production a été prédite de manière erronée, il faudra utiliser cette grammaire pour commencer de nouveau le décodage normal du document EXI 2). Then, during step E220, the list of predicted productions is updated. In the preferred embodiment of the invention, for both simple production predictions and simple content predictions, these two steps E210 and E220 are merged. Returning to FIG. 3, after the update E170 of the simple prediction associated with the previous production 11 or the current grammar 10, the decoding continues in step E100 by taking into account the following data. Referring now to FIG. 5, step E150 for constructing a new prediction sequence 17 for a grammar 10 is described. It will be recalled here that a prediction sequence 17 comprises a list of bit sizes 20 corresponding to the EXI 2 stream compact format, a list of predicted coding values 21 each stored in an uncompressed format, for example on a byte, and a set of links 22. When starting the algorithm for constructing a sequence predictions 17, a grammar 10 corresponding to the beginning of the content of an XML element is selected. This grammar 10 is the initial current object for the algorithm. However, in other embodiments of the invention, the adaptations of which are within the abilities of those skilled in the art, other types of objects (in particular other grammars or productions) can be selected at startup. of this algorithm. The first step E300 consists in obtaining the simple prediction (s) 14, 15, 16 associated with the current object. In the case of a element content start grammar, it is the simple production prediction associated with this grammar 10. In the case of a production 11 corresponding to an event without content, This is the simple prediction 14 of production associated with this production. In the case of a production 11 representing a textual content or an attribute whose name is specified, it is the simple prediction of content corresponding to the value, and the simple production prediction associated with this production. . In the next step E310, this or these predictions 14, 15, 16 are added to the prediction sequence 17, while keeping the order in which they are used for the processing of the EXI 2 flow. This addition consists in informing if possible, the bit size 20, the predicted coding value 21 and the link 22. In particular, for a simple production prediction 14 or 16, the following information is used: the bit size 20 of the value to be decoded in the format used during the coding. This "compacted" bit size is a function of the number of possible productions at the prediction level, as described in the EXI specification; the predicted coding value 21 which is the priority value corresponding to the predicted production; and - the link 22 which points to the grammar containing the predicted output (if the production has been erroneously predicted, it will be necessary to use this grammar to start again the normal decoding of the document EXI 2).
Pour une prédiction simple 15 de contenu, les informations dépendent du type de codage de la valeur: valeur indexée ou valeur codée littéralement. Dans le cas d'une valeur indexée (localement ou globalement), deux valeurs sont prédites et insérées dans la séquence 17 : une valeur correspondant à l'indication d'une valeur indexée, et une valeur d'index. Pour la valeur indicative, les informations suivantes sont utilisées : - la taille binaire 20 de la valeur à décoder qui est généralement de 8 bits ; - la valeur de codage prédite 21 qui est celle permettant d'encoder le type d'index utilisé: 0 pour un index local, 1 pour un index global ; et - aucun lien n'est associé. Pour la valeur d'index, les informations suivantes sont utilisées : - la taille binaire 20 de la valeur à décoder qui dépend du nombre de valeurs contenues dans l'index ; - la valeur prédite 21 qui n'est pas définie. On n'en tiendra donc pas compte dans la vérification de la prédiction selon l'invention, comme illustré ci-5 après avec la notion de masque de valeurs ; et - aucun lien n'est associé. Dans le cas d'une valeur littérale, plusieurs valeurs sont prédites : une valeur correspondant à la longueur de la chaîne et un ensemble de valeurs représentant chacun des caractères de la chaîne. 10 Pour une longueur de la chaîne, les informations suivantes sont utilisées et mémorisées dans la séquence 17 : - la taille binaire 20 de la valeur à décoder qui est le nombre de bits nécessaires à coder cette longueur ; - la valeur prédite 21 est la longueur de la chaîne ; 15 - aucun lien 22 n'est associé. Pour chaque caractère, dans la mise en oeuvre préférée, les informations suivantes sont utilisées : - la taille binaire 20 de la valeur à décoder qui est généralement de 8 bits ; 20 - la valeur prédite 21 qui est partiellement définie : elle doit être inférieure ou égale à 127. En effet, seuls les caractères dont la valeur est inférieure ou égale à 127 sont codés sur 8 bits. Les caractères dont la valeur est supérieure à 127 sont codés sur plus de 8 bits ; - aucun lien 22 n'est associé. 25 Dans une variante de mise en oeuvre concernant les caractères, des statistiques sont réalisées sur la taille des caractères utilisés, soit de manière générale dans le document EXI, soit de manière particulière pour chaque type de valeur. Ces statistiques sont ensuite utilisées pour générer les informations de la séquence de prédictions 17 correspondant aux caractères. En outre, dans 30 un tel cas, il est possible de vérifier que les caractères sont bien codés sur le nombre d'octets prédits en utilisant de manière particulière les valeurs prédites comme décrit ci-après. For a simple content prediction, the information depends on the encoding type of the value: indexed value or literally encoded value. In the case of an indexed value (locally or globally), two values are predicted and inserted in the sequence 17: a value corresponding to the indication of an indexed value, and an index value. For the indicative value, the following information is used: the bit size of the value to be decoded which is generally 8 bits; the predicted coding value 21 which is the one used to encode the type of index used: 0 for a local index, 1 for a global index; and - no link is associated. For the index value, the following information is used: the bit size of the value to be decoded which depends on the number of values contained in the index; the predicted value 21 which is not defined. It will therefore not be taken into account in the verification of the prediction according to the invention, as illustrated hereinafter with the notion of a mask of values; and - no link is associated. In the case of a literal value, several values are predicted: a value corresponding to the length of the string and a set of values representing each character of the string. For a length of the string, the following information is used and stored in sequence 17: the bit size of the value to be decoded which is the number of bits necessary to encode that length; the predicted value 21 is the length of the chain; 15 - no link 22 is associated. For each character, in the preferred implementation, the following information is used: the bit size of the value to be decoded which is generally 8 bits; 20 - the predicted value 21 which is partially defined: it must be less than or equal to 127. Indeed, only the characters whose value is less than or equal to 127 are encoded on 8 bits. Characters with a value greater than 127 are encoded on more than 8 bits; no link 22 is associated. In an implementation variant relating to the characters, statistics are made on the size of the characters used, either generally in the EXI document, or in a particular manner for each type of value. These statistics are then used to generate the information of the prediction sequence 17 corresponding to the characters. In addition, in such a case, it is possible to verify that the characters are well encoded on the number of predicted bytes, particularly using the predicted values as described hereinafter.
On note que dans notre exemple ci-dessus, on considère que chaque valeur prédite 21 insérée dans la séquence 17 est exprimée sur un octet (8 bits). Toutefois, dans certains cas ces valeurs doivent être codées sur plusieurs octets (en raison de la grande valeur qu'elles prennent). Dans ce cas, une adaptation peut être menée selon laquelle ces valeurs sont ajoutées à la séquence 17 comme des ensembles de valeurs (partielles) codées chacune sur un octet. On poursuit la création de la séquence 17 avec l'étape E320 qui consiste à obtenir l'objet suivant (grammaire ou production généralement). Note that in our example above, it is considered that each predicted value 21 inserted in the sequence 17 is expressed in one byte (8 bits). However, in some cases these values must be encoded in several bytes (because of the great value they take). In this case, an adaptation can be carried out according to which these values are added to the sequence 17 as sets of (partial) values each coded on one byte. The creation of the sequence 17 is continued with the step E320 which consists of obtaining the following object (grammar or production generally).
Si l'objet courant est une grammaire 10 ou une production 11 ne correspondant pas à une fin d'élément (EE dans le langage EXI), alors l'objet suivant est la production prédite 14/16. Si cette production prédite 14/16 correspond à un début d'élément (noté SE en EXI), alors cette production prédite est mémorisée et l'objet suivant 15 devient la grammaire 10 correspondant à ce début d'élément. Si l'objet courant est une production 11 correspondant à une fin d'élément (EE), alors l'objet suivant est la production (SE) décrivant le début de l'élément suivant l'élément courant, si elle a été mémorisée précédemment (voir ci-dessus). Ceci permet d'utiliser, comme prédiction suivante, la prédiction 14 20 liée à la production 11 du début de l'élément suivant, qui décrit ce qui suit l'élément courant (une fois ce dernier entièrement traité). En d'autres termes, la prédiction concerne l'événement de même profondeur dans le document XML 1 suivant l'événement de début d'élément considéré. Si la production n'a pas été mémorisée, l'objet suivant n'est pas 25 défini et l'algorithme se termine à l'étape E340. Si l'objet suivant est défini, il devient l'objet courant, et l'algorithme vérifie, à l'étape E330, que cet objet courant possède bien une ou plusieurs prédictions simples 14, 15 ou 16. Cette étape consiste à vérifier, d'une part, que cet objet courant peut 30 bien être associé à des prédictions simples (par exemple, l'objet courant ne doit pas être une production représentant un commentaire), et, d'autre part, que toutes les prédictions simples 14, 15, 16 associées à cet objet courant ont bien une prédiction définie. Dans l'affirmative de l'étape E330, le traitement de construction de la séquence 17 se poursuit en retournant à l'étape E300 pour intégrer ces nouvelles prédictions simples à la séquence 17. Dans la négative, le traitement prend fin à l'étape E340. On observe que dans le cas où un objet suivant est une grammaire correspondant à un début d'élément et que cette grammaire comprend déjà une séquence de prédictions 17, cette dernière peut être concaténée à la séquence en cours de construction (pour une grammaire précédente) en conservant l'ordre des événements EXI. On accélère ainsi cette opération de construction en évitant de parcourir à nouveau des prédictions simples 14, 15, 16 qui ont déjà permis de créer cette autre séquence 17. Toutefois, si l'on souhaite tenir compte des prédictions simples qui ont été mises à jour, cette concaténation peut être omise. On note également que la première taille binaire 20 d'une séquence 17 est toujours correcte puisqu'elle correspond à la taille de la première valeur encodée pour décrire le début d'élément et que cette taille est connue (fonction du nombre de priorités utilisées dans la grammaire courante). Par contre, la première valeur prédite n'est pas nécessairement correcte. Il en résulte donc un possible décalage au niveau de la vérification des prédictions, duquel on tire une règle pour une mise en oeuvre de l'invention : la première valeur prédite non correcte correspond à une taille prédite correcte (généralement la dernière correctement prédite). If the current object is a grammar 10 or a production 11 that does not correspond to an end of element (EE in the EXI language), then the next object is the predicted output 14/16. If this output predicted 14/16 corresponds to an element start (denoted SE in EXI), then this predicted output is stored and the next object 15 becomes the grammar 10 corresponding to this element start. If the current object is a production 11 corresponding to an end of element (EE), then the next object is the production (SE) describing the beginning of the element following the current element, if it has been memorized previously (see above). This makes it possible to use, as the next prediction, the prediction 14 related to the production 11 of the beginning of the next element, which describes what follows the current element (once the latter has been fully processed). In other words, the prediction concerns the event of the same depth in the XML document 1 according to the element start event considered. If the production has not been stored, the next object is not defined and the algorithm ends in step E340. If the next object is defined, it becomes the current object, and the algorithm checks, in step E330, that this current object has one or more simple predictions 14, 15 or 16. This step consists of checking, on the one hand, that this current object may well be associated with simple predictions (for example, the current object should not be a production representing a comment), and, on the other hand, that all simple predictions 14 , 15, 16 associated with this current object have a prediction defined. In the affirmative of step E330, the construction processing of the sequence 17 continues by returning to step E300 to integrate these new simple predictions into the sequence 17. If not, the processing ends at the step E340. It is observed that in the case where a next object is a grammar corresponding to an element start and this grammar already comprises a prediction sequence 17, the latter can be concatenated to the sequence being constructed (for a previous grammar) keeping the order of EXI events. Thus, this construction operation is accelerated without having to go through again simple predictions 14, 15, 16 which have already made it possible to create this other sequence 17. However, if it is desired to take into account the simple predictions that have been updated. this concatenation can be omitted. Note also that the first bit size 20 of a sequence 17 is always correct since it corresponds to the size of the first encoded value to describe the element start and that this size is known (function of the number of priorities used in the current grammar). On the other hand, the first predicted value is not necessarily correct. This therefore results in a possible offset in the prediction check, from which a rule is derived for an implementation of the invention: the first non-correct predicted value corresponds to a correct predicted size (generally the last correctly predicted).
Par ailleurs, un risque important existe que l'algorithme de construction de la séquence de prédiction 17 boucle sur lui-même de façon infinie, par exemple dans le cas d'un élément souvent répété (la prédiction simple 14 associée à la production 11 de début de cet élément indiquera ce même début d'élément). Pour éviter un tel bouclage, on propose ici des mécanismes d'arrêt de boucle, comme suit : - une première méthode consiste à limiter la longueur des séquences de prédictions 17. Ainsi à l'étape E320, on vérifie également la longueur de la séquence 17 en cours de construction, et on termine le traitement de construction dès que cette longueur est supérieure à une valeur prédéfinie. Par exemple, dès que cette longueur atteint un multiple prédéfini du nombre de valeurs que l'on peut mémoriser dans un opérande d'instruction SIMD ; - une deuxième méthode consiste à détecter les boucles au niveau des prédictions simples 14, 15, 16, par exemple lorsqu'une même prédiction simple (ou un même motif de prédictions simples) est rappelé. Lorsqu'une telle boucle est détectée, l'algorithme se termine après un certain nombre d'itérations de cette boucle. En particulier, on veillera à choisir un nombre d'itérations limitant la taille totale de la séquence 17, mais aussi rendant la taille de la séquence la plus proche possible d'un multiple de 16 (de façon générale, d'un multiple du nombre de valeurs que l'on peut traiter par un seul opérande des instructions SIMD). On optimise ainsi l'utilisation des instructions SIMD dont le remplissage des opérandes est maximisé. Par exemple, si le nombre de prédictions simples 14, 15, 16 correspondant à une itération de la boucle est de 8, alors deux itérations de cette boucle seront effectuées. Si ce nombre est 12, 4 itérations seront effectuées, permettant d'obtenir 4 * 12 = 3 * 16 = 48 prédictions dans la séquence. Furthermore, a significant risk exists that the algorithm for constructing the prediction sequence 17 loops over itself infinitely, for example in the case of an element that is often repeated (the simple prediction 14 associated with the production 11 of beginning of this element will indicate this same element start). To avoid such looping, loop stop mechanisms are proposed here, as follows: a first method consists in limiting the length of the prediction sequences. Thus, in step E320, the length of the sequence is also verified. 17 under construction, and finish construction processing as soon as this length is greater than a predefined value. For example, as soon as this length reaches a predefined multiple of the number of values that can be stored in a SIMD instruction operand; a second method consists in detecting loops at the level of simple predictions 14, 15, 16, for example when the same simple prediction (or the same pattern of simple predictions) is recalled. When such a loop is detected, the algorithm ends after a certain number of iterations of this loop. In particular, care will be taken to choose a number of iterations limiting the total size of the sequence 17, but also making the size of the sequence as close as possible to a multiple of 16 (generally, a multiple of the number values that can be handled by a single operand of the SIMD instructions). This optimizes the use of SIMD instructions whose operand filling is maximized. For example, if the number of simple predictions 14, 15, 16 corresponding to an iteration of the loop is 8, then two iterations of this loop will be performed. If this number is 12, 4 iterations will be made, resulting in 4 * 12 = 3 * 16 = 48 predictions in the sequence.
En complément, même si le traitement construit une séquence de prédictions 17 ayant la taille maximale autorisée, certaines des prédictions peuvent être supprimées de sorte à arrêter la séquence 17 à un endroit optimal pour commencer une autre séquence de prédictions. Cet endroit optimal peut être le début d'un élément XML ou le début d'un élément auquel est déjà associée une séquence de prédictions dont les statistiques montrent qu'elle est utilisée efficacement. En reprenant l'exemple du tableau de la figure 2a, cet algorithme de génération d'une séquence de prédictions 17 va générer les informations représentées sur la figure 6. In addition, even if the processing constructs a prediction sequence 17 having the maximum allowed size, some of the predictions may be deleted so as to stop the sequence 17 at an optimal place to begin another sequence of predictions. This optimal location can be the beginning of an XML element or the beginning of an element already associated with a sequence of predictions whose statistics show that it is used effectively. Referring again to the example of the table of FIG. 2a, this algorithm for generating a prediction sequence 17 will generate the information represented in FIG. 6.
Dans cet exemple, toutes les valeurs sont indiquées en mode binaire. In this example, all values are shown in binary mode.
La première colonne indique le type de la valeur de codage prédite. Cette colonne est ajoutée pour une meilleure compréhension du tableau et n'est pas présente dans la séquence de prédictions 17. La deuxième colonne contient la taille binaire 20 de la valeur de codage prédite. Cette taille est représentée en tant que valeur binaire ("0000 0011" correspondant par exemple à un taille de "3" bits). La troisième et la quatrième colonne contiennent la valeur de codage prédite 21 dans un format binaire sur un octet et un masque associé 23. Ces valeurs et masques sont utilisés lors de la vérification de la prédiction des tailles binaires 21 comme décrit ci-après. La troisième colonne contient effectivement la valeur de codage prédite quand cette valeur est présente, ou la valeur 0 dans le cas contraire. La quatrième colonne contient un masque permettant de vérifier si la valeur prédite doit être égale à la valeur décodée ou non. Comme expliqué ci-dessus, dans l'exemple illustré ici, on est amené à comparer les priorités pour encoder les productions, alors que certaines valeurs de contenu ne sont pas prises en compte car difficilement prédictibles (donc le masque 23 est agencé pour ne pas en tenir compte et vaut "0"). Le masque permet ainsi de déterminer quelles sont les valeurs qui doivent être vérifiées lors de la vérification de la prédiction des tailles binaires 21. On peut noter le cas particulier de la valeur de type caractère (dernière ligne) : un seul bit du masque est à 1, le bit de poids fort. En effet, lors de la prédiction d'un caractère, la valeur de ce caractère importe peu. Par contre, il est important de vérifier que ce caractère est bien codé sur le nombre d'octets prédits. Dans le cas de l'exemple, le caractère est prédit pour être codé sur un seul octet, ce qui implique d'après la spécification EXI que le bit de poids fort de cet octet soit 0. La valeur prédite 21 et le masque de valeur 23 associés à ce caractère prédit permettent donc de vérifier cette prédiction de bit de poids fort. The first column indicates the type of the predicted encoding value. This column is added for a better understanding of the table and is not present in the prediction sequence 17. The second column contains the bit size of the predicted coding value. This size is represented as a binary value ("0000 0011" corresponding for example to a size of "3" bits). The third and fourth columns contain the predicted encoding value 21 in a one-byte binary format and an associated mask 23. These values and masks are used in the verification of the binary bit prediction 21 as described below. The third column actually contains the predicted encoding value when this value is present, or the value 0 otherwise. The fourth column contains a mask for checking whether the predicted value should be equal to the decoded value or not. As explained above, in the example illustrated here, it is necessary to compare the priorities to encode productions, while some content values are not taken into account because difficult to predict (so the mask 23 is arranged not to take this into account and is worth "0"). The mask thus makes it possible to determine which values are to be verified during the verification of the prediction of the bit sizes 21. It may be noted the particular case of the value of type character (last line): a single bit of the mask is 1, the most significant bit. Indeed, when predicting a character, the value of this character does not matter. On the other hand, it is important to check that this character is well coded on the number of predicted bytes. In the case of the example, the character is predicted to be encoded on a single byte, which implies according to the EXI specification that the most significant bit of this byte is 0. The predicted value 21 and the value mask 23 associated with this predicted character thus make it possible to verify this prediction of the most significant bit.
La cinquième colonne contient un lien 22 vers la grammaire contenant les productions prédites, dans le cas où la prédiction porte sur une production. Ce lien permet de retrouver la grammaire à utiliser en cas d'erreur de prédiction. La sixième colonne contient une indication de ce que représente la valeur prédite 21. Ainsi, dans le cas d'une priorité, cette indication correspond à l'événement représenté par cette priorité. Dans le cas d'une valeur textuelle, cette indication correspond au type de codage de cette valeur et éventuellement comporte un pointeur vers le dictionnaire utilisé pour le codage de cette valeur. Après l'obtention des séquences de prédictions 17 associées à tout ou partie des grammaires EXI, on décrit maintenant, en référence aux figures 7 et 8, l'étape de décodage selon l'invention, correspondant à l'étape E130 de la figure 3. Ce décodage, et plus particulièrement les opérations permettant la délimitation des valeurs de codage présentes dans le flux EXI 2 et leur décompactage pour avoir le même format que les valeurs manipulées dans les grammaires, est réalisé à l'aide d'instructions SIMD, dont une brève présentation est donnée à la fin de la présente description. Lors de la première étape E400, on obtient des prédictions de taille binaire 20 de valeurs de codage du flux EXI à décoder. Ces prédictions sont obtenues à partir de la séquence de prédictions 17 utilisée. Ainsi, dans le cas de l'exemple précédent, ces prédictions sont les tailles 20 décrites dans le tableau de la figure 6. Ces prédictions (chacune sur un octet) sont concaténées dans un registre SIMD (128 bits), tel qu'illustré par la figure 8a. Il est à noter que dans un souci de compacité des exemples, les figures 8a à 8h décrivent des données sur 64 bits uniquement (correspondant à 8 valeurs uniquement au lieu de 16). Le nombre de bits de remplissage pour chaque valeur de codage 30 à décoder est alors calculé, comme suit : 8 ù taille binaire 20, ce qui correspond aux instructions SIMD suivantes. padding size = simd sub 8(simd const 8(8), value size); La figure 8b illustre le nombre de bits de remplissage "padding size" ainsi obtenus. The fifth column contains a link 22 to the grammar containing the predicted productions, in the case where the prediction relates to a production. This link is used to find the grammar to use in case of a prediction error. The sixth column contains an indication of what the predicted value 21 represents. Thus, in the case of a priority, this indication corresponds to the event represented by this priority. In the case of a textual value, this indication corresponds to the type of coding of this value and possibly includes a pointer to the dictionary used for the coding of this value. After obtaining the prediction sequences associated with all or part of the EXI grammars, the decoding step according to the invention, corresponding to the step E130 of FIG. 3, is now described with reference to FIGS. 7 and 8. This decoding, and more particularly the operations allowing the delimitation of the encoding values present in the EXI 2 flow and their decompacting to have the same format as the values manipulated in the grammars, is carried out using SIMD instructions, of which a brief presentation is given at the end of this description. In the first step E400, binary size predictions of encoding values of the flow EXI to be decoded are obtained. These predictions are obtained from the prediction sequence used. Thus, in the case of the previous example, these predictions are the sizes described in the table of FIG. 6. These predictions (each on one byte) are concatenated in a SIMD (128-bit) register, as illustrated by FIG. Figure 8a. It should be noted that for the sake of compactness of the examples, FIGS. 8a to 8h only describe data on 64 bits (corresponding to 8 values only instead of 16). The number of fill bits for each encoding value to be decoded is then calculated as follows: bit size 20, which corresponds to the following SIMD instructions. padding size = simd sub 8 (simd const 8 (8), value size); FIG. 8b illustrates the number of "padding size" padding bits thus obtained.
Il est à noter que si le nombre de prédictions dans la séquence 17 est supérieur à 16, l'ensemble des valeurs correspondant à ces prédictions ne pourra être traité simultanément. Dans ce cas, seules les tailles binaires 20 correspondant aux 16 premières prédictions sont chargés dans le registre SIMD. La deuxième étape E410 est l'obtention des valeurs de codage 30 à décoder, depuis le flux EXI 2. Cette obtention consiste à charger ces valeurs dans un registre SIMD. Il est à noter que dans la plupart des cas, le début de la première valeur à décoder n'est pas aligné sur une limite d'octet (option "bit- packed"). Ceci est à prendre en compte lors du chargement des valeurs et peut être réalisé par des algorithmes classiques. Dans l'exemple précédent, les valeurs chargées dans un registre SIMD sont représentées sur la figure 8c. A ce stade, ne connaissant pas la longueur correspondant aux 16 valeurs, on récupère 128 bits consécutifs du flux. La troisième étape E420 concerne le décompactage proprement dit des valeurs ainsi récupérées, sur la base des tailles binaires prédites. Cette opération permet le réalignement des valeurs de codage récupérées pour correspondre à l'alignement binaire des valeurs manipulées par le décodeur (généralement alignées sur les octets). Ce décompactage est réalisé en trois sous-étapes. La première sous-étape E422 consiste à compter le nombre de bits de remplissage pour une, deux, quatre et huit valeurs (dans notre exemple). Ce comptage est réalisé par les instructions SIMD suivantes : 25 count8 = padding size countl6 simd add 161h(count8, count8); count32 simd add 321h(countl6, countl6); count64 simd add 641h(count32, count32); Ce comptage revient à additionner le nombre de bits de remplissage 30 pour deux valeurs consécutives, ce qui donne la valeur countl6, puis pour quatre et enfin huit valeurs consécutives. Ainsi en reprenant l'exemple, on obtient les comptes de la figure 8d. It should be noted that if the number of predictions in the sequence 17 is greater than 16, the set of values corresponding to these predictions can not be processed simultaneously. In this case, only the bit sizes corresponding to the first 16 predictions are loaded into the SIMD register. The second step E410 is to obtain the coding values to be decoded from the flow EXI 2. This obtaining consists of loading these values into a SIMD register. It should be noted that in most cases, the beginning of the first value to be decoded is not aligned with a byte boundary ("bit-packed" option). This is to be taken into account when loading values and can be achieved by conventional algorithms. In the previous example, the values loaded into a SIMD register are shown in Figure 8c. At this stage, not knowing the length corresponding to the 16 values, 128 consecutive bits of the stream are recovered. The third step E420 concerns the decompacting itself of the values thus recovered, on the basis of the predicted bit sizes. This operation realigns the retrieved encoding values to match the binary alignment of the values manipulated by the decoder (generally octet-aligned). This unpacking is done in three sub-steps. The first substep E422 consists of counting the number of fill bits for one, two, four and eight values (in our example). This count is performed by the following SIMD instructions: count8 = padding size countl6 simd add 161h (count8, count8); count32 simd add 321h (countl6, countl6); count64 simd add 641h (count32, count32); This count amounts to adding the number of fill bits 30 for two consecutive values, which gives the value countl6, then for four and finally eight consecutive values. Thus, taking the example, we obtain the accounts of Figure 8d.
La sous-étape suivante E424 consiste à calculer des masques de décalage de bits à partir des valeurs calculées précédemment. Ces masques de décalage ont pour but, comme décrit ci-après, de décaler progressivement les seize valeurs de codage 30 récupérées pour les aligner avec le format des valeurs manipulées par le décodeur (dans notre exemple, les valeurs sont sur un octet). Le calcul de ces masques de décalage consiste à appliquer les instructions SIMD suivantes: mask8 = simd const 16((1 « 8) - 1); shift8 = simd and(simd srli(count8, 8), mask8); maskl6 = simd const 32((1 « 16) - 1); shiftl6 = simd and(simd srli(countl6, 16), maskl6); mask32 = simd const 64((1 « 32) - 1); shift32 = simd and(simd srli(count32, 32), mask32); mask64 = simd const 128((1 « 64) - 1); shift64 = simd and(simd srli(count64, 64), mask64); Il est à noter que si les masques de décalage (les valeurs shift8, shiftl6...) sont propres à chaque séquence de prédictions, les masques (les valeurs mask8, maskl6...) utilisés pour les calculer sont des constantes qui n'ont pas besoin d'être recalculées à chaque exécution de l'algorithme. D'autre part, ces masques de décalage sont invariants pour une même séquence de prédictions 17 et peuvent donc être mémorisés avec cette séquence. Ceci permet d'accélérer le décodage en occupant cependant plus de mémoire. Des stratégies de mémorisation de ces masques plus élaborées peuvent donc être mises en place. L'application de ces calculs à notre exemple est illustrée par la figure 8e. Enfin, la dernière sous-étape, notée E426, est le décompactage lui-même. Ce décompactage est réalisé en séparant les seize valeurs en deux groupes de huit valeurs, chacune dans une moitié de registre SIMD. Ainsi, chaque groupe de huit valeurs est aligné sur un bloc de 64 bits (correspondant à value64 non représenté sur la figure 8f). Puis le processus est recommencé pour séparer chaque groupe en deux, jusqu'à ce que chaque valeur soit isolée sur un bloc de huit bits (successivement value32, valuel6 et value8 sur la figure 8f). Une dernière opération permet alors d'aligner chacune de ces valeurs (voir bytes sur la figure 8f). On observe d'ailleurs que le décalage de cette étape insère des "0" dans la suite binaire, ce qui a pour autre effet d'expulser, de cette suite, les bits au-delà des 16 valeurs souhaitées (correspondant aux bits marqués d'un "." dans value sur la figure 8f) Ces opérations sont réalisées par les instructions SIMD suivantes: shifted = simd and(simd srl 128(value, shift64), mask64); masked = simd andc(value, mask32); value64 = simd or(shifted, masked); shifted = simd and(simd srl 64(value64, shift32), mask32); masked = simd andc(value64, mask32); value32 = simd or(shifted, masked); shifted = simd and(simd srl 32(value32, shiftl6), maskl6); masked = simd andc(value32, maskl6); valuel6 = simd or(shifted, masked); shifted = simd and(simd srl 16(valuel6, shift8), mask8); masked = simd andc(valuel6, mask8); value8 = simd or(shifted, masked); bytes = simd srl 8(value8, count8); Les valeurs obtenues pour notre exemple sont représentées sur la figure 8f (les points "." au final montrant les décalages de bits réalisés par l'insertion de "0"). Ainsi, à partir de l'ensemble de valeurs initialement compactées (figure 8c), on obtient la liste de ces valeurs chacune représentée sur 1 octet. L'étape suivante E430 consiste alors à vérifier les prédictions. Pour cela, on charge tout d'abord (E432), dans deux registres SIMD (predicted et predictmask), les valeurs de décodage prédites 21 à partir de la séquence de prédictions 17 (voir figure 8g ù cette opération pouvant être réalisée à n'importe quelle autre étape précédente, notamment lors de l'étape E400 où on accède déjà à la séquence 17) et les masques associés. Puis la liste des valeurs décompactées bytes est comparée (étape E434) à la liste predicted des valeurs prédites, en tenant compte du masque predict mark. The next substep E424 consists of calculating bit shift masks from previously calculated values. These shift masks are intended, as described below, to progressively shift the sixteen encoding values recovered to align them with the format of the values manipulated by the decoder (in our example, the values are on one byte). The calculation of these offset masks consists in applying the following SIMD instructions: mask8 = simd const 16 ((1 "8) - 1); shift8 = simd and (simd srli (count8, 8), mask8); maskl6 = simd const 32 ((1 "16) - 1); shiftl6 = simd and (simd srli (count16, 16), mask16); mask32 = simd const 64 ((1 "32) - 1); shift32 = simd and (simd srli (count32, 32), mask32); mask64 = simd const 128 ((1 "64) - 1); shift64 = simd and (simd srli (count64, 64), mask64); It should be noted that if the shift masks (the shift8, shiftl6 ... values) are specific to each sequence of predictions, the masks (the mask8, maskl6 ... values) used to calculate them are constants that do not do not need to be recalculated each time the algorithm runs. On the other hand, these shift masks are invariant for the same sequence of predictions 17 and can therefore be stored with this sequence. This speeds up the decoding by taking up more memory. Strategies for memorizing these more elaborate masks can therefore be put in place. The application of these calculations to our example is illustrated in Figure 8e. Finally, the last sub-step, denoted E426, is the decompacting itself. This unpacking is done by separating the sixteen values into two groups of eight values, each in a half SIMD register. Thus, each group of eight values is aligned on a block of 64 bits (corresponding to value64 not shown in FIG. 8f). Then the process is restarted to separate each group in two, until each value is isolated on a block of eight bits (successively value32, valuel6 and value8 in Figure 8f). A last operation then makes it possible to align each of these values (see bytes in FIG. 8f). It is observed moreover that the offset of this step inserts "0" into the binary sequence, which has the further effect of expelling, from this sequence, the bits beyond the 16 desired values (corresponding to the bits marked d Figure 8f) These operations are performed by the following SIMD instructions: shifted = simd and (simd srl 128 (value, shift64), mask64); masked = simd andc (value, mask32); value64 = simd or (shifted, masked); shifted = simd and (simd srl 64 (value64, shift32), mask32); masked = simd andc (value64, mask32); value32 = simd or (shifted, masked); shifted = simd and (simd srl 32 (value32, shiftl6), maskl6); masked = simd andc (value32, maskl6); valuel6 = simd or (shifted, masked); shifted = simd and (simd srl 16 (valuel6, shift8), mask8); masked = simd andc (valuel6, mask8); value8 = simd or (shifted, masked); bytes = simd srl 8 (value8, count8); The values obtained for our example are shown in FIG. 8f (the points "." In the end showing the bit shifts made by the insertion of "0"). Thus, from the set of initially compacted values (FIG. 8c), the list of these values each represented on 1 byte is obtained. The next step E430 is then to check the predictions. For this purpose, the predicted decoding values 21 from the prediction sequence 17 are first loaded (E432) into two SIMD registers (predicted and predictmask) (see FIG. 8g, which can be performed at n any other previous step, especially during step E400 where is already accessed to the sequence 17) and the associated masks. Then the list of uncompressed byte values is compared (step E434) to the predicted list of predicted values, taking into account the predict mark mask.
Les instructions SIMD utilisées pour cette comparaison sont les suivantes : error = simd and(simd xor(bytes, predicted), predict mask) Ainsi, l'opérande error contient pour chaque valeur décompactée une vérification de la prédiction correspondante (valant 0 si la valeur est correctement prédite û voir figure 8h pour notre exemple). On voit ainsi que l'on a, à l'aide d'instructions SIMD, décompacté et réaligné simultanément plusieurs valeurs de codage, afin de les utiliser pour identifier, dans les grammaires ou autres tables de décodage, les valeurs et événements XML correspondant. The SIMD instructions used for this comparison are as follows: error = simd and (simd xor (bytes, predicted), predict mask) Thus, the operand error contains for each decompacted value a verification of the corresponding prediction (equal to 0 if the value is correctly predicted - see figure 8h for our example). It is thus seen that, using SIMD instructions, several coding values were unpacked and realigned simultaneously in order to use them to identify, in grammars or other decoding tables, the corresponding XML values and events.
Dans une variante, cette étape de l'invention peut être simplifiée. En effet dans certains cas, un ensemble de prédictions peut être vérifié de manière plus simple. Par exemple, dans le cas d'une structure bien définie (cette structure pouvant correspondre par exemple à un élément XML avec l'ensemble de ses attributs et sous-éléments), la simplification consiste à vérifier que les valeurs à décoder correspondent bien à cette structure pour pouvoir utiliser la séquence de prédictions correspondant à cette structure sans avoir besoin d'effectuer de vérifications supplémentaires. On peut ainsi omettre de vérifier les prédictions pour cette séquence, et poursuivre le traitement (décodage par exemple) de cette séquence et le traitement des éléments suivants cette structure bien définie. Dans un tel cas, la vérification peut être réalisée par exemple en testant quelques bits parmi les valeurs à décoder par comparaison avec la structure bien définie, cette vérification étant réalisée a priori, entre les étapes E410 et E420. En outre, si la structure est suffisamment longue, cette étape est réalisée au début du décodage de la structure. Et si l'algorithme réalise plusieurs fois les étapes E400 à E460 pour décoder le flux binaire correspondant à la structure, cette vérification n'est pas réitérée tant que l'on décode le flux binaire correspondant à la structure. In a variant, this step of the invention can be simplified. Indeed in some cases, a set of predictions can be verified in a simpler way. For example, in the case of a well-defined structure (this structure can correspond for example to an XML element with all its attributes and sub-elements), the simplification consists in verifying that the values to be decoded correspond to this structure to be able to use the prediction sequence corresponding to this structure without needing to perform additional checks. It is thus possible to omit to check the predictions for this sequence, and to continue the processing (decoding for example) of this sequence and the treatment of the elements following this well-defined structure. In such a case, the verification can be carried out for example by testing a few bits among the values to be decoded by comparison with the well-defined structure, this verification being carried out a priori, between the steps E410 and E420. In addition, if the structure is sufficiently long, this step is performed at the beginning of the decoding of the structure. And if the algorithm performs the steps E400 to E460 several times to decode the bitstream corresponding to the structure, this verification is not repeated until the bitstream corresponding to the structure is decoded.
A l'étape suivante E440, la séquence de prédictions 17 est mise à jour en utilisant cette vérification de prédictions. Cette étape est décrite après, plus en détail en référence à la figure 9. Ensuite, le flux de données est mis à jour (étape E450). Cela consiste à marquer la position de la prochaine valeur à décoder. Ceci est réalisé à partir de l'indication de la première valeur erronée et de la taille des valeurs correctement décompactées. Dans notre exemple (figure 8h), la 7ème valeur n'a pas été correctement prédite. Cela signifie, selon la règle vue ci-dessus selon laquelle, malgré la valeur erronée, la prédiction de la taille binaire est bonne, que l'on sait que la 7ème valeur a tout de même bien été délimitée et donc décompactée. On peut donc positionner le marqueur de la prochaine valeur à décoder au début de la 8ème valeur. Pour cela, on détermine la taille binaire totale des valeurs correctement décodées, ici 32 bits. Le marqueur de la prochaine valeur à décoder est donc positionné sur le bit suivant à savoir sur le 33ème bit du flux EXI 2 (figure 8c). Puis, l'étape suivante E460 consiste à décoder effectivement l'ensemble des valeurs décompactées (les sept premières donc). Pour toutes les valeurs correctement prédites, ce décodage utilise l'information décrivant le contenu XML représenté par cette valeur pour générer l'événement (ou la partie d'événement) correspondant à cette valeur. On diminue ainsi les traitements à réaliser. Comme évoqué précédemment, pour la première valeur incorrectement prédite, la taille de cette valeur a cependant été correctement prédite et la valeur a donc été correctement décompactée. Cependant l'information décrivant le contenu XML ne correspond pas à cette valeur. Le décodage s'effectue alors à partir de la grammaire indiquée dans l'information de lien 22 pour cette valeur. Si aucune information de lien 22 n'existe pour cette valeur, on utilise l'information indiquée pour une valeur précédente (l'information de lien utilisée est la dernière information de lien présente pour l'une des valeurs correctement prédites ou pour cette valeur incorrectement prédite). In the next step E440, the prediction sequence 17 is updated using this prediction check. This step is described later, in more detail with reference to FIG. 9. Next, the data stream is updated (step E450). This consists of marking the position of the next value to be decoded. This is done from the indication of the first erroneous value and the size of the correctly decompacted values. In our example (Figure 8h), the 7th value has not been correctly predicted. This means, according to the rule seen above that, despite the erroneous value, the prediction of the binary size is good, that we know that the 7th value has still been well delimited and thus unpacked. We can therefore position the marker of the next value to be decoded at the beginning of the 8th value. For that, one determines the total binary size of the correctly decoded values, here 32 bits. The marker of the next value to be decoded is therefore positioned on the next bit namely on the 33rd bit of the flow EXI 2 (FIG. 8c). Then, the next step E460 consists of actually decoding the set of decompacted values (the first seven, therefore). For all the correctly predicted values, this decoding uses the information describing the XML content represented by this value to generate the event (or the event part) corresponding to this value. This reduces the treatments to be performed. As mentioned above, for the first value incorrectly predicted, however, the size of this value has been correctly predicted and the value has been correctly decompacted. However, the information describing the XML content does not match this value. The decoding is then performed from the grammar indicated in the link information 22 for this value. If no link information 22 exists for this value, the information indicated for a previous value is used (the link information used is the last link information present for one of the correctly predicted values or for this value incorrectly predicted).
Il est à noter qu'un cas particulier d'erreur de prédiction est celui où la longueur d'une chaîne de caractères est erronée. Dans un tel cas, les prédictions de caractères peuvent néanmoins être utilisées tant qu'elles correspondent à des caractères effectivement présents dans la chaîne à décoder : les prédictions correspondant à des caractères positionnés avant la fin réelle de la chaîne de caractère restent valides. Ce cas particulier de gestion des erreurs de prédiction peut être mis en oeuvre pour accélérer le décodage des chaînes de caractères. En outre, quand une erreur survient sur la prédiction de la longueur d'une chaîne de caractères, il est possible de continuer d'utiliser les prédictions pour les valeurs survenant après la chaîne. Ceci peut être réalisé en adaptant l'algorithme décrit ici. En variante, les chaînes de caractères peuvent être traitées de manière spécifique : le décompactage optimisé décrit par cet algorithme est alors réalisé pour un ensemble de valeurs y compris la longueur de la chaîne de caractères. Mais la chaîne elle-même est décodée de manière spécifique. Ensuite, le décompactage optimisé est repris pour traiter les valeurs suivant cette chaîne de caractères. Il est à noter que pour le décodage d'une chaîne de caractères, des instructions de type SIMD peuvent être utilisées avec profit. En effet, il est intéressant d'utiliser de telles instructions d'une part pour aligner la chaîne codée sur des limites d'octets, par de simples instructions de décalage de bits. D'autre part, le décodage de la chaîne de caractères depuis le codage utilisé par la spécification EXI vers un codage classique comme UTF-8 ou UTF-16 peut être réalisé de manière optimisée avec des instructions SIMD, à l'aide d'algorithmes similaires à ceux décrits par Parabix. Dans une variante d'utilisation de l'invention, le décodage complet du document n'est pas réalisé. Ainsi, dans certains cas, il peut être intéressant de parcourir au plus vite le début du document pour atteindre une partie particulière du document qui sera décodée complètement. Dans l'exemple d'une liste de personne, cela permet par exemple de ne décoder que les informations concernant une personne particulière. Dans cette variante, l'étape E460 n'est pas réalisée tant que la partie du document traitée correspond à une partie non intéressante (par exemple tant que l'on n'a pas atteint une balise <personne particulière> attendue) : en effet les étapes précédentes ont réalisé l'ensemble des traitements nécessaires pour permettre au décodeur de traiter la suite du document. L'utilisation de l'invention dans un tel cadre permet d'accélérer le traitement rapide d'une partie d'un document. Toujours en référence à la figure 7, à l'étape suivante E470, l'algorithme vérifie si d'autres prédictions sont disponibles et peuvent être utilisées. Cette vérification tient compte du résultat de l'étape E430. En effet, si une erreur de prédiction a été détectée à l'étape E430, alors d'autres prédictions ne peuvent être utilisées. L'algorithme se termine à l'étape E480. Si, en revanche, aucune erreur de prédiction n'a été détectée à l'étape E430, et s'il reste des prédictions non utilisées dans la séquence de prédictions initiale 17, alors l'algorithme se poursuit en retournant à l'étape E400 avec les prédictions suivantes de la séquence. Sinon l'algorithme se termine à l'étape E480. Il est à noter que cet algorithme fonctionne de façon optimale si le nombre de prédictions disponible dans la séquence est un multiple de 16 : à chaque itération de l'algorithme, seize valeurs seront décompactées simultanément. Si moins de seize prédictions sont disponibles pour une itération de l'algorithme, les prédictions manquantes sont remplacées par les valeurs suivantes : la taille de la valeur est 0, la valeur prédite est 255 (c'est-à-dire 1111 1111 en binaire) et le masque de la valeur prédite est 255 (1111 1111 en binaire). Ceci permet d'utiliser l'algorithme sans modification tout en générant une erreur pour ces prédictions manquantes afin de stopper le décodage en arrivant sur ces valeurs factices. On décrit maintenant, en référence à la figure 9, l'étape E440 de mise à jour des séquences de prédictions 17 en fonction du résultat de la vérification des prédictions E430. It should be noted that a particular case of prediction error is when the length of a character string is erroneous. In such a case, the character predictions can nevertheless be used as long as they correspond to characters actually present in the string to be decoded: the predictions corresponding to characters positioned before the actual end of the string of characters remain valid. This particular case of management of the prediction errors can be implemented to accelerate the decoding of the strings of characters. In addition, when an error occurs on the prediction of the length of a character string, it is possible to continue to use the predictions for values occurring after the string. This can be achieved by adapting the algorithm described here. As a variant, the character strings can be processed in a specific manner: the optimized decompacting described by this algorithm is then performed for a set of values including the length of the string of characters. But the string itself is decoded in a specific way. Then, optimized decompacting is resumed to process the values following this string of characters. It should be noted that for the decoding of a string of characters, SIMD type instructions can be used profitably. Indeed, it is interesting to use such instructions on the one hand to align the coded string on byte limits, by simple bit shift instructions. On the other hand, the decoding of the character string from the encoding used by the EXI specification to a conventional encoding such as UTF-8 or UTF-16 can be performed in an optimized manner with SIMD instructions, using algorithms similar to those described by Parabix. In an alternative embodiment of the invention, the complete decoding of the document is not carried out. Thus, in some cases, it may be interesting to quickly browse the beginning of the document to reach a particular part of the document that will be decoded completely. In the example of a person list, this allows, for example, to decode only the information about a particular person. In this variant, step E460 is not carried out as long as the portion of the document processed corresponds to a non-interesting part (for example, until a particular <particular person> tag has been reached): indeed the previous steps have performed all the necessary processing to allow the decoder to process the rest of the document. The use of the invention in such a framework makes it possible to accelerate the rapid processing of a part of a document. Still with reference to FIG. 7, in the next step E470, the algorithm checks whether other predictions are available and can be used. This verification takes into account the outcome of step E430. Indeed, if a prediction error has been detected in step E430, then other predictions can not be used. The algorithm ends in step E480. If, on the other hand, no prediction error has been detected in step E430, and if there are still unused predictions in the initial prediction sequence 17, then the algorithm continues by returning to step E400 with the following predictions of the sequence. Otherwise the algorithm ends at step E480. It should be noted that this algorithm works optimally if the number of predictions available in the sequence is a multiple of 16: at each iteration of the algorithm, sixteen values will be decompacted simultaneously. If fewer than sixteen predictions are available for an iteration of the algorithm, the missing predictions are replaced by the following values: the size of the value is 0, the predicted value is 255 (that is, 1111 1111 in binary ) and the mask of the predicted value is 255 (1111 1111 in binary). This makes it possible to use the algorithm without modification while generating an error for these missing predictions in order to stop the decoding by arriving at these dummy values. Referring now to FIG. 9, the step E440 of updating the prediction sequences 17 is described as a function of the result of the verification of the predictions E430.
La première étape E500 consiste à mettre à jour de statistiques d'utilisation de la séquence. Cette étape utilise pour cela les résultats de la vérification de prédictions de cette séquence. Dans un mode de réalisation de l'invention, les statistiques d'utilisation de la séquence sont composées d'une liste qui contient les positions où ont eu lieu des erreurs de prédiction pour les dernières utilisations de cette séquence 17. Dans une variante, les statistiques d'utilisation de la séquence sont composées d'une liste comportant deux entrées correspondant aux positions des deux dernières erreurs. L'étape suivante E510 consiste alors à vérifier si la séquence de prédictions 17 est fiable ou non par rapport au flux EXI 2 en cours de décodage. Cette vérification s'appuie sur les statistiques d'utilisation de la séquence. Dans l'exemple de statistiques ci-dessus, l'algorithme utilise la liste des positions où une erreur de prédiction s'est produite. Si une position a une fréquence importante dans cette liste (par exemple au-delà de 25% des erreurs), alors la séquence 17 n'est pas considérée comme fiable. Dans la variante de mise en oeuvre, si les deux positions de la liste de statistiques sont égales, alors la séquence 17 n'est pas considérée comme fiable. Dans les autres cas, la séquence 17 est considérée comme fiable et le traitement prend fin à l'étape E530. Si la séquence de prédictions 17 n'est pas considérée comme fiable, l'algorithme se poursuit à l'étape E520 au cours de laquelle la séquence de prédictions 17 est mise à jour. Selon une mise en oeuvre préférée de l'invention, cette mise à jour consiste à couper la séquence 17 à la position où une erreur de prédiction se produit fréquemment, notamment à l'endroit de l'erreur de prédiction la plus fréquente. On ne conserve ainsi, associée à la grammaire 10 correspondante, que le début de la séquence 17, c'est-à-dire les événements et valeurs statistiquement correctement prédites. The first step E500 consists in updating statistics of use of the sequence. This step uses the results of the prediction check of this sequence. In one embodiment of the invention, the statistics of use of the sequence are composed of a list which contains the positions where prediction errors have occurred for the last uses of this sequence. Sequence usage statistics are composed of a list with two entries corresponding to the positions of the last two errors. The next step E510 then consists of checking whether the prediction sequence 17 is reliable or not with respect to the EXI flow 2 being decoded. This verification is based on the statistics of use of the sequence. In the statistics example above, the algorithm uses the list of positions where a prediction error has occurred. If a position has a high frequency in this list (for example, beyond 25% of the errors), then the sequence 17 is not considered reliable. In the implementation variant, if the two positions of the statistics list are equal, then the sequence 17 is not considered reliable. In other cases, the sequence 17 is considered reliable and the processing ends in step E530. If the prediction sequence 17 is not considered reliable, the algorithm proceeds to step E520 in which the prediction sequence 17 is updated. According to a preferred embodiment of the invention, this update consists of cutting the sequence 17 at the position where a prediction error occurs frequently, especially at the location of the most frequent prediction error. Thus, associated with the corresponding grammar is only the beginning of the sequence 17, that is, the events and values that are statistically correctly predicted.
Selon une seconde mise en oeuvre, la séquence de prédictions 17 peut être reconstruite intégralement en reproduisant le traitement de la figure 5, puis comparée à la séquence 17 existante pour vérifier si la position fréquente d'erreur comprend une prédiction différente. According to a second implementation, the prediction sequence 17 can be reconstructed integrally by reproducing the processing of FIG. 5 and then compared with the existing sequence 17 to check whether the frequent error position comprises a different prediction.
Si c'est le cas, alors la nouvelle séquence de prédictions remplace l'ancienne. Sinon, l'ancienne séquence est coupée à cette position. Dans une variante plus simple de cette seconde mise en oeuvre, au lieu de reconstruire toute la séquence 17 avant vérification, on peut vérifier directement si la prédiction fréquemment erronée a été modifiée au niveau de la prédiction simple correspondante. Pour ce faire, on identifie tout d'abord la production 11 (correspondant à la valeur prédite précédant celle fréquemment erronée) ou la grammaire 10 (dans le cas où l'événement précédent est un début d'élément) ayant produit cette prédiction, puis on vérifie si la prédiction simple 14/16 associée à cette production ou grammaire a été modifiée. Si tel est le cas, on modifie la séquence à compter de cette prédiction. Suite à cette mise à jour, l'algorithme se termine à l'étape E530. Un cas particulier de mise à jour d'une séquence de prédictions 17 est le changement de taille d'un dictionnaire de valeurs, en particulier quand ce changement de taille provoque un changement de taille du codage des index pour ce dictionnaire. En effet, les prédictions portant sur un index dans ce dictionnaire utilisent cette taille de codage des index. Or la vérification des prédictions ne vérifie que la taille prédite pour savoir si elle est correcte. Par conséquent, quand un changement de taille de codage des index survient pour un dictionnaire, l'ensemble des prédictions portant sur ces index doit être modifié. Cette modification est réalisée en associant à chaque dictionnaire les prédictions simples qui correspondent à un index de ce dictionnaire. Ainsi, lors d'un changement de taille de codage des index de ce dictionnaire, ces prédictions simples peuvent être modifiées. If so, then the new prediction sequence replaces the old one. Otherwise, the old sequence is cut at this position. In a simpler variant of this second implementation, instead of reconstructing the entire sequence 17 before verification, it is possible to directly check whether the frequently erroneous prediction has been modified at the level of the corresponding simple prediction. To do this, we first identify the output 11 (corresponding to the predicted value preceding the frequently erroneous one) or the grammar 10 (in the case where the previous event is an element start) that produced this prediction, then we check if the simple prediction 14/16 associated with this production or grammar has been modified. If this is the case, the sequence is modified starting from this prediction. Following this update, the algorithm ends in step E530. A particular case of updating a prediction sequence 17 is the size change of a dictionary of values, in particular when this size change causes a change in the size of the index coding for this dictionary. Indeed, the predictions on an index in this dictionary use this size of encoding indexes. But the verification of predictions only verifies the predicted size to know if it is correct. Therefore, when an index encoding size change occurs for a dictionary, all predictions for those indexes must be changed. This modification is carried out by associating with each dictionary the simple predictions which correspond to an index of this dictionary. Thus, when changing the encoding size of the indexes of this dictionary, these simple predictions can be modified.
Ensuite, ces modifications sont reportées dans les séquences de prédictions 17 construites à partir de ces prédictions simples. Ceci peut être réalisé par exemple en reconstruisant les séquences de prédictions selon les mécanismes de la figure 5. En variante, il est possible d'optimiser cette opération en modifiant directement les séquences de prédictions 17 déjà construites. On notera enfin que, pour un petit dictionnaire de valeurs, la taille de codage des index pour ce dictionnaire va changer fréquemment : en effet, la taille de codage d'un index est égale à la valeur entière du logarithme en base 2 de la taille du dictionnaire. Comme cette opération de mise à jour des prédictions est coûteuse, les prédictions simples de contenu ne sont pas considérées comme valides (c'est-à-dire qu'elles ne peuvent être intégrées à une séquence de prédiction, à l'étape E330) si ces prédictions correspondent à une valeur indexée et que la taille de l'index est trop petite (par exemple, inférieure ou égale à 4 ou à 8). Il ressort clairement de ce qui précède que la délimitation des valeurs de codage dans un flux EXI et leur décompactage peuvent être réalisés simultanément pour un grand nombre d'événements EXI, notamment par la mise en oeuvre des instructions de type SIMD, en dépit de la non connaissance de ces tailles eu égard à leur dépendance aux événements précédents non encore décompactés et décodés. Cette efficacité est obtenue par la prédiction des tailles binaires de ces valeurs EXI, et la validation de tout ou partie de ces prédictions par comparaison des valeurs EXI ainsi récupérées et décompactés avec des valeurs également prédites. Si les valeurs ont bien été prédites, c'est que le décompactage est correct et donc les tailles prédites sont exactes. Outre la mise en oeuvre de ces traitements pour le décodage d'un flux binaire comme illustré ci-dessus, ils peuvent permettre d'accéder, à moindre coût et de façon rapide, une partie précise du document structuré codé. En effet, l'invention permet de parcourir rapidement les événements codés jusqu'à atteindre le premier de la partie à accéder (généralement un début d'élément avec un nom donné, ou une position donnée dans le document codé). Then, these modifications are reported in the prediction sequences 17 constructed from these simple predictions. This can be done for example by reconstructing the prediction sequences according to the mechanisms of FIG. 5. As a variant, it is possible to optimize this operation by directly modifying the prediction sequences 17 already constructed. Note finally that, for a small dictionary of values, the size of the index coding for this dictionary will change frequently: indeed, the coding size of an index is equal to the integer value of the logarithm in base 2 of the size. of the dictionary. Since this prediction update operation is expensive, simple content predictions are not considered valid (i.e., they can not be integrated into a prediction sequence in step E330) if these predictions match an indexed value and the index size is too small (for example, less than or equal to 4 or 8). It is clear from the foregoing that the delimitation of the encoding values in an EXI flow and their unpacking can be carried out simultaneously for a large number of EXI events, in particular by the implementation of the SIMD type instructions, in spite of the not aware of these sizes in view of their dependence on previous events not yet decompacted and decoded. This efficiency is obtained by predicting the binary sizes of these EXI values, and the validation of all or part of these predictions by comparison of the EXI values thus recovered and decompacted with values also predicted. If the values have been predicted, it is that the decompacting is correct and therefore the predicted sizes are accurate. In addition to implementing these processes for decoding a bitstream as illustrated above, they can provide access, at a low cost and in a rapid manner, to a specific part of the structured structured document. Indeed, the invention makes it possible to quickly browse the coded events until reaching the first of the part to be accessed (generally an element start with a given name, or a given position in the encoded document).
La mise en oeuvre d'instructions SIMD peut également être réalisée lors du codage de documents structurés tels XML en un flux EXI, notamment lors des opérations de compactage d'un grand nombre de valeurs de codage récupérées des dictionnaires et grammaires. Par exemple, le procédé consiste à: - déterminer les valeurs de codage d'une pluralité d'événements consécutifs dudit document ; - déterminer une taille de compactage pour chaque valeur de codage (généralement le nombre minimal de bits pour encoder l'ensemble des priorités de la grammaire correspondante) ; et - compacter simultanément lesdites valeurs de codage à l'aide desdites tailles de compactage en utilisant au moins une instruction unique à multiples données. Il s'agit principalement d'effectuer les opérations inverses de celles décrites ci-dessus pour le décompactage. En référence maintenant à la figure 10, il est décrit à titre d'exemple une configuration matérielle particulière d'un dispositif de traitement d'un document structuré et/ou d'un flux binaire correspondant à un tel document codé apte à une mise en oeuvre du procédé selon l'invention. Un dispositif de traitement d'information mettant en oeuvre l'invention est par exemple un micro-ordinateur 50, une station de travail, un assistant personnel, ou un téléphone mobile connecté à différents périphériques. Selon encore un autre mode de réalisation de l'invention, le dispositif se présente sous la forme d'un appareil photographique muni d'une interface de communication pour autoriser une connexion à un réseau Les périphériques reliés au dispositif selon l'invention comprennent par exemple une caméra numérique 64, ou un scanner ou tout autre moyen d'acquisition ou de stockage d'images, relié à une carte d'entrée/sortie (non représentée) et fournissant au dispositif des données multimédia, éventuellement sous forme de documents XML ou de flux EXI / Fast Infoset. Le dispositif 50 comporte un bus de communication 51 auquel sont reliés : - une unité centrale de traitement CPU 52 se présentant par exemple sous la forme d'un microprocesseur ; - une mémoire morte 53 dans laquelle peuvent être contenus les programmes dont l'exécution permet la mise en oeuvre du procédé selon l'invention. Il peut s'agir d'une mémoire flash ou EEPROM ; - une mémoire vive 54 qui, après la mise sous tension du dispositif 50, contient le code exécutable des programmes de l'invention nécessaires à la mise en oeuvre de l'invention. Cette mémoire vive 54 est de type RAM (à accès aléatoire), ce qui offre des accès rapide comparés à la mémoire morte 53 ; - un écran 55 permettant de visualiser des données notamment vidéo et/ou de servir d'interface graphique avec l'utilisateur qui peut ainsi interagir avec les programmes de l'invention, à l'aide d'un clavier 56 ou de tout autre moyen tel qu'un dispositif de pointage, comme par exemple une souris 57 ou un crayon optique ; - un disque dur 58 ou une mémoire de stockage, telle qu'une mémoire de type compact flash, pouvant comporter les programmes de l'invention ainsi que des données utilisées ou produites lors de la mise en oeuvre de l'invention ; - un lecteur de disquettes 59 optionnel, ou un autre lecteur de support de données amovible, adapté à recevoir une disquette 63 et à y lire / écrire des données traitées ou à traiter conformément à l'invention ; et - une interface de communication 60 reliée au réseau de télécommunications 61, l'interface 60 étant apte à transmettre et à recevoir des données. Le bus de communication 51 autorise une communication et une interopérabilité entre les différents éléments inclus dans le dispositif 50 ou reliés à celui-ci. La représentation du bus 51 n'est pas limitative et, notamment, l'unité centrale 52 est susceptible de communiquer des instructions à tout élément du dispositif 50 directement ou par l'intermédiaire d'un autre élément du dispositif 50. Les disquettes 63 peuvent être remplacées par tout support d'information tel que, par exemple, un disque compact (CD-ROM) réinscriptible ou non, un disque ZIP ou une carte mémoire. D'une manière générale, un moyen de stockage d'information, lisible par un micro-ordinateur ou par un microprocesseur, intégré ou non au dispositif de traitement, éventuellement amovible, est adapté à mémoriser un ou plusieurs programmes dont l'exécution permet la mise en oeuvre du procédé selon l'invention. Le code exécutable permettant, au dispositif de traitement, la mise en oeuvre de l'invention peut être indifféremment stocké en mémoire morte 53, sur le disque dur 58 ou sur un support numérique amovible tel que par exemple une disquette 63 comme décrite précédemment. Selon une variante, le code exécutable des programmes est reçu par l'intermédiaire du réseau de télécommunications 61, via l'interface 60, pour être stocké dans un des moyens de stockage du dispositif 50 (tel que le disque dur 58 par exemple) avant d'être exécuté. L'unité centrale 52 commande et dirige l'exécution des instructions ou portions de code logiciel du ou des programmes de l'invention, les instructions ou portions de code logiciel étant stockées dans l'un des moyens de stockage précités. Lors de la mise sous tension du dispositif 50, le ou les programmes qui sont stockés dans une mémoire non volatile, par exemple le disque dur 58 ou la mémoire morte 53, sont transférés dans la mémoire vive 54 qui contient alors le code exécutable du ou des programmes de l'invention, ainsi que des registres pour mémoriser les variables et paramètres nécessaires à la mise en oeuvre de l'invention. On notera également que le dispositif mettant en oeuvre l'invention ou incorporant celle-ci est réalisable aussi sous la forme d'un appareil programmé. Par exemple, un tel dispositif peut alors contenir le code du ou des programmes informatiques sous une forme figée dans un circuit intégré à application spécifique (ASIC). Le dispositif décrit ici et, particulièrement, l'unité centrale 52, sont susceptibles de mettre en oeuvre tout ou partie des traitements décrits en lien avec les figures 4 à 9, pour mettre en oeuvre les procédés objets de la présente invention et constituer les dispositifs objets de la présente invention. The implementation of SIMD instructions can also be carried out when encoding structured documents such as XML into an EXI flow, in particular during the operations of compacting a large number of coding values retrieved from the dictionaries and grammars. For example, the method comprises: determining the encoding values of a plurality of consecutive events of said document; determining a compaction size for each coding value (generally the minimum number of bits to encode all the priorities of the corresponding grammar); and simultaneously compacting said coding values with said compaction sizes using at least one single multiple data instruction. It is mainly to perform the reverse operations of those described above for unpacking. Referring now to FIG. 10, there is described by way of example a particular hardware configuration of a processing device of a structured document and / or a bit stream corresponding to such a coded document capable of being implemented. process of the invention. An information processing device embodying the invention is for example a microcomputer 50, a workstation, a personal assistant, or a mobile phone connected to different peripherals. According to yet another embodiment of the invention, the device is in the form of a camera equipped with a communication interface to allow a connection to a network. The peripherals connected to the device according to the invention comprise, for example a digital camera 64, or a scanner or any other means of acquiring or storing images, connected to an input / output card (not shown) and supplying the device with multimedia data, possibly in the form of XML documents or EXI / Fast Infoset. The device 50 comprises a communication bus 51 to which are connected: a central processing unit CPU 52, for example in the form of a microprocessor; a read-only memory 53 in which can be contained the programs whose execution allows the implementation of the method according to the invention. It can be a flash memory or EEPROM; a random access memory 54 which, after powering on the device 50, contains the executable code of the programs of the invention necessary for the implementation of the invention. This RAM 54 is RAM (random access), which offers fast access compared to the read only memory 53; a screen 55 making it possible to display data, in particular video, and / or to serve as a graphical interface with the user who can thus interact with the programs of the invention, using a keyboard 56 or any other means such as a pointing device, such as for example a mouse 57 or an optical pen; a hard disk 58 or a storage memory, such as a compact flash type memory, which may comprise the programs of the invention as well as data used or produced during the implementation of the invention; an optional floppy disk drive 59 or another removable data medium reader adapted to receive a floppy disk 63 and to read / write data processed or to be processed according to the invention; and a communication interface 60 connected to the telecommunications network 61, the interface 60 being able to transmit and receive data. The communication bus 51 allows communication and interoperability between the various elements included in the device 50 or connected thereto. The representation of the bus 51 is not limiting and, in particular, the central unit 52 is able to communicate instructions to any element of the device 50 directly or via another element of the device 50. be replaced by any information medium such as, for example, a rewritable compact disc (CD-ROM) or not, a ZIP disk or a memory card. In general, an information storage means, readable by a microcomputer or by a microprocessor, integrated or not integrated with the processing device, possibly removable, is adapted to store one or more programs whose execution allows the implementation of the method according to the invention. The executable code allowing the processing device, the implementation of the invention can be indifferently stored in ROM 53, on the hard disk 58 or on a removable digital medium such as for example a diskette 63 as described above. According to one variant, the executable code of the programs is received via the telecommunications network 61, via the interface 60, to be stored in one of the storage means of the device 50 (such as the hard disk 58 for example) before to be executed. The central unit 52 controls and directs the execution of the instructions or portions of software code of the program or programs of the invention, the instructions or portions of software code being stored in one of the aforementioned storage means. When the device 50 is turned on, the program or programs that are stored in a non-volatile memory, for example the hard disk 58 or the read-only memory 53, are transferred into the random access memory 54 which then contains the executable code of the or programs of the invention, as well as registers for storing the variables and parameters necessary for the implementation of the invention. Note also that the device embodying the invention or incorporating it is also feasible in the form of a programmed apparatus. For example, such a device may then contain the code of the computer program or programs in a form fixed in a specific application integrated circuit (ASIC). The device described here and, particularly, the central unit 52, are able to implement all or part of the processes described in connection with Figures 4 to 9, to implement the methods of the present invention and constitute the devices objects of the present invention.
Les exemples qui précèdent ne sont que des modes de réalisation de l'invention qui ne s'y limite pas. The foregoing examples are only embodiments of the invention which is not limited thereto.
Présentation des instructions SIMD mises en oeuvre dans le mode de réalisation illustratif de la présente invention. simd not (op) Opérateur « non » bit à bit. simd and (op1, op2) Opérateur « et » bit à bit. simd andc (op1, op2) Opérateur « et contraire » bit à bit. Equivalent à simd and (op1, simd not(op2)). simd or (op1, op2) Opérateur «ou » bit à bit. simd xor (op1, op2) Opérateur « ou exclusif » bit à bit. simd const n (value) Crée une constante, utilisant des champs de bits de taille n, chaque champ contenant la valeur donnée. simd srli (op, value) Décalage logique vers la droite, utilisant le nombre de bits indiqués. simd srl n (op1, op2) Décalage logique vers la droite, utilisant des champs de bits de taille n, où les champs du premier opérande sont décalés du nombre de bits indiqué dans le champ correspondant du deuxième opérande. simd add n hi h2(op1, op2) Additionne les deux opérandes, en utilisant des champs de bits de taille n et en utilisant des opérandes de demi-taille. hi indique quelle demi partie (haute ou basse, représentées par h ou 1) est utilisée pour chaque champ du 25 premier opérande. h2 joue le même rôle pour le deuxième opérande. simd sub n (op', ope) Soustrait les deux opérandes, en utilisant des champs de bits de taille n. Presentation of the SIMD instructions implemented in the illustrative embodiment of the present invention. simd not (op) Operator "no" bitwise. simd and (op1, op2) Operator "and" bitwise. simd andc (op1, op2) Operator "and opposite" bit by bit. Equivalent to simd and (op1, simd not (op2)). simd or (op1, op2) Operator "or" bitwise. simd xor (op1, op2) Operator "or exclusive" bit by bit. simd const n (value) Creates a constant, using bit fields of size n, each field containing the given value. simd srli (op, value) Logical shift to the right, using the specified number of bits. simd srl n (op1, op2) Logic shift to the right, using bit fields of size n, where the fields of the first operand are shifted by the number of bits indicated in the corresponding field of the second operand. simd add n hi h2 (op1, op2) Adds both operands, using bit fields of size n and using half-size operands. hi indicates which half-part (high or low, represented by h or 1) is used for each field of the first operand. h2 plays the same role for the second operand. simd sub n (op ', ope) Subtracts the two operands, using bit fields of size n.
Claims (21)
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
FR0956969A FR2951038B1 (en) | 2009-10-06 | 2009-10-06 | METHOD AND ASSOCIATED DEVICE FOR DECODING A BITSTREAM CORRESPONDING TO A CODE STRUCTURED DOCUMENT |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
FR0956969A FR2951038B1 (en) | 2009-10-06 | 2009-10-06 | METHOD AND ASSOCIATED DEVICE FOR DECODING A BITSTREAM CORRESPONDING TO A CODE STRUCTURED DOCUMENT |
Publications (2)
Publication Number | Publication Date |
---|---|
FR2951038A1 true FR2951038A1 (en) | 2011-04-08 |
FR2951038B1 FR2951038B1 (en) | 2012-03-16 |
Family
ID=42153699
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
FR0956969A Expired - Fee Related FR2951038B1 (en) | 2009-10-06 | 2009-10-06 | METHOD AND ASSOCIATED DEVICE FOR DECODING A BITSTREAM CORRESPONDING TO A CODE STRUCTURED DOCUMENT |
Country Status (1)
Country | Link |
---|---|
FR (1) | FR2951038B1 (en) |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6223280B1 (en) * | 1998-07-16 | 2001-04-24 | Advanced Micro Devices, Inc. | Method and circuit for preloading prediction circuits in microprocessors |
US20080033974A1 (en) * | 2006-08-07 | 2008-02-07 | International Characters, Inc. | Method and Apparatus for XML Parsing Using Parallel Bit streams |
-
2009
- 2009-10-06 FR FR0956969A patent/FR2951038B1/en not_active Expired - Fee Related
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6223280B1 (en) * | 1998-07-16 | 2001-04-24 | Advanced Micro Devices, Inc. | Method and circuit for preloading prediction circuits in microprocessors |
US20080033974A1 (en) * | 2006-08-07 | 2008-02-07 | International Characters, Inc. | Method and Apparatus for XML Parsing Using Parallel Bit streams |
Non-Patent Citations (4)
Title |
---|
/J BAI-JUE SHIEH B ET AL: "A High-Throughput Memory-Based VLC Decoder with Codeword Boundary Prediction", IEEE TRANSACTIONS ON CIRCUITS AND SYSTEMS FOR VIDEO TECHNOLOGY, IEEE SERVICE CENTER, PISCATAWAY, NJ, US, vol. 10, no. 8, 1 December 2000 (2000-12-01), XP011014143, ISSN: 1051-8215 * |
CHE-HONG CHEN ET AL: "Gray prediction decoding algorithm for VLC decoder", CIRCUITS AND SYSTEMS, 2004. PROCEEDINGS. THE 2004 IEEE ASIA-PACIFIC CO NFERENCE ON TAINAN, TAIWAN DEC. 6-9, 2004, PISCATAWAY, NJ, USA,IEEE LNKD- DOI:10.1109/APCCAS.2004.1412968, vol. 2, 6 December 2004 (2004-12-06), pages 677 - 680, XP010783318, ISBN: 978-0-7803-8660-0 * |
JOHN SCHNEIDER ET AL: "Efficient XML Interchange (EXI) Format 1.0", W3C WORKING DRAFT, W3C, 19 December 2007 (2007-12-19), pages 1 - 91, XP002489344, Retrieved from the Internet <URL:http://www.w3.org/TR/2007/WD-exi-20071219/> * |
MAURICIO ALVAREZ ET AL: "Performance Impact of Unaligned Memory Operations in SIMD Extensions for Video Codec Applications", PERFORMANCE ANALYSIS OF SYSTEMS & SOFTWARE, 2007. ISPASS 2007. IEE E INTERNATIONAL SYMPOSIUM ON, IEEE, PI, 1 April 2007 (2007-04-01), pages 62 - 71, XP031091889, ISBN: 978-1-4244-1081-1 * |
Also Published As
Publication number | Publication date |
---|---|
FR2951038B1 (en) | 2012-03-16 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
FR2936623A1 (en) | METHOD FOR ENCODING A STRUCTURED AND DECODING DOCUMENT, CORRESPONDING DEVICES | |
FR2926378A1 (en) | METHOD AND PROCESSING DEVICE FOR ENCODING A HIERARCHISED DATA DOCUMENT | |
FR2931271A1 (en) | METHOD AND DEVICE FOR CODING A STRUCTURED DOCUMENT AND METHOD AND DEVICE FOR DECODING A DOCUMENT SO CODE | |
FR2945363A1 (en) | METHOD AND DEVICE FOR CODING A STRUCTURAL DOCUMENT | |
FR2933793A1 (en) | METHODS OF ENCODING AND DECODING, BY REFERENCING, VALUES IN A STRUCTURED DOCUMENT, AND ASSOCIATED SYSTEMS. | |
FR2939535A1 (en) | PROCESSING METHOD AND SYSTEM FOR CONFIGURING AN EXI PROCESSOR | |
FR2929778A1 (en) | METHODS AND DEVICES FOR ITERATIVE BINARY CODING AND DECODING FOR XML TYPE DOCUMENTS. | |
FR2924244A1 (en) | METHOD AND DEVICE FOR ENCODING AND DECODING INFORMATION | |
EP1356595B1 (en) | Method for compressing/decompressing a structured document | |
FR2914759A1 (en) | METHOD AND DEVICE FOR CODING A HIERARCHISED DOCUMENT | |
FR2933514A1 (en) | SIMILARITY ENCODING AND DECODING METHODS AND DEVICES FOR XML TYPE DOCUMENTS | |
FR2907567A1 (en) | METHOD AND DEVICE FOR GENERATING REFERENCE PATTERNS FROM WRITING LANGUAGE DOCUMENT AND ASSOCIATED ENCODING AND DECODING METHODS AND DEVICES. | |
EP1316220B1 (en) | Method for compressing/decompressing structured documents | |
FR2927712A1 (en) | METHOD AND DEVICE FOR ACCESSING PRODUCTION OF A GRAMMAR FOR PROCESSING A HIERARCHISED DATA DOCUMENT. | |
FR2909198A1 (en) | Electronic document's element i.e. node, filtering method for e.g. microcomputer, involves evaluating expression on document data base according to evaluation mode identification information of expression | |
FR2930661A1 (en) | METHOD FOR ACCESSING A PART OR MODIFYING A PART OF A BINARY XML DOCUMENT, ASSOCIATED DEVICES | |
FR2943441A1 (en) | METHOD FOR ENCODING OR DECODING A STRUCTURED DOCUMENT USING XML SCHEME, DEVICE AND STRUCTURE THEREFOR | |
WO2002061616A1 (en) | Method for encoding and decoding a path in the tree structure of a structured document | |
FR2901037A1 (en) | Reference structural pattern generating method for computer, involves determining reference structural pattern per group of determined primary structural patterns, where reference pattern represents patterns of group | |
FR2913274A1 (en) | Structured document i.e. XML document, coding method, involves creating drifted pattern formed by modification of another pattern, and coding data of document for providing code, where code associates third pattern to coded data | |
FR2951038A1 (en) | Efficient extensible markup language interchange bit stream processing method, involves re-aligning coding values to predicted binary size, validating prediction of part of binary size, and processing events corresponding to binary size | |
FR2954983A1 (en) | Structured document e.g. portable document format document, encoding method, involves scanning tree-type data structure to encode elements to binary encoding value that is determined based on index information in data structure | |
FR2913275A1 (en) | Hierarchical data coding method, involves extracting events describing obtained structural pattern, creating production with extracted events, and inserting creating production in grammar | |
FR2959080A1 (en) | Structured data i.e. XML type structured document, coding method, involves obtaining set of items, and performing coding for obtained set of items by accessing input of codebook so as to obtain coded items | |
EP1085447B1 (en) | Method and device for model-solving and utilisation thereof for the detection of attacks against information processing systems |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PLFP | Fee payment |
Year of fee payment: 7 |
|
ST | Notification of lapse |
Effective date: 20170630 |