A method of MAP decoding, implemented by at least one device, the method comprising: receiving an input array that represents received encoded data, where the receiving is performed by the at least one device; calculating, in parallel, a series of transition matrices from the input array, where values in the transition matrices represent probabilities that relate to state transitions in a MAP decoder, where the calculating the series of transition matrices is performed by the at least one device; calculating, in parallel, products of the cumulative products of the series of transition matrices and an initialization vector, the calculating including: segmenting the series of transition matrices into a plurality of sections, independently applying, as a first scan, a scan technique to each of the plurality of sections, where a full product of the scan of each section is stored, applying, as a second scan, the scan technique to a series of the full products of the first scan, and distributing partial product scan results from the second scan, where the calculating the products of the cumulative products and the initialization vector is performed by the at least one device; calculating, in parallel, based on the products of the cumulative products of the series of transition matrices and the initialization vector, an output array that corresponds to a decoded version of the received encoded data in the input array, where the calculating the output array is performed by the at least one device; and outputting the output array. receiving an input array that represents received encoded data, where the receiving is performed by the at least one device; calculating, in parallel, a series of transition matrices from the input array, where values in the transition matrices represent probabilities that relate to state transitions in a MAP decoder, where the calculating the series of transition matrices is performed by the at least one device; calculating, in parallel, products of the cumulative products of the series of transition matrices and an initialization vector, the calculating including: segmenting the series of transition matrices into a plurality of sections, independently applying, as a first scan, a scan technique to each of the plurality of sections, where a full product of the scan of each section is stored, applying, as a second scan, the scan technique to a series of the full products of the first scan, and distributing partial product scan results from the second scan, where the calculating the products of the cumulative products and the initialization vector is performed by the at least one device; segmenting the series of transition matrices into a plurality of sections, independently applying, as a first scan, a scan technique to each of the plurality of sections, where a full product of the scan of each section is stored, applying, as a second scan, the scan technique to a series of the full products of the first scan, and distributing partial product scan results from the second scan, where the calculating the products of the cumulative products and the initialization vector is performed by the at least one device; calculating, in parallel, based on the products of the cumulative products of the series of transition matrices and the initialization vector, an output array that corresponds to a decoded version of the received encoded data in the input array, where the calculating the output array is performed by the at least one device; and outputting the output array.