Ignore:
Timestamp:
Aug 25, 2011, 4:47:46 PM (8 years ago)
Author:
cameron
Message:

Additional explanation of carry handling in Pablo

File:
1 edited

Legend:

Unmodified
Added
Removed
  • docs/HPCA2012/03-research.tex

    r1381 r1384  
    196196as supported by the Pablo compiler.
    197197
    198 \begin{figure}[h]
     198\begin{figure}[tbh]
    199199
    200200\begin{center}
     
    217217\end{figure}
    218218
    219 The Pablo compiler abstracts away the details of
    220 programming parallel bit stream code in terms of finite
    221 SIMD register widths and application buffer sizes.
    222 Input to Pablo is a language for expressing bitstream operations on unbounded bitstreams. 
    223 The operations include bitwise
    224 logic, the {\tt Advance} and {\tt ScanThru} operations described in he
    225 previous subsection as well as if and while control structures.
    226 Pablo translates these operations to block-at-a-time
    227 code in C/C++.
    228 %, where the block size is the register width for SIMD operations on the selected target architecture.
    229 The key functionality of Pablo is to arrange for block-to-block
    230 carry bit propagation to implement the long bitstream shift
    231 and addition operations required by
    232 {\tt Advance} and {\tt ScanThru}.
    233 
    234 For example, we can translate the simple parsing example
    235 of \ref{fig:ParabixParsingExample} above into Pablo code
    236 to produce the output as shown in Figure \ref{fig:Pablo}.
    237 In this example, Pablo has the primary responsibility of inserting
    238 carry variable declarations that allow the results of
    239 Advance and ScanThru operations to be carried over from
    240 block to block.  Explaining the full details of the translation
    241 is beyond the scope of this paper, however.
    242 
    243 \begin{figure}[h]
     219\begin{figure}[tbh]
    244220
    245221\begin{center}
     
    280256\end{figure}
    281257
     258The Pablo compiler abstracts away the details of
     259programming parallel bit stream code in terms of finite
     260SIMD register widths and application buffer sizes.
     261Input to Pablo is a language for expressing bitstream operations on unbounded bitstreams. 
     262The operations include bitwise
     263logic, the {\tt Advance} and {\tt ScanThru} operations described in he
     264previous subsection as well as if and while control structures.
     265Pablo translates these operations to block-at-a-time
     266code in C/C++.
     267%, where the block size is the register width for SIMD operations on the selected target architecture.
     268The key functionality of Pablo is to arrange for block-to-block
     269carry bit propagation to implement the long bitstream shift
     270and addition operations required by
     271{\tt Advance} and {\tt ScanThru}.
     272
     273For example, we can translate the simple parsing example
     274of \ref{fig:ParabixParsingExample} above into Pablo code
     275to produce the output as shown in Figure \ref{fig:Pablo}.
     276In this example, Pablo has the primary responsibility of inserting
     277carry variable declarations that allow the results of
     278Advance and ScanThru operations to be carried over from
     279block to block.  A separate carry variable is required for every
     280{\tt Advance} or {\tt ScanThru} operation.  A function containing
     281such operations is translated into a public C++ class (struct),
     282which includes a Carry Queue to hold all the carry
     283variables from iteration to iteration, together with the
     284a method {\tt do\_block} to implement the processing
     285for a single block (based on the SIMD register width).
     286Macros {\tt CarryDeclare} and {\tt CarryInit} declare and
     287initialize the Carry Queue structure depending on the
     288specific architecture and Carry Queue representation.
     289The unbounded bitstream {\tt Advance} and {\tt ScanThru}
     290operations are translated into block-by-block equivalents
     291with explicit carry-in and carry-out processing. 
     292At the end of each block, the {\tt CarryQ\_Adjust}
     293operation implements any necessary adjustment of the
     294Carry Queue to prepare for the next iteration.
     295The Pablo language and compiler also support conditional
     296and iterative bitstream logic on unbounded streams
     297(if and while constructs) which involves additional
     298carry-test insertion in control branches.   Explaining the
     299full details of the translation
     300is beyond the scope of this paper, however.
    282301
    283302\subsection{Parabix Run-Time Libraries}
Note: See TracChangeset for help on using the changeset viewer.