Матричные библиотеки против циклов в C ++ - PullRequest
2 голосов
/ 16 апреля 2011

Не могли бы вы сказать мне, если использование матрицы библиотеки приводит к более быстрому времени выполнения, чем обычные циклы for? В настоящее время у меня есть несколько методов, которые используют циклы for, которые выполняют итерацию по многомерным векторам для вычисления матричных произведений и поэлементных произведений, где размер матрицы составляет примерно 1000 столбцов на 400 строк. Этот метод является самым вызываемым методом в моей программе, и я хотел бы знать, увеличит ли скорость использование библиотеки матриц. Кроме того, какую библиотеку вы бы порекомендовали (из http://eigen.tuxfamily.org/index.php?title=Benchmark, Eigen мне кажется лучшим)?

Спасибо

Ответы [ 2 ]

1 голос
/ 16 апреля 2011

Я пытаюсь ответить на вопрос «должен ли я» вместо «какой», потому что неясно, действительно ли вам нужна такая библиотека.

Может ли матричная библиотека улучшить время выполнения? Наверное. Методы, которым вас учат в старших классах, конечно, не самые быстрые. Однако есть и другие вопросы, которые необходимо учитывать.

Во-первых, оптимизируете ли вы преждевременно? Попытка сделать вашу программу как можно быстрее, заманчиво, но не всегда правильно. Вы должны принять решение, если это действительно правильный способ провести время.

Во-вторых, окажет ли скорость существенное влияние на удобство использования? Заставить программу работать за 2 секунды вместо 4 секунд не стоит усилий ... но 30 часов вместо 60 часов? Может быть и так. Мне нравится делать упор на том, чтобы все работало перед полировкой.

Наконец, я встречал несколько примеров кода, который кто-то написал несколько лет назад, который был совершенно бесполезным. Старые библиотеки, которые не могли быть найдены или скомпилированы с новой ОС, компилятором или чем-то другим, означали, что мне пришлось полностью переписать что-то, что тратит впустую недели моего времени. Изначально могло показаться хорошей идеей получить дополнительные несколько процентов производительности, но это означало, что срок их кода ограничен, особенно из-за плохой документации.

Keep It Simple Stupid - превосходная мантра для многих вещей. Я решительно выступаю за использование библиотек только тогда, когда это абсолютно необходимо, и только за тех, которые кажутся долгоживущими и стабильными.

1 голос
/ 16 апреля 2011

Да - значительное количество библиотек матриц C ++ (например, MTL, uBLAS, Blitz ++) используют шаблонное метапрограммирование для оптимизации своего поведения. Если нет причин поступить иначе, я бы начал с Boost uBlas . Вы также можете посмотреть список библиотек OO numerics для других возможностей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...