Требуется ускорить транспонирование большой матрицы, элементы размещены в памяти последовательно.
Ускорить нужно за счет обработки матрицы блоками, чтобы из кэша необходимые куски памяти не успевали стираться.
Проблема возникла в написании кода самого транспонирования - выполнение затыкается и ничего не работает.
Ниже сам кусок кода
void transposematrixblocked(int **src, int **dst, int size) {
for (int i = 0; i < size; i + BLOCKSIZE) {
for (int j = 0; j < size; j + BLOCKSIZE) {
for (int ini = 0; ini < BLOCKSIZE; ini ++) {
for (int inj = 0; inj < BLOCKSIZE; inj ++) {
dst[i+ini][j+inj] = src[j+inj][i+ini];
}
}
}
}
}
где я оплошала и как сделать правильно?
Ответ
В цикле for 3-й параметр должен быть вида i += BLOCKSIZE
void transposematrixblocked(int **src, int **dst, int size) {
for (int i = 0; i < size; i += BLOCKSIZE) {
for (int j = 0; j < size; j += BLOCKSIZE) {
for (int ini = 0; ini < BLOCKSIZE; ini ++) {
for (int inj = 0; inj < BLOCKSIZE; inj ++) {
dst[i+ini][j+inj] = src[j+inj][i+ini];
}
}
}
}
}
Комментариев нет:
Отправить комментарий