>>
|
No. 1711
>>1663
Используй другую адресацию в матрице. Допустим, у тебя разбивка по блокам B_pq. Чтобы адресовать элемент главной матрицы (i, j), делай так:
GetBlockIndicesAndOffsets(i, j, /out/ p, /out/ q, /out/ offset);
double val = A[pblocks_in_lineblock_w + q*block_w + i];
Т.е. внутри твоей "матрицы" данные лежат не по строкам, как обычно, а по блокам: блок A11 (целиком, по строкам ширины ШИРИНА_БЛОКА), блок A12, и так далее:
A = b11a11, b11a12, b11a13, b11a21, b11a22, b11a23, ..., b11a33, b12a11, b12a12, ..., b13a33, b21a11, ..., b33a33.
В принципе, координаты даже переводить несложно, только не очень удобно. Но можно переопределить квадратные скобочки, тогда вообще всё будет легко.
|