Извлечение подматрицы из матрицы с мозаикой петли

У меня есть следующая матрица 4x4:

1  2  3  4

5  6  7  8

9 10 11 12

13 14 15 16

и я хочу извлечь и сохранить (в некоторых новостных переменных) четыре следующих подматрицы 2x2:

[1 2

 5 6]

[3 4

 7 8]

[9 10

 13 14]

[11 12

 15 16]

Это как "Rect" (http://docs.opencv.org/java/org/opencv/core/Rect.html) функции openCV, но я не хочу использовать OpenCV.

Я должен использовать распараллеливающий компилятор, и поэтому я хотел бы сделать извлечение подматрицы с известным преобразованием цикла, присутствующим в литературе: «замощение цикла» (также известное как «блокировка цикла», «развертывание и застревание цикла» или «цикл). стриптиз и развязка"). - (http://en.wikipedia.org/wiki/Loop_tiling)

Является ли это возможным?


person user3077628    schedule 07.12.2013    source источник
comment
Мозаика цикла полезна только тогда, когда у вас много повторений, поскольку вы можете извлечь выгоду из локальности кэша подматрицы. Что вы планируете делать с этими плитками? См. Также - stackoverflow.com/questions/20367246/   -  person Leeor    schedule 07.12.2013
comment
Я хочу распределить эти подматрицы на другие потоки или устройства Cuda или другие.   -  person user3077628    schedule 07.12.2013
comment
Вам не нужно использовать мозаику цикла для самого извлечения, так как вы не повторяете процесс, это просто одноразовая подготовка   -  person Leeor    schedule 07.12.2013
comment
К вашему сведению: Rect — это не функция. Это тип данных или, по сути, класс. Кроме того, это не имеет никакого отношения к вашей проблеме.   -  person baci    schedule 08.12.2013


Ответы (1)


Возможно ли это?

Конечно …

    int n = 4;
    int matrix[4][4] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
    int submatrixes[n/2*n/2][2][2];
    int i, j, x, y, z;
    for (z = i = 0; i < n; i += 2)
      for (j = 0; j < n; j += 2, ++z)
        for (x = 0; x < 2; x++)
          for (y = 0; y < 2; y++)
            submatrixes[z][x][y] = matrix[i+x][j+y];
person Armali    schedule 03.11.2016