Быстрая обработка матриц

Тема в разделе "LANGS.C", создана пользователем ring4, 20 фев 2011.

  1. asmlamo

    asmlamo Well-Known Member

    Публикаций:
    0
    Регистрация:
    18 май 2004
    Сообщения:
    1.734
    Не будет.
     
  2. ring4

    ring4 New Member

    Публикаций:
    0
    Регистрация:
    19 ноя 2006
    Сообщения:
    279
    ну тут все понятно с amd и nvidia, но чтото не черта не нашел поддерживаются ли Intel видео карты, хоть както. было бы хорошо распаралелись меж cpu и хоть каким но и gpu
     
  3. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    Интел в пролёте.
     
  4. ring4

    ring4 New Member

    Публикаций:
    0
    Регистрация:
    19 ноя 2006
    Сообщения:
    279
    Немного изменил код, вышло порядка 0.6 сек с использованием 4 потоков. Все вычисления. Но по мне все равно много), всетаки matlab это за 0.05 делает. Хитро они както код оптимизируют.

    Есть умные книги по оптимизации кода\вычислений?
     
  5. asmlamo

    asmlamo Well-Known Member

    Публикаций:
    0
    Регистрация:
    18 май 2004
    Сообщения:
    1.734
    Агнер Фог

    http://www.agner.org/optimize/

    Используй MMX, SSE, SSE2 они хорошо для матриц подходят и вроде за один такт могут 2-4 регистра обрабатывать.
     
  6. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    ring4
    Например использует численные методы.
     
  7. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    ring4
    http://dsp-book.narod.ru/blahut1.djvu
    И долго медетируем над главой 1.1
     
  8. artkar

    artkar New Member

    Публикаций:
    0
    Регистрация:
    17 авг 2005
    Сообщения:
    400
    Адрес:
    Russia
    Если ты соревнуешся с Матлабом, то
    Смотря какие матрицы..., классический метод Гаусса (прямой и обратный ход Гаусса) реально мало где используется, так как очень медленный. Прямой ход обычно заменяют методом элементарных преобразований. А если у тебя матрица диагональная (или в других источниках-ленточная) или есть возможность привести её к диагональной форме, то существует метод прогонки, кот. вообще мгновенно всё это решает. Ну и наверно дохрена других методов решений.
    Удачи.
     
  9. ntkernelspawn

    ntkernelspawn New Member

    Публикаций:
    0
    Регистрация:
    17 дек 2010
    Сообщения:
    61
    По улыбали :)
    включи Release mode ...
     
  10. ring4

    ring4 New Member

    Публикаций:
    0
    Регистрация:
    19 ноя 2006
    Сообщения:
    279
    ntkernelspawn
    это ты улыбаеш)

    Pavia
    Толковая глава) Удалось немного выиграть благодаря:
    - блочное умножение по 32 строки матрицы за проход. Это улучшает эффективность кеша
    - умножению в xmm регистрах инструкцией pmaddwd. Причём умножаю 4 строки за раз, и результат выходит в одном xmm регистре и сохраняю на выход за раз.