| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > Быстрые матричные сложения |
| Автор: Elfet 17.5.2010, 22:18 | ||||||||
| Всем привет! Чиркнул на своем блоге о http://blog.elfet.ru/cpp/matrix-expressions/. Пожалуйста, прокомментируйте! Сам пост:
|
| Автор: kemiisto 17.5.2010, 22:43 |
| Elfet, хотелось бы посмотреть на результаты http://eigen.tuxfamily.org/index.php?title=Main_Page. |
| Автор: toxx 17.5.2010, 23:43 |
| Elfet а какого размера матрицы тестировались? |
| Автор: Elfet 17.5.2010, 23:49 |
| kemiisto, uBLAS я выбрал так как для неё нашёл реализованный метод GMRES. tvmet же рекомендуется на сайте ublas для маленьких матриц. AlgLib так же взял потому что уже используем её (SVD-разложение). Добавлено через 1 минуту и 27 секунд toxx, для 3х3 и 4х4. |
| Автор: toxx 17.5.2010, 23:53 |
| Elfet я думал побольше =) что-то типа 1000х1000 и побольше =) интересно же как будет вести себя всё это дело... p.s. спасибо за ответ в блоге. |
| Автор: Elfet 17.5.2010, 23:58 |
| toxx, ну 1000 у нас просто редко встречаются Чаще всего встречаются матрицы 3х3, 4х4 и очень большие 1000000х1000000. |
| Автор: toxx 18.5.2010, 00:07 |
| Elfet ага, понятно.я просто к тому, что эти измерения очень интересны в плане цифр(даже выступают с докладами на такие темы), видел вот такие же замеры выполнения для различных видов сортировки(больше 3х разновидностей) различных матриц( как раз от 1000х1000 до 5000х5000 элементов,заполненных разными способами) очень интересно было смотреть что и как быстро справляется. |
| Автор: borisbn 18.5.2010, 06:18 |
| Elfet, попробуй Intel Performance Primitives. На своём процессоре они творят чудеса. Правда, платные. Но, если ты не вольный каменьщик, попроси фирму купить. По-моему, не очень дорого. |
| Автор: Alexeis 18.5.2010, 09:20 |
| Elfet, попробуй еще вспомогательную библиотеку DirectX для работы с матрицами фиксированного размера. Кроме, думаю будет эффективно загружать флоаты/даблы сразу блоками по 128/256 бит и проводить вычисления при помощи инструкций SSE. Например в 256 битный регистр SSE влезет сразу 4 дабла или 8 флоатов. Для матрицы 4х4 это либо одна строка либо пол матрицы за одну инструкцию. |
| Автор: Elfet 18.5.2010, 10:26 |
| borisbn, я это, диплом делаю Alexeis, использовать железо для просчётов? нам правда нужна кросс-платформеность. Как я понимаю, они реализованы в uBLAS, однако быстрее всё-равно использовать define MatrixExp. |
| Автор: GoldFinch 18.5.2010, 10:46 |
что быстрее? кодить? сомневаюсь. код работает? скорость та же. |
| Автор: W4FhLF 18.5.2010, 11:04 | ||
У меня есть Intel Performance Primitives for Small Matrices. Правда я не юзал эту часть библиотеки, но наверняка она уделает все остальные.
В SSE таких регистров нет. |
| Автор: Elfet 18.5.2010, 11:27 |
А же провёл тесты. uBLAS проигрывает |
| Автор: Alexeis 18.5.2010, 12:01 | ||
В каком смысле железо? Речь о процессоре. Процессоры выше PIV гарантировано имеют SSE2. Для машин не старше 4х лет можно запросто рассчитывать на SSE3. Кросс-платформеность Windows-Linux будет. Если речь про другую архитектуру, то все свои тесты можешь выкрасить и выбросить, потому что на разных архитектурах по разному оптимизируются вычисления и различные операции "стоят" разных ресурсов. Добавлено @ 12:10 А что за регистры такие YMM0 — YMM15 ? Вот например Intel рекомендует использовать их для оптимизации задач линейной алгебры. http://software.intel.com/ru-ru/articles/optimize-for-intel-avx-using-intel-math-kernel-librarys-basic-linear-algebra-subprograms-blas-with-dgemm-routine/ Это что-то не то. Значит была речь о том, что можно производить параллельно 2е операции над 128 битными регистрами. В сумме получается 4 дабла или 8 флоатов. |