One of the ways to parallelize a problem is through data decomposition. Imagine a situation in which the task is to multiply a 2 x 2 matrix, which we will call **Matrix A**, by a scalar value of 4. In a sequential system, we will perform each multiplication operation one after the other, generating the final result at the end of all the instructions. Depending on the size of **Matrix A**, the sequential solution of the problem may be time consuming. However, when decomposition of data is applied, we can picture a scenario in which **Matrix A** is broken into pieces, and these pieces are associated with the workers that process the received data in a parallel way. The following diagram illustrates the concept of data decomposition applied to the example of a 2 x 2 matrix multiplied by a scalar value:

The matrix problem presented in the preceding diagram had a certain symmetry where each necessary operation to get to the final result was executed...