Как сделать матричное умножение на части в C++
Мне нужна помощь, я не могу представить себе код C++ для этого.
Я должен решить матричный мульт. A*B=C и A-это 256x128 элементов, А B-128x256 элементов, поэтому C-это 256x256 элементов.
Но чтобы решить эту проблему, мне нужно создать "секции" матрицы A и B (например, Asection=4x128 и Bsection 128x4 и этот мульт. даст Csection=4x4 матрицу), а затем mult. Asection со следующим разделом B (Bsection закончен на колонке 4, поэтому следующий раздел 128x4, но начинается в колонке 5). И этот новый мульт. даст следующий Csection и т. д.
Эта ссылка имеет представление о проблеме
Imgur: магия интернета[^]
Дело в том, что на самом деле A B и C-это не "матрицы", а векторы, поэтому A=[0,1,2....127(здесь заканчивается первая строка),128,129....255 (2-я строка и т. д. до 32768 элементов)], то же самое для B и C. (pd: я знаю, что векторы-это матрицы, но вы знаете, что я имею в виду).
Я сделал код, но только для простого матричного мульта, у A есть 2048 элементов и B тоже (64x32 и 32x64). Это структура мульта в моей первоначальной задаче, и она может быть первой "секцией" C, но я не знаю, как поместить остальные секции C.
Что я уже пробовал:
for (int i = 0; i < 64; i++)
{
for (int j = 0; j < 64; j++)
{
for (int k = 0; k < 32; k++)
{
С[Я * 64 + Дж] += а[я * 32 + К] * Б[Дж * 32 + к];
}
}
}
0x01AA
Для меня ваш код выглядит прекрасно. "Секции" 'C' вычисляются по 'i*64', пока вы делаете это: 'C[i*64+j]'. Или что я упускаю?