2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему На страницу 1, 2, 3, 4, 5 ... 10  След.
 
 Перемножение матриц - конкурс для программистов
Сообщение09.02.2010, 09:09 


26/01/10
959
Мои научные исследования коснулись одной простой задачи - задачи перемножения квадратных матриц. По этой причине я провожу конкурс на лучшую реализацию любого алгоритма перемножения матриц размером до 5000x5000. Приз за самую быструю программу - 1000 р. Подробные правила - на моем сайте. Это мой первый конкурс такого рода, поэтому и задача выбрана самая простая и приз небольшой.

Главная цель конкурса не в том, чтобы получить в своё распоряжение программу и пользоваться ей, а в том, чтобы понять, чего можно добиться при тех ограничениях, которые я указал. Конечно же, если бы мне нужно было на самом деле любой ценой перемножить матрицы очень быстро, я бы сел за кластер. Здесь же суть в написании максимально быстрой последовательной программы. Сразу хочу предупредить: если вы не сильны в оптимизации программ, то вы точно не выиграете, так как я тоже принимаю участие в конкурсе и буду свою программу оптимизировать дальше. В процессе этого небольшого соревнования я хотел бы выяснить можно ли для данной задачи написать эффективный код. К сожалению, соревнования проводятся только в системе Windows, для тех, кто любит Linux я буду проводить другие конкурсы но чуть позже.

 Профиль  
                  
 
 Re: Перемножение матриц - конкурс для программистов
Сообщение09.02.2010, 23:05 


22/09/09
275
Zealint в сообщении #286644 писал(а):
Мои научные исследования коснулись одной простой задачи - задачи перемножения квадратных матриц. По этой причине я провожу конкурс на лучшую реализацию любого алгоритма перемножения матриц размером до 5000x5000. Приз за самую быструю программу - 1000 р. Подробные правила - на моем сайте. Это мой первый конкурс такого рода, поэтому и задача выбрана самая простая и приз небольшой.

Главная цель конкурса не в том, чтобы получить в своё распоряжение программу и пользоваться ей, а в том, чтобы понять, чего можно добиться при тех ограничениях, которые я указал. Конечно же, если бы мне нужно было на самом деле любой ценой перемножить матрицы очень быстро, я бы сел за кластер. Здесь же суть в написании максимально быстрой последовательной программы. Сразу хочу предупредить: если вы не сильны в оптимизации программ, то вы точно не выиграете, так как я тоже принимаю участие в конкурсе и буду свою программу оптимизировать дальше. В процессе этого небольшого соревнования я хотел бы выяснить можно ли для данной задачи написать эффективный код. К сожалению, соревнования проводятся только в системе Windows, для тех, кто любит Linux я буду проводить другие конкурсы но чуть позже.

В серьезных научтехпрограммах (кодах) часто проводят оптимизацию критических мест. Часто повторяющиеся вычисления занимают львиную долю процессорного времени. Сюда относят и операции с матрицами и векторами. Пока не было развито программирование для многопроцессорных и спецпроцессорных систем, выход был один - писать критические части программ на Ассемблерах. После трансляции Ассемблера в машинный код ( получение ЕХЕ-файла) практически невозможно понять что программа написана на Ассемблере а не на какм либо языке программирования. Поскольку алгоритм умножения матрицы давно изъежжен вдоль и поперек, только Ассемблерная прога будет (при прочих равных условиях) непобедима в любой схватке по умножению матриц невысокого (несколько тысяч) порядка на одном процессоре.
Я (да и Вы наверняка) такие программы видел для БЭСМ-6, CDC, IBM-360/370. Полагаю есть они и для Интелевских процессоров. Думаю что для Мотороловских процов Вы уже не рискнете объявлять соревнование (под какой-нибудь МАС/ОS)

Ваши условия похожи на условия казино - любой приходит и может у казино выйграть. Только в казино все заранее рассчитано и оно (казино) никогда не бывает в проигрыше.
Вот если бы условия игры были такие:
Любой пишет прогу на конкретном языке программирования и предъявляет текст для всеобщего обозрения и независимой экспертизы, тогда это уже не казино.
А транслятор для всех будет один и тот же с одинаковыми опциями.

 Профиль  
                  
 
 Re: Перемножение матриц - конкурс для программистов
Сообщение10.02.2010, 01:47 


30/12/09
95
Думаете сможете получить что нибудь лучше uBLAS-а из boost-а?

 Профиль  
                  
 
 Re: Перемножение матриц - конкурс для программистов
Сообщение10.02.2010, 06:56 


26/01/10
959
Тов, Ajabsandal, вы в чём-то правы, но далеко не во всём. Алгоритм может и изъезжен вдоль и поперек, но почему-то это обстоятельство программисты часто не принимают во внимание. Они сколько угодно могут говорить, что "есть очень быстрые реализации", но сами при этом либо не умеют ими пользоваться, либо не в состоянии написать что-то подобное (хотя бы медленнее в два-три раза). Вот я и делаю конкурс, чтобы увидеть НЕ абстрактные размышления на эту тему, а реальные возможности простых смертных программистов. У которых нет кластера под рукой, как у меня (я бы мог это задачу решить за полсекунды). Мне нужно понять, что можно выжать из типичной для пользователя архитектуры. Хотя я с Вами полностью согласен, что для решения научной задачи нужны и другие процессоры, и другой подход. Но что делать, если наша научная "лаборатория" имеет в своем распоряжении только то, что я назвал? : )

Это не казино. Я же не заставляю платить деньги. Здесь ситуация простая. Вот если вы пишите программу для заказчика, скажем, вы же не знаете заранее, на каких компьютерах он будет её запускать. И вы будете делать программу под обычные компьютеры с Windows. Так ведь? Здесь у меня похожая ситуация, только я не на заказчика работаю, а на себя. Я вовсе не заставляю кого-то убивать время, просто если есть человек, который в этой задаче разбирается и ему не жалко 10-15 минут, то пусть участвует : )


Цитата:
Думаете сможете получить что нибудь лучше uBLAS-а из boost-а?

Конечно. Кстати, было бы неплохо, если бы кто-то этот пакет использовал в конкурсе, чтобы показать, чего он реально стоит : ) Это туфта, такая же, как и абсолютно все универсальные алгоритмы, рассчитанные на общий случай. У меня конкретный случай, когда числа небольшие и целые. Надеюсь будет еще конкурс, где числа длинные (тысяча и больше знаков). Но и приз там надо делать тысяч десять, двадцать.

 Профиль  
                  
 
 Re: Перемножение матриц - конкурс для программистов
Сообщение10.02.2010, 20:29 


26/01/10
959
Roman Voznyuk в сообщении #286842 писал(а):
Думаете сможете получить что нибудь лучше uBLAS-а из boost-а?


Можете посмотреть, чего стоит BLAS на самом деле. Один из участников использовал его и попал в мой рейтинг. Причем далеко не на первое место. А uBLAS еще хуже по той причине, что он как раз создавался с расчетом не на скорость, а на точность, да еще и с шаблонами C++ - это не меньше чем 5% чисто программного замедления (по моим оценкам).

 Профиль  
                  
 
 Re: Перемножение матриц - конкурс для программистов
Сообщение10.02.2010, 21:21 
Заблокирован


12/11/09

92
Zealint писал(а):
Можете посмотреть, чего стоит BLAS на самом деле. Один из участников использовал его и попал в мой рейтинг. Причем далеко не на первое место

Да что вы говорите? Очень интересно. А Вы хорошо знакомы с алгоритмами профессора Донгарры и соответствующими реализациями его алгоритмов в пакете Intel MKL?

 Профиль  
                  
 
 Re: Перемножение матриц - конкурс для программистов
Сообщение10.02.2010, 23:44 


19/11/08
347
Спрашиваю просто для интереса: у вас все числа не должны превышать 600? Т.е. произведения производятся по модулю 600?
Или это только начальные коэффициенты матриц маленькие, а результаты могут быть любого размера? (теоретически 600^N).

... а это что прикол?:
"8.Максимальный порядок матрицы в тесте n = 5000"
Вы хоть представляете сколько лет такие монстры должны перемножаться?
А тут читаем:
"Время работы программы на каждом тесте не должно превышать 900 секунд."
Да ... смешно.

 Профиль  
                  
 
 Re: Перемножение матриц - конкурс для программистов
Сообщение10.02.2010, 23:50 
Заслуженный участник
Аватара пользователя


06/10/08
6422
Не $600^N$, а $600^2\cdot N$, при тамошних ограничениях влезает в 32-битный int, но почти на грани.

 Профиль  
                  
 
 Re: Перемножение матриц - конкурс для программистов
Сообщение10.02.2010, 23:55 


19/11/08
347
Xaositect в сообщении #287069 писал(а):
Не $600^N$, а $600^2\cdot N$, при тамошних ограничениях влезает в 32-битный int, но почти на грани.

А , ну да, у меня почему-то рефлекс - если матрицы перемножаются, то и детерминант их придется вычислять ... а это M^N.

 Профиль  
                  
 
 Re: Перемножение матриц - конкурс для программистов
Сообщение11.02.2010, 00:35 


22/09/09
275
Zealint в сообщении #286857 писал(а):
Цитата:
Тов, Ajabsandal, вы в чём-то правы, но далеко не во всём. Алгоритм может и изъезжен вдоль и поперек, но почему-то это обстоятельство программисты часто не принимают во внимание. Они сколько угодно могут говорить, что "есть очень быстрые реализации", но сами при этом либо не умеют ими пользоваться, либо не в состоянии написать что-то подобное (хотя бы медленнее в два-три раза). Вот я и делаю конкурс, чтобы увидеть НЕ абстрактные размышления на эту тему, а реальные возможности простых смертных программистов. У которых нет кластера под рукой, как у меня (я бы мог это задачу решить за полсекунды). Мне нужно понять, что можно выжать из типичной для пользователя архитектуры. Хотя я с Вами полностью согласен, что для решения научной задачи нужны и другие процессоры, и другой подход. Но что делать, если наша научная "лаборатория" имеет в своем распоряжении только то, что я назвал? : )

Я не хотел Вас обидеть или упрекнуть в нечестности. Моя мысль следующая.
На сегодня есть последние версии трансляторов с С и Фортрана (с очень хорошими опциями оптимизации выполняемого кода) от ряда известных компаний (Напр. от Intel 11-ой версии). Стоят они хороших денег, которых у многих здесь нет. Таким образом средний программист с деньгами может оказаться (по вашим критериям) лучше чем умелый, но бедный!
Поэтому условия соревнования должны иметь единый критерий. Я не выговариваю себе осоых условий и денег мне не надо, но я бы принял участие только на равноправных условиях (хотя готов и на Radeon-5ХXX серии, под OPEN CL посоревноваться).

 Профиль  
                  
 
 Re: Перемножение матриц - конкурс для программистов
Сообщение11.02.2010, 00:55 
Заблокирован


12/11/09

92
Ajabsandal
Хороший программист достанет хороший транслятор бесплатно. Но дело не в этом: мало для кого эта задача подъемная, в том числе и для автора этой темы. Хороший алгоритм должен содержать не одну тысячу строк ассемблерного кода.

 Профиль  
                  
 
 Re: Перемножение матриц - конкурс для программистов
Сообщение11.02.2010, 01:21 


30/12/09
95
Ajabsandal в сообщении #287073 писал(а):
На сегодня есть последние версии трансляторов с С и Фортрана (с очень хорошими опциями оптимизации выполняемого кода) от ряда известных компаний (Напр. от Intel 11-ой версии). Стоят они хороших денег, которых у многих здесь нет.


Чем плоха оптимизация в Sun Studio, который распространяется бесплатно?

 Профиль  
                  
 
 Re: Перемножение матриц - конкурс для программистов
Сообщение11.02.2010, 04:46 
Заслуженный участник


26/07/09
1559
Алматы
2Ajabsandal
Цитата:
Поскольку алгоритм умножения матрицы давно изъежжен вдоль и поперек

Кажется, это не совсем так... По крайней мере поток публикаций на эту тему еще долго не иссякнет.

2Zealint
Цитата:
да еще и с шаблонами C++ - это не меньше чем 5% чисто программного замедления

Шаблоны не дают оверхеда по времени (при адекватном использовании).

 Профиль  
                  
 
 Re: Перемножение матриц - конкурс для программистов
Сообщение11.02.2010, 07:43 


22/09/09
275
Dongara в сообщении #287076 писал(а):
Ajabsandal
Хороший программист достанет хороший транслятор бесплатно. Но дело не в этом: мало для кого эта задача подъемная, в том числе и для автора этой темы. Хороший алгоритм должен содержать не одну тысячу строк ассемблерного кода.

достанет = украдет?
Джек Dongarra Вас бы не одобрил, а он для многих программистов авторитет!
У меня есть его фортрановские программы - весьма качественно написаны!
Насчет тысяч строк ассемблера думаю он тоже, как и я, не согласился бы. Это ведь нужно только для критических фрагментов всей программы, а отладка ассемблера требует куда больше сил и времени, чем языковая (С, Фортран, Паскаль ets.).

-- Чт фев 11, 2010 08:49:04 --

Circiter в сообщении #287087 писал(а):
2Ajabsandal
Цитата:
Поскольку алгоритм умножения матрицы давно изъежжен вдоль и поперек]
Цитата:
Кажется, это не совсем так... По крайней мере поток публикаций на эту тему еще долго не иссякнет.

Если так, то математическое словосочетание: 2х2=? (дважды два) встречается в интернете существенно больше чем умножение матриц.
Но может ли это говорить о нерешенности проблемы?

 Профиль  
                  
 
 Re: Перемножение матриц - конкурс для программистов
Сообщение11.02.2010, 08:12 


26/01/10
959
Dongara в сообщении #287049 писал(а):
Да что вы говорите? Очень интересно. А Вы хорошо знакомы с алгоритмами профессора Донгарры и соответствующими реализациями его алгоритмов в пакете Intel MKL?


Дорогой тов. Dongara, конечно же не знаком. Я вообще мало знаком с практическими реализациями тех или иных людей, меня всегда учили работать самостоятельно (что, конечно, не всегда хорошо) и поэтому делаю конкурс в том числе и для того, чтобы кто-нибудь мне такую программу тоже прислал. Маловероятно, но возможно, что она окажется быстрее всех. Я буду очень рад, если кто-то из специалистов по линейной алгебре достанет (или напишет) хорошую реализацию. Но пока этого не происходит. Вместо предложений попробовать то или это лучше сделайте это сами - получите объективную оценку тому, чего стоит такая реализация. По крайней мере, в других задачах на своем опыты убедился, что всякие реализации профессора Такого-То проигрывают по очень простой причине - из-за попытки написать алгоритм для универсального случая, когда случай вполне конкретный. При этом, конечно, это не уменьшает заслуги Профессора, просто задачи немного разные.

Цитата:
Я не хотел Вас обидеть или упрекнуть в нечестности. Моя мысль следующая.
На сегодня есть последние версии трансляторов с С и Фортрана (с очень хорошими опциями оптимизации выполняемого кода) от ряда известных компаний (Напр. от Intel 11-ой версии). Стоят они хороших денег, которых у многих здесь нет. Таким образом средний программист с деньгами может оказаться (по вашим критериям) лучше чем умелый, но бедный!
Поэтому условия соревнования должны иметь единый критерий. Я не выговариваю себе осоых условий и денег мне не надо, но я бы принял участие только на равноправных условиях (хотя готов и на Radeon-5ХXX серии, под OPEN CL посоревноваться).

Нет, все в равных условиях. Смотрите, если говорить о том, что у всех разная возможность доступа к компиляторам, то также можно сказать - у всех разные возможности доступа к научной литературе (например, у меня есть оригинал статьи Штрассена, а у вас (ну или у многих), скорее всего - нет). Далее, у всех разное воспитание в университете, поэтому у одного знаний больше, а у другого - меньше. У одного IQ 90, а у другого 180 (хотя это не показатель). Понимаете? Точно так же и с инструментами. Компилятор Intel можно отыскать при желании. Например, в университете у нас есть лицензионная версия. У кого нет, наверняка есть знакомый-программист из какой-нибудь фирмы и т. д. Каждый человек находится в своих условиях, а если хотите чтобы все было полностью одинаково - то это выглядит несколько утопично. Да и кроме того, программист, который съел собаку на оптимизации (не я, конечно) должен иметь этот компилятор под рукой всегда. Конечно, это ИМХО, но согласитесь, я привожу разумные доводы. Кстати, обидеть меня не получится : ) так что не извиняйтесь вы так зря : )



Цитата:
Хороший программист достанет хороший транслятор бесплатно. Но дело не в этом: мало для кого эта задача подъемная, в том числе и для автора этой темы. Хороший алгоритм должен содержать не одну тысячу строк ассемблерного кода.

Я уже отвечал на этот вопрос про ассемблер в своем FAQ, вопрос номер 3.

Цитата:
Чем плоха оптимизация в Sun Studio, который распространяется бесплатно?

Понятия не имею что это такое. Был бы вам признателен, если бы вы поучаствовали как раз с этой реализацией. Если знакомы с ней, это отнимет у вас минут 10 да? Зато вы получите полную оценку этой реализации на практике.

Цитата:
Шаблоны не дают оверхеда по времени (при адекватном использовании).

Ключевое слово - "адекватном". Где гарантия, что в uBLAS использование адекватное? Вот мне как раз один товарищ еще прислала программу gotoBLAS2 (понятия не имею о том, что это), но работает все равно не слишком шустро... проигрывает реализации "в лоб", написанной кем-то на Delphi.


Цитата:
... а это что прикол?:
"8.Максимальный порядок матрицы в тесте n = 5000"
Вы хоть представляете сколько лет такие монстры должны перемножаться?
А тут читаем:
"Время работы программы на каждом тесте не должно превышать 900 секунд."
Да ... смешно.

Тов. Андрей АK. Прежде чем смеяться, надо подумать. Во-первых, если в таблице рейтинга уже есть реальные записи с указанным временем работы программ, то вы что-то поняли неправильно (да, я видел, что вы ошиблись, спутав умножение и определитель, ничего страшного). Во-вторых, даже если бы я попросил считать определитель матрицы 5000 на 5000, то это примерно 30 секунд счета.
Например, Maple 13 решает эту задачу примерно за такое время, ответ типа 600 в степени N - это ерунда. У меня есть задачи, где надо считать харполином для матрицы размером в несколько тысяч, и числа в ней по 15 000 знаков каждое. Вот это уже я понимаю - задача. Кстати, это была реальная задача, которая возникла в процессе моих исследований.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 143 ]  На страницу 1, 2, 3, 4, 5 ... 10  След.

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group