У меня есть алгоритм, который требует построения матрицы NxN внутри функции, которая вернет произведение этой матрицы с вектором Nx1, который также построен на лету. (N обычно 8 или 9, но его необходимо обобщать для значений, больших этого).Операции с собственной матрицей C++ и производительность распределения памяти
Я использую библиотеку Eigen для выполнения еще более сложных алгебраических операций (наименьшие квадраты и несколько других ограниченных проблем), поэтому переключение не является вариантом.
У меня есть контрольные цифры функции, и есть огромное узкое место из-за интенсивной памяти ассигнований. Я пытаюсь создать приложение, безопасное для потоков, поэтому в некоторых случаях я заменил эти матрицы и векторы ссылками на элементы глобального вектора, который служит поставщиком для объектов, которые нельзя хранить в стеке. Это позволяет называть конструкторы/деструкторы собственных матриц и векторов, но это не изящное решение, и это может привести к огромным проблемам, если не будет предпринята значительная забота.
Таким образом, Eigen либо предлагает обходное решение, потому что я не вижу возможности передать распределитель в качестве аргумента шаблона для этих объектов, ИЛИ есть ли более очевидная вещь?
ли 'изменение N' между вызовами? Если да, то как вы подготовили этот «глобальный объект», когда не знаете, что такое «N»? – luk32
N не изменяется между вызовами. Он зависит от модели входных данных, из которой создается обработанный объект. – teodron
Тогда, возможно, вы можете сделать свой «менеджер ресурсов» «статичным» в своей функции. В противном случае глобальное сложно избежать ИМО. Думаю, это не должно быть очень сложно. Вам нужно уйти с чем-то простым, то есть с сборкой мусора или любыми чистыми взлетами. – luk32