В качестве предварительного вычисления для интегральной функции мне нужно сделать некоторые вычисления на большой матрице.
for (size_t x = 1; x < size().x(); ++x)
for (size_t y = 0; y < size().y(); ++y)
for (size_t z = 0; z < size().z(); ++z)
field::at(x, y, z) += field::at(x - 1, y, z);
for (size_t x = 0; x < size().x(); ++x)
for (size_t y = 1; y < size().y(); ++y)
for (size_t z = 0; z < size().z(); ++z)
field::at(x, y, z) += field::at(x, y - 1, z);
for (size_t x = 0; x < size().x(); ++x)
for (size_t y = 0; y < size().y(); ++y)
for (size_t z = 1; z < size().z(); ++z)
field::at(x, y, z) += field::at(x, y, z - 1);
мое поле наследует std::vector<size_t>
где at
как было передано
T& at(size_t x, size_t y, size_t z)
{
return container::at(x + y * size().x() + z * size().x() * size().y();
}
Вот некоторые времена выполнения на моей машине
Это выглядит очень медленно для меня.
std::vector
размером 512x512x512 (1G) плохая идея? Должен ли я разделить его на несколько (512) субвектор размера 512×512 (2M / каждый)Задача ещё не решена.