This repository adds functionality missing from the official version of Thrust.   Multi_permutation_iterator is a general-purpose iterator, analogous to permutation_iterator that allows for tuple-based indexing into data -- think coalesced multi-dimensional arrays or stencil-based grid traversal.  Without multi_permutation_iterator one must resort to redundantly applying zip_iterator to the same iterator perhaps with different offsets, resulting in excessive kernel argument size and overhead, and most importantly consumption of performance-critical GPU registers.   Multi_permutation_iterator is completely general-purpose, providing functionality that zip_iterator+permutation_iterator only provides a crude workaround for.   Another key missing piece of functionality is support for streaming tuple values via C++ streams.