Российские распределенные вычисления на платформе BOINC
Форум участников распределённых вычислений.

Добро пожаловать, Гость! Чтобы использовать все возможности Вход или Регистрация.

Уведомление

Icon
Error

7 Страницы«<567
Опции
К последнему сообщению К первому непрочитанному
Offline evatutin  
#121 Оставлено : 6 марта 2016 г. 15:18:32(UTC)
evatutin


Статус: Старожил

Медали: Первооткрывателю: Результат в проекте SAT@homeРазработчику: За организацию проекта Gerasim@home

Группы: Editors, Member
Зарегистрирован: 08.06.2010(UTC)
Сообщений: 3,642
Откуда: Russia, Kursk

Сказал(а) «Спасибо»: 1024 раз
Поблагодарили: 1827 раз в 886 постах
Автор: Disel Перейти к цитате
А чем его можно подменить?


Есть алгоритм Штрассена например. Если у классического умножения временная асимптотика O(n^3), то у этого O(n^{log_2^{7}}). Достигается за счет того, что на одном уровне рекурсии производится 7 операций над подматрицами, а у базового алгоритма 8. Вроде бы круто, но обращений в память больше, сегодня это критично. Сам пока не проверял, планирую попозже, но автор упомянутой статьи пишет, что реальный выигрыш начинается с N=25000, а такие матрицы в оперативу не поместятся, т.е. на практике алгоритм проигрывает. Я это планирую перепроверить...
Есть предел Коперсмитта-Винограда, который сегодня считается минимально известной временной асимптотикой, но у него граничное значение для N еще выше на несколько порядков, на практике он не используется.
У Intel'ов вполне может быть какая-то хитрая модификация, основанная на этом принципе. Кроме того, при умножении маленьких матриц эффективнее полностью раскрутить циклы, что компилятор может выполнить с легкостью, если N задано как константа.

PS. В качестве аналогии, при умножении больших чисел (например, в GIMPS'е) умножение делается не совсем в столбик 199 Если мне память не изменяет, там вообще Фурье делается, но могу ошибаться, искать статьи мне лень

kvt.kurskstu team founder
Gerasim@home scientist
My numbers are 5056994653507584 and 1835082219864832081920. Why not? smile
Offline Disel  
#122 Оставлено : 7 марта 2016 г. 6:25:06(UTC)
Disel


Статус: Старожил

Медали: Первооткрывателю: Нахождение пар ОДЛК в RakeSearch! Донор: За финансовую помощь сайту

Группы: Member, Russia Team Group
Зарегистрирован: 08.07.2013(UTC)
Сообщений: 3,603
Мужчина
Российская Федерация

Сказал «Спасибо»: 520 раз
Поблагодарили: 427 раз в 327 постах
Кстати забыл сказать. При численном интегрировании функции sin gfortran выдает на 2 знака больше после запятой (в коде забита 2-я точность). Возможно это объяснение, либо просто ifort последние 2 знака не выводит на экран. Но опять же только для этого примера, целочисленные операции с матрицами ставят компиляторы в равные условия.
Ubuntu Linux 18.04 LTS - 64 bit / Boinc 7.9.3(х64) / Core 2 DUO E6300 1.8 Ггц / GeForce GT-630
Offline Disel  
#123 Оставлено : 9 марта 2016 г. 16:16:38(UTC)
Disel


Статус: Старожил

Медали: Первооткрывателю: Нахождение пар ОДЛК в RakeSearch! Донор: За финансовую помощь сайту

Группы: Member, Russia Team Group
Зарегистрирован: 08.07.2013(UTC)
Сообщений: 3,603
Мужчина
Российская Федерация

Сказал «Спасибо»: 520 раз
Поблагодарили: 427 раз в 327 постах
Еще один эксперимент. Перемножение вещественных матриц 2048х2048 происходит за 10 секунд, перемножение таких же размером матриц, заполненных комплексными числами a=(1-j2.2) и b=(2+j3) происходит уже за 37 секунд. Почти в 4 раза медленнее. Это с использованием компилятора gfortran. То же самое с использованием компилятора ifort выполняется за 7.1 и 17 секунд соответственно. Т.е. в операциях с комплексными числами ifort быстрее более чем в 2 раза!
Ubuntu Linux 18.04 LTS - 64 bit / Boinc 7.9.3(х64) / Core 2 DUO E6300 1.8 Ггц / GeForce GT-630
Offline evatutin  
#124 Оставлено : 9 марта 2016 г. 23:29:02(UTC)
evatutin


Статус: Старожил

Медали: Первооткрывателю: Результат в проекте SAT@homeРазработчику: За организацию проекта Gerasim@home

Группы: Editors, Member
Зарегистрирован: 08.06.2010(UTC)
Сообщений: 3,642
Откуда: Russia, Kursk

Сказал(а) «Спасибо»: 1024 раз
Поблагодарили: 1827 раз в 886 постах
Автор: Disel Перейти к цитате
Перемножение вещественных матриц 2048х2048 происходит за 10 секунд


10 секунд — это примерно 1,7 GFLOP/s, не очень много. Можно попробовать закодить блочное или буферизованное умножение (код в моих статьях есть), будет быстрее. И векторизацию Фортран скорее всего не делает, что скорее всего должен сделать компилятор от Intel 199

kvt.kurskstu team founder
Gerasim@home scientist
My numbers are 5056994653507584 and 1835082219864832081920. Why not? smile
Offline Disel  
#125 Оставлено : 10 марта 2016 г. 15:37:53(UTC)
Disel


Статус: Старожил

Медали: Первооткрывателю: Нахождение пар ОДЛК в RakeSearch! Донор: За финансовую помощь сайту

Группы: Member, Russia Team Group
Зарегистрирован: 08.07.2013(UTC)
Сообщений: 3,603
Мужчина
Российская Федерация

Сказал «Спасибо»: 520 раз
Поблагодарили: 427 раз в 327 постах
Автор: evatutin Перейти к цитате
что скорее всего должен сделать компилятор от Intel 199

Применение в ifort опции компилятора -О3 дало результат перемножния вещественных матриц 2048х2048 за время 1.640 с.

Ubuntu Linux 18.04 LTS - 64 bit / Boinc 7.9.3(х64) / Core 2 DUO E6300 1.8 Ггц / GeForce GT-630
Offline AlexA  
#126 Оставлено : 1 декабря 2016 г. 12:31:38(UTC)
AlexA


Статус: Administration

Медали: Переводчику: За помощь в создании сайта

Группы: Editors, Member, Administration, Russia Team Group, Moderators
Зарегистрирован: 02.10.2007(UTC)
Сообщений: 6,140
Мужчина
Российская Федерация
Откуда: "Russia Team"

Сказал «Спасибо»: 1250 раз
Поблагодарили: 1516 раз в 838 постах
Попытался протестировать 460-ю карточку в Колобке. В итоге получил сообщения об ошибках Не получается

Ну и тест пропускной способности

thanks 1 пользователь поблагодарил AlexA за этот пост.
evatutin оставлено 04.12.2016(UTC)
Offline evatutin  
#127 Оставлено : 4 декабря 2016 г. 16:55:18(UTC)
evatutin


Статус: Старожил

Медали: Первооткрывателю: Результат в проекте SAT@homeРазработчику: За организацию проекта Gerasim@home

Группы: Editors, Member
Зарегистрирован: 08.06.2010(UTC)
Сообщений: 3,642
Откуда: Russia, Kursk

Сказал(а) «Спасибо»: 1024 раз
Поблагодарили: 1827 раз в 886 постах
По пропускной способности: карточка лучше GTS 450, но хуже современных (7xx, 9xx). Насчет умножения матриц: такая ошибка возникала у меня в том случае, если CUDA-ядро выполняется больше определенного таймаута, винды считают драйвер повисшим и ресетят его, все CUDA-задачи падают с ошибкой. У вас во время тестов такого поведения не было?

PS. Во время конференции мне еще наводку на алгоритмы дали, как время появится, планирую попробовать... Если я правильно понял на пальцах, то там блочно-блочный подход получится, хотя может быть на практике все и сложнее окажется 199

kvt.kurskstu team founder
Gerasim@home scientist
My numbers are 5056994653507584 and 1835082219864832081920. Why not? smile
Offline evatutin  
#128 Оставлено : 6 февраля 2018 г. 15:05:20(UTC)
evatutin


Статус: Старожил

Медали: Первооткрывателю: Результат в проекте SAT@homeРазработчику: За организацию проекта Gerasim@home

Группы: Editors, Member
Зарегистрирован: 08.06.2010(UTC)
Сообщений: 3,642
Откуда: Russia, Kursk

Сказал(а) «Спасибо»: 1024 раз
Поблагодарили: 1827 раз в 886 постах

kvt.kurskstu team founder
Gerasim@home scientist
My numbers are 5056994653507584 and 1835082219864832081920. Why not? smile
thanks 1 пользователь поблагодарил evatutin за этот пост.
vk_DiMoH оставлено 06.02.2018(UTC)
Offline Disel  
#129 Оставлено : 13 мая 2018 г. 14:36:19(UTC)
Disel


Статус: Старожил

Медали: Первооткрывателю: Нахождение пар ОДЛК в RakeSearch! Донор: За финансовую помощь сайту

Группы: Member, Russia Team Group
Зарегистрирован: 08.07.2013(UTC)
Сообщений: 3,603
Мужчина
Российская Федерация

Сказал «Спасибо»: 520 раз
Поблагодарили: 427 раз в 327 постах
В новом gfortran 7.3 встроенная функция перемножения матриц перемножает вешественные матрицы 2048х2048 за 3.02 секунды (процессор тот же, Core 2 Duo E6300 1.8 Ггц без разгона). Интересно стало сравнить, ранее gfortran (версию не помню, кажется 4 какая-то) такую же операцию выполнял, если не изменяет память, где то секунд за 10. Оптимизаторы по умолчанию.
Ubuntu Linux 18.04 LTS - 64 bit / Boinc 7.9.3(х64) / Core 2 DUO E6300 1.8 Ггц / GeForce GT-630
thanks 1 пользователь поблагодарил Disel за этот пост.
evatutin оставлено 14.05.2018(UTC)
Offline Disel  
#130 Оставлено : 14 мая 2018 г. 16:13:29(UTC)
Disel


Статус: Старожил

Медали: Первооткрывателю: Нахождение пар ОДЛК в RakeSearch! Донор: За финансовую помощь сайту

Группы: Member, Russia Team Group
Зарегистрирован: 08.07.2013(UTC)
Сообщений: 3,603
Мужчина
Российская Федерация

Сказал «Спасибо»: 520 раз
Поблагодарили: 427 раз в 327 постах
Если интересно, sgemm и установленный openblas - перемножение за 1,33 секунды, нагрузились оба ядра.

Код:

program matrix
implicit none
real :: a(2048,2048), b(2048,2048), c(2048,2048)
real :: start_time, end_time, time
character :: NN, MM
NN="N"; MM="N"

    call random_number(a)
    call random_number(b)
    call cpu_time(start_time)

    call sgemm (NN, MM, 2048, 2048, 2048, 1.0, a, 2048, b, 2048, 1.0, c, 2048)

    call cpu_time(end_time)
    time = end_time - start_time
    write(*,"(A , F7.3)") " время в секундах = ", time
end program
Ubuntu Linux 18.04 LTS - 64 bit / Boinc 7.9.3(х64) / Core 2 DUO E6300 1.8 Ггц / GeForce GT-630
Пользователи, просматривающие эту тему
Guest
7 Страницы«<567
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.

AlexA theme. Created by AlexA
Форум YAF 2.1.1 | YAF © 2003-2018, Yet Another Forum.NET
Страница сгенерирована за 0.133 секунды.