713 Тем для обсуждения
6,530 Открытых обсуждений
- Association for Computing Machinery TechNews (ACM)
- Go Parallel! (Dr. Dobbs)
- HPCwire (Tabor Communications, Inc.)
- insideHPC (John West)
- Joe Duffy's Weblog (Microsoft)
- Microsoft Parallel Programming Development Center (Microsoft Germany)
- MultiCoreInfo.com
- scalability.org (Scalable Informatics)
- Software Dev Blog (Intel Germany)
- Soft Talk Blog (Intel United Kingdom)
- The Moth (Microsoft)
Help! Нужен совет, покритикуйте идею конкурса
Dmitry Oganezov (Intel) (87 пост(а)) 24.03.2009 02:43
Всем привет!
Мне нужны ваши советы. Мы тут в ISN планируем несколько конкурсов, на предмет которых я и хотел бы получить консультацию. Итак, речь пойдет о программерских конкурсах.
В прошлом году мы проводили конкурс Threading Challenge. Суть, если кто не знает, сводилась к решению классических задачек, вроде сортировки или транспонирования матриц. Threading Challenge состоял из 12-ти заданий и длился целый год. Уже к 4-му заданию стали очевидными несколько проблем: во-первых, победитель должен был набрать максимальный балл по сумме всех заданий. Во-вторых, те, кто использовал библиотеку TBB, получали «поощрительные» баллы. В-третьих, большинство задач сводились к быстрым последовательным алгоритмам.
Итого: 12 месяцев работы над последовательными алгоритмами, без шансов на победу, если ты не пишешь на C++ плюс TBB. Не очень-то весело, да? Неудивительно, что до победного финала дошли немногие.
Чтобы было веселей, главный судья Threading Challenge Клэй Бришерс созвал народ на совет в английском форуме. Там вообще-то отметились два «черных пояса», так что мне осталось только все внимательно прочитать, постараться понять, и сделать выводы. Вот что у меня получилось:
Задание конкурса:
Задача «из реальной жизни» с общеизвестными алгоритмическими решениями. По крайней мере один из алгоритмов должен хорошо распараллеливаться. Задача не должна относиться к специальным областям знаний, таким как высшая математика, физика, обработка видео и т.д. – иначе специалисты в данных областях получат подавляющее преимущество.
Критерии судейства:
Лучшей работой будет та, которая А) покажет самый быстрый результат на «нормальном» оборудовании, скажем, на 4-х ядерном процессоре и Б) масштабируемость решения при этом будет «самой линейной» при тестах на системах от одного до «много» ядер.
Языки – инструменты – платформы:
Конкурс не должен ограничивать участников в выборе языка или других средств имплементации решений. Мне очень понравился комментарий «от ассемблера до макросов Excel»
. Тестовые платформы надо объявлять объявить заранее, причем со всеми деталями (процессор, память, версия операционной системы, конфигурация, и т.д.).
Логистика (как я это вижу).
- Мы объявляем задание и публикуем свою версию решения с исходным кодом, бинарниками и результатами/временем исполнения на тестовых платформах.
- Участнику необходимо предложить решение, превосходящее «стартовое», опубликовав свой вариант, включая исходный код, бинарники и описание своей работы.
- В течение 24-х часов судьи публикуют результаты/время исполнения предложенного решения на тестовых платформах. Таким образом, участник в течении суток узнает свое место в рейтинге.
- Место работы в рейтинге вычисляется исходя из критериев производительность – масштабируемость. Например: первое место за производительность и третье за масштабируемость могут дать суммарное второе место, в зависимости от того, как распределились места других работ.
- Участник может улучшить свою работу и прислать новую версию, но не ранее чем через 24 часа после того, как опубликованы результаты исполнения предыдущей. Для каждой новой версии необходимо предоставить подробное описание сделанных изменений.
Иными словами, я предлагаю «игру в открытую». Конкурсанты видят решения соперников и соответственно могут улучшить свою программу. При этом необходимо описать суть и идею сделанных изменений. Можно рискнуть и держать свое решение до победного, но тогда есть вероятность что кто-то сделает быстрее и лучше. Можно сразу открыть карты, и сорвать банк. Официально. Ну, вы понимаете
.
А вот теперь мне нужен ваш совет, точнее – критика. Раскритикуйте, пожалуйста, мое предложение. Найдите подводные камни, скрытые течения…
Всем удачи! Буду особо благодарен за идеи «задачек» - пишите, обсудим!
Категории: Intel Software Network, Конкурсы и мероприятия, Параллельное программирование
Метки: конкурс
Пожалуйста, обратитесь к странице Уведомление об оптимизации для более подробной информации относительно производительности и оптимизации в программных продуктах компании Intel.
Комментарии (40)
| 23.03.2009 23:51
Dmitriy Vyukov
| Я так понимаю, Дмитрий имел в виду - видеть только набранные очки соперников, а не их исходные коды... ну по-крайней мере я на это надеюсь :) |
| 23.03.2009 23:58
Dmitriy Vyukov
|
> Мы тут в ISN планируем несколько конкурсов... Речь идёт о том же Threading Challenge 09? Или о каких-то дополнительных конкурсах ISN Russia? |
| 24.03.2009 00:40
Dmitriy Vyukov
|
> Задание конкурса: В принципе наверное можно и что-то узкоспециализированное, НО если при этом решение будет дано изначально вместе с условием. Например, на AMD Threadfest в одном из раундов проблема была raytracing, наверное не каждый бы осилил это сходу, но базовая реализация была дана вместе с условием. Хотя и тут есть засада, выиграл в итоге человек, который, насколько я понял, был знаком с raytracing-ом давно, т.к. он применил ряд очень специфичных алгоритмических оптимизаций. В другом раунде, где что бы выиграть надо было применять декомпозицию матриц и FFT свёртку, часть людей, которая даже до этого додумалась, просто не смогла за предоставленное время до конца сделать всю математику и правильно её реализовать. В идеале, конечно, хотелось бы видеть задачи достаточно простые со стороны математики, и понятные всем; с другой стороны - а удастся ли найти среди таких задач достаточно интересные и сложные с т.з. распараллеливания? Наверное полностью уйти от всех предметных областей не получится, т.к. если задание будет даже просто реализация какой-то структуры данных, то те, кто работает со структурами данных годами (как ни странно маленькая часть программистов), будет в большом плюсе, т.к. сможет выбрать какую-то нетривиальную структуру данных и/или применить ряд нетривиальных оптимизаций. |
| 24.03.2009 00:57
Dmitriy Vyukov
|
Ну и ещё раз повторюсь, что мне бы лично хотелось бы видеть среди заданий такие как, например, реализация ран-тайма языка, реализация ядра многопоточного сервера, реализация параллельного сборщика мусора и т.д. Или вот несколько задач: http://www.rsdn.ru/forum/message/3280155.aspx http://www.rsdn.ru/forum/message/2806286.aspx Такие задачи могли бы составлять, например, половину или треть всех заданий. К сожалению Клей так ничего и не прокомментировал по этому поводу... За время участия в AMD Threadfest round 4, где заданием была реализация фильтра изображений, я, к сожалению, ни не смог применить свои знания по многопоточности, ни не смог ничему научиться в этой области. Так как "threading часть" состояла из вставки одной "#pragma omp parallel for" в достаточно очевидное место (хотя об участии в целом не жалею, т.к. всё равно узнал много нового). |
| 24.03.2009 00:59
Сережа М
| Можно взять какую-нибудь классическую, известную всем задачку, например "нахождение кратчайшего расстояния между городами" (кратчайший путь в графе), она имеет несколько классических вариантов решения, которые параллелятся многими способами. (http://ru.wikipedia.org/wiki/лгоритм_Дейкстры) |
| 24.03.2009 01:09
Dmitriy Vyukov
|
> Критерии судейства: Я так понимаю, что касательно масштабируемости речь идёт о моём предложении. Сейчас попробую ещё раз описать свою идею, надеюсь, что на русском получится лучше. Допустим на 4-ёх ядерном процессоре (Core i7) самым быстрым оказывается решение Х. Но если бы его запустили на 8/16/32/64/128 ядерной машине, то увидели бы, что производительно всё больше и больше деградирует. Т.е. решение не есть действительно параллельное решение, пригодное для "many-core future", а просто быстрая однопоточная реализация, возможно с некоторым элементом распараллеливания. Зато другое решение Y не самое быстрое на 4-ёх ядерном процессоре, зато стабильно показывает линейную масштабируемость при увеличении числа ядер. И, допустим, на 64 ядрах всё же обгоняет решение Х. Моя идея была - попытаться как-то учесть этот момент. Хотя как именно это сделать хорошо пока не понятно. Тут необходима какая-то экстраполяция производительности, т.е. приближение, а судить по приближению... Идеальный вариант был бы просто запускать программы на 128-ядерной машине и смотреть на чистую производительность (забыть о масштабируемости), т.к. на такой машине решение с хорошей масштабируемость будут автоматически получать значительное преимущество. Я думаю, что уже достаточной машиной для этого была бы что-то типа 4-ёх процессорной системы с 6-ти ядерными i7. |
| 24.03.2009 01:10
Dmitriy Vyukov
|
> Языки – инструменты – платформы: Так же желательно указать ОС, компиляторы, версии компиляторов и ключи компиляции. |
| 24.03.2009 01:20
Dmitriy Vyukov
|
> Логистика (как я это вижу). Мне очень понравилось, как это было организовано на AMD Threadfest. Они проводили конкурс на базе платформы TopCoder, и наверное TopCoder взял на себя большую часть проблем. Сабмитить можно было сколько угодно раз, но не чаще чем в пол-часа. Сабмитить можно было "решения" и "тесты". После сабмита программа автоматически тестировалась и автоматически высылались результаты на email (включая вывод программы). Если был засабмичено решение, то результат автоматически публиковался в итоговой таблице. Если тест - то результат не публиковался. Это позволяло сабмитить просто небольшие тесты, которые тестируют какой из двух подходов работает быстрее. Например это было очень полезно для тестирования оптимизированных SSE реализаций или каких-то других деталей, т.к. у них стоял 8-ми ядерных AMD Opteron, а у меня 4-ёх ядерный Intel Core :) |
| 24.03.2009 02:44
ksili
|
Наверно не надо бояться давать специализированных задач. Лучше дать несколько таких задач, но из разных областей. Кто-то знает raytracing, кто-то структуры данных, кто-то занимался долго сжатием, кто-то ещё чем-то... Вряд ли много людей, которые знают все это в совершенстве. но если вдруг такой человек окажется на конкурсе, то я думаю, он будет заслуженным победителем. почему нет? Ещё думаю можно сделать одну задачу такой: дать задачу, для который пока вообще не существует параллельной реализации, и принимать только те решения, в которых есть распараллеливание. Вдруг кому-то в голову придёт гениальное решение... |
| 24.03.2009 03:55
Dmitry Oganezov (Intel)
|
Ого! Сколько откликов, не ожидал... Спасибо! 1) Речь идет об абстрактном конкурсе, не обязательно Threading Challenge. Я, скорее, склоняюсь к небольшому, но интересному междусобойчику в нашем сообществе. «Я подустал от официоза» (С) – хочется чего-то домашнего. Но Threading Challenge также касается, мы как раз над этим работаем. 2) Честно говоря, имел ввиду именно открытый код. Я понимаю, что идея выглядит слегка безумной, но… Я недаром добавил пунктик «для каждой новой версии необходимо предоставить подробное описание сделанных изменений» - таким образом, если участник тюнил чужое приложение, он должен написать «лепил с товарища Ленина» (к примеру). А мы введем какие-нибудь хитрые ограничения. Что скажете? 3) В узкоспециализированных задачах есть еще одна проблема. Мне хотелось бы получить живое, интересное, обсуждение конкурсной задачи и вариантов решения. Я не ставлю задачу набрать сотни конкурсантов, но несколько десятков хотелось бы. Я не думаю, что у нас получится обсуждение raytracing. Хотя, может я не прав? 4) Речь идет о блиц-конкурсах. Один конкурс – один (максимум – два) месяца, одно задание. Потом следующий, с другими правилами, с другим заданием. И так далее. Соответственно, сложностью задания мы регулируем уровень участников. Поэтому: 5) 2 Dmitriy Vyukov – Дмитрий, вы только не обижайтесь, но людей вашего уровня не затащить в сообщество никакими конкурсами. Такие как вы либо приходят, либо нет :). Поэтому задачи типа ран-тайм языка, боюсь, не позволят достигнуть моих целей (выше). 6) 2 Дмитрий & Сергей М. – Задачи с графами довольно интересны, но есть одна проблемка… Зависимость от тестовых данных. Например, человек отлаживался на моих тестовых данных, а потом выясняется, что если поменять два узла местами, то другой алгоритм дает лучший результат? Хотя согласен, – графы понятны всем со второго курса. Это хорошо. 7) 2 Dmitriy – идея с масштабируемостью как критерием не нова, но именно ваши комментарии у Клэя в форуме натолкнули меня на один из методов ее измерения. Детали пока раскрывать не буду, хотя прозрачный намек уже сделал Леша Куканов, в моем предыдущем посте про число Пи. 8) Платформы типа TopCoder – моя мечта. Я над этим уже второй год думаю :) . Как и любая мечта, в данный конкретный момент она недостижима. Но я буду к ней стремиться! :) |
| 24.03.2009 08:34
Сережа М
| +1 |
| 24.03.2009 08:38
Сережа М
|
1. Открытый код - очень хорошая идея. Думаю, что тех людей, которые попытаются украсть код получиться забанить на уровне жюри, в конкурсе же не буддет 1000 участников. А воровать друг у друга идеи - это прекрасно, все добьются лучших результатов. 2. Для задач и сходными данными, типа, задачи на графах - можно нагенерить тестовых примеров, и при тестировании использоть только данные из тестовой библиотеки. 3. Кажется, будет прикольно использовать какую-нибудь задачу со школьной олимпиады, пусть программисты помучаются :). Например, http://www.informatics.ru/viewproblem.php?problem_id=472&round_id =142 |
| 24.03.2009 11:11
Alexey Kukanov (Intel)
| А чего вы так боитесь того, что кто-то "украдёт" ваш код? :) Вы точно так же сможете позаимствовать улучшения, они же тоже будут открыты. |
| 24.03.2009 12:16
Dmitry Oganezov (Intel)
| Ага, мнения разделились... И потом (в защиту открытого кода) - а как же те, кто будет писать на JavaScript или макросах в Excel? У них-то код всегда открыт :) |
| 24.03.2009 12:18
Dmitry Oganezov (Intel)
| Еще вопрос - призы. Что бы вы хотели видеть в виде приза? Не, я понимаю что AUDI S5 2009-го года выпуска пожалуй лучший вариант, и я над этим усиленно работаю, но хотелось бы обсудить альтернативы. Скажем, нетбук? Набор процессор плюс материнка? Какие будут пожелания? |
| 24.03.2009 13:56
ilnarb
| также интересно были бы в качестве приза лицензии на компилятор или витюн, .... |
| 25.03.2009 00:52
Антон Бевзюк (Intel)
| В качестве приза - видюху хорошую! |
| 25.03.2009 02:28
ksili
| А мне бы ипотеку погасить... |
| 25.03.2009 04:08
Dmitry Oganezov (Intel)
|
:) спасибо за идеи по поводу призов. И все-таки, главный вопрос на повестке дня - открытый код версус "закрытый". Давайте все-таки определимся - я склоняюсь попробовать открытый, a ksili и Дмитрий Вьюков против. Аргументы, как я понял - кто-то может слегка затюнить хороший алгоритм, получить +1% производительности и выбиться в лидеры. Контр-аргументы: автор может предоставить вплоть до 15 своих вариантов, так что можно получить еще +N%. Кроме того, код-то весь открыт, так что утечка секретов будет работать в обе стороны. Наконец, как я уже сказал, мы будем требовать подробное описание - и если изменения несущественны, оставим за собой право снимать "ворованные" решения (да и кажется мне что стыдно писать что-то типа "я взял работу Васи Пупкина и поменял int на short, поэтому моя версия лучше). В конце концов - "новички воруют, а профессионалы заимствуют" :) |
| 25.03.2009 07:00
Dmitriy Vyukov
|
Призы - SSD винт, 6-ти ядерный процессор, набор книг от Интел, лицензии на ПО Интел. |
| 25.03.2009 09:52
Dmitry Oganezov (Intel)
|
Тема открытого кода усердно заминается, я смотрю ;) Дмитрий, а какой именно шестиядерник? ark.intel.com |
| 25.03.2009 21:48
ksili
| Я как бы не совсем против "открытого" кода... Я ж написал, что открытыми они будут пусть только для тех, кто уже выложил своё решение. И сейчас я подумал, что пусть это будет не любое решение, а, допустим, входящее в пятёрку-десятку лучших, в зависимости от количества участников. |
| 26.03.2009 01:44
Dmitriy Vyukov
|
А в чём смысл открытого кода? Какие положительные моменты это даст? Мне кажется, что открытый код снизит соревновательный момент и интригу. Будет соблазн не думать самому, а просто срисовать с лучшего решения. При чём даже в том случае если бы конкурсант сам мог бы придумать возможно и более хорошее решение, если бы подумал; а там - не удержался, поглядел на какое-то решение, и "зациклился" на нём - своего лучшего решения уже не будет. Потом, как отличать, что конкурсант срисовал решение или сам придумал аналогичное? Топовые решения зачастую очень похожи друг на друга, иногда до мельчайших деталей. При закрытом коде - если я предложил какое-то решение, значит я сам его придумал. При открытом - если я предложил какое-то решение, которое уже было, значит на меня сразу подозрение, что я срисовал. Ну а после завершения конкурса (когда интрига на пике - как это он так смог в 10 раз быстрее меня сделать?! :) ) можно и код открывать. |
| 26.03.2009 10:25
Dmitry Oganezov (Intel)
|
Смысл открытого кода… Понимаете, тезка, лично мне не нужны про-маркетинговые конкурсы с баннерами по всему рунету и пресс-релизами. Знаете, сколько человек выполняли последние задания TC? Шестеро. Из них двое просто «из принципа». А мне нужны новые люди в русском сообществе и новые, интересные, идеи. И чем больше информации доступно в процессе конкурса – там интереснее, тем больше новых мнений, и тем больше новых участников. А то обычно получается как: есть задание, которое могут выполнить очень многие. Но не все знают уровень, с которого можно претендовать на победу. Поэтому до конца доводят задание только единицы. Другой вариант: есть задание, есть «стартовое» решение, есть несколько решений «в игре», на которые можно взглянуть, и есть еще пара недель на эксперименты – значит, есть пища для размышлений и стимул вложиться в оптимизацию (а может и новый алгоритм). Эх, жалко, что после переноса форума на новую площадку приказали долго жить ветки форума по Threading Challenge 2007-2008… Но я по памяти. Смотрите, какая штука получилась в прошлый раз: после публикации задания первые дней десять народ активно обсуждал и уточнял задание и входные данные. Потом, дней десять, появлялись вопросы по алгоритмам, в основном «а если я сделаю так, это нормально?». Еще были философские вопросы, но они не в счет. Потом было затишье, а после окончания этапа происходил обмен впечатлениями и поздравлениями друг друга с набранными очками. Как такового обсуждения имплементаций не было. И это мне очень не нравится. Хотелось бы, чтобы в процессе конкурса происходило коллективное творчество. Кроме того. Открытый код не принуждает публиковать решение – скажем, первый этап идет с 1 по 30 апреля. Можно ведь отправить свою работу 30 числа, если кто-то очень уверен в производительности своего решения. Хотя, я постараюсь сделать так, чтобы уверенности не было – например, буду использовать для тестов машину с большим количеством процессоров. Такую, чтобы не у всякого была. Еще идея – дать возможность выступать как в открытой, так и в закрытой категориях. То есть можно выложить код на общее обозрение, а можно – только для судей. Те, кто играет «в открытую», получают какое-либо дополнительное преимущество. Вот такие примерно мысли. Как всегда, заранее спасибо за критику и замечания! |
| 26.03.2009 10:29
Dmitry Oganezov (Intel)
|
"Потом, как отличать, что конкурсант срисовал решение или сам придумал аналогичное? Топовые решения зачастую очень похожи друг на друга, иногда до мельчайших деталей" - как я уже говорил, обязательным условием будет детально описание сделанных изменений. То есть если кто-то уже выложил хорошее решение, "тюнерам" придется на него сослаться. В этом как раз и есть соревновательный момент... Какую бы аналогию привести... Например, фигурное катание - все же видят выступления своих соперников. И если кто-то выполнил интересную комбинацию, ее можно повторить. Но победы-то это не гарантирует - все равно нужны какие-то свои "фишки". |
| 26.03.2009 12:27
Dmitriy Vyukov
|
> То есть если кто-то уже выложил хорошее решение, "тюнерам" придется на него сослаться А не тюнерам, а тем, кто сам это же придумал, возможно и не смотря других решений, что делать? Если просто его описать, то, как я понял, жюри его отбракует как наглую кальку... |
| 26.03.2009 12:40
Dmitry Oganezov (Intel)
|
А, вот про что речь... Как раз это, как мне кажется, и является основным стимулом - есть очевидные части решения, а есть неочевидные. Открытый код позволит забыть о очевидных вещах (их многие сразу используют), и сконцентрироваться на неочевидных, которые у каждого будут свои. Это, значиться, раз. Ну а два - надо постить свою работу первым, и будет все окей! Кстати, возникла идея пока писал. А что если, к примеру, ввести "общак" баллов за оригинальность? Поясню: каждому участнику дается 1000, к примеру, баллов. Если "тюнер" модернизировал чье-то решение, то из его 1000 вычитается 100, а к счету "донора" 100 соответсвенно добавляется. Т.к. код открыт, то система будет прозрачна. По идее... Надо подумать на этот счет. |
| 26.03.2009 13:11
Dmitriy Vyukov
|
> Потом было затишье, а после окончания этапа происходил обмен впечатлениями и поздравлениями друг друга с набранными очками. Как такового обсуждения имплементаций не было Вот, что было на AMD Threadfest после одного раунда: http://forums.topcoder.com/?module=Thread&threadID=630778&start=0&mc=37 http://forums.topcoder.com/?module=Thread&threadID=630779&start=0&mc=17 http://forums.topcoder.com/?module=Thread&threadID=630800&start=0&mc=5 Читало это всё, я думаю, значительно больше народу, чем писало; т.к. просто не всем было, что сказать по существу. Я по крайней мере прочёл всё от корки до корки со специально сделанной распечатки. Мой лично интерес был вызван как раз интригой - я видел, что есть решения лучше моего на порядок, 2 недели я пытался их догнать, когда же они были открыты, я естественно их изучил; после этого мой интерес к этой теме значительно спал. Если бы они были открыты во время турнира, то интерес возможно бы спал во время турнира... > Например, фигурное катание - все же видят выступления своих соперников. И если кто-то выполнил интересную комбинацию, ее можно повторить. Наблюдать за выступлением соперников это ИМХО как раз и есть видеть только результирующий счёт. Я или могу сделать тройной тулуп или нет. Я не могу видя, что его кто-то сделал, произнесением магической фразы "копи-паст" научиться его делать за мгновение. |
| 26.03.2009 13:20
Dmitriy Vyukov
|
> Как раз это, как мне кажется, и является основным стимулом - есть очевидные части решения, а есть неочевидные. Совпадают как раз неочевидные части решения: http://forums.topcoder.com/?module=Thread&threadID=630778&start=0&mc=37 http://forums.topcoder.com/?module=Thread&threadID=630779&start=0&mc=17 http://forums.topcoder.com/?module=Thread&threadID=630800&start=0&mc=5 Почти все (из топовых участников) делали или SVD разложение матрицы либо eugen разложение, почти все (из топовых участников) делали FFT свёртку. Хотя, конечно, некоторые различия у них были, т.к. есть разные способы делать FFT преобразование, есть некоторые нетривиальные оптимизации при разложении матриц. Но я достаточно сильно уверен, что на некоторых задачах решения будут совпадать до неприличных деталей. Ну это как говорится - правильно делают все одинаково, а ошибается каждый по-своему (ну или что-то в таком духе). Объективные причины будут толкать людей думать в одну сторону... ну или в некоторое маленькое число сторон. |
| 26.03.2009 14:38
Svetlana Emelyanova (Intel)
|
Похоже обсуждение как-то зашло в тупик... Вообще стоит ли делать код открытым - вопрос действительно очень спорный. > ... не нужны про-маркетинговые конкурсы с баннерами по всему рунету и пресс-релизами. Знаете, сколько человек выполняли последние задания TC? Шестеро. Из них двое просто «из принципа». А мне нужны новые люди в русском сообществе и новые, интересные, идеи. Во-перых формат конкурса TC был несколько другой - он целый год тянулся, во многом из-за этого интерес пропал. Во вторых, важно все-таки качество, а не количество. Если у человека трудности с очевидной частью решения, как-то сомеваюсь я, чтобы у него появились неординарные идеи... Потом когда видишь исходный код, есть очень большая вероятность, что начнешь циклитсья именно на этом решении, хотя может быть оптимальнее было бы все переписать с нуля. В общем мне кажется открытость кода несколько снизит элемент соревновательности и может даже расслабит участников... Многое зависит также от самого задания. Здесь можно согласиться с Дмитрием, что алгоритмы, представленные участниками могут быть практически идентичны и какого-то революционного решения может просто не существовать... Хотя, с другой стороны, как ты Дим, предложил, если хорошо продумать систему начисления баллов + жестко поставить условие детального описания нововведений, то возможно открытый код и имеет смысл. |
| 26.03.2009 14:42
Svetlana Emelyanova (Intel)
|
Да, и еще.. >дать возможность выступать как в открытой, так и в закрытой категориях. Вот этого делать точно не стоит - условия участия должны быть для всех одинаковы. А то тоже самое что и с TC получится - используешь/не используешь TBB |
| 27.03.2009 01:11
Dmitriy Vyukov
|
> 5) 2 Dmitriy Vyukov – Дмитрий, вы только не обижайтесь, но людей вашего уровня не затащить в сообщество никакими конкурсами. Такие как вы либо приходят, либо нет :). Поэтому задачи типа ран-тайм языка, боюсь, не позволят достигнуть моих целей (выше). Всё зависит от того, как поставить задачу. Например, задача со сборщиком мусора (GC) в самом простом случае может сводиться к той же задачке на графе - найти множество недосигаемых из заданного множества вершин. Можно несколько усложнить добавив требование останавливать и запускать рабочие потоки. Можно ещё усложнить тем, что граф может меняться "под ногами". Или ран-тайм языка, тут по-минимуму надо реализовать 2 функции - запуск новой задачи и дожидание завершения задачи. Т.е. порог вхождения можно сделать сколь угодно низким. Ну хотя в идеале хотелось бы при этом иметь и достаточно простора для мысли. Основная идея задач, которые я предлагаю, это то, что в них основная (если не единственная) предметная область - это и есть сама многопоточность и параллелизм как таковые. В каждой программе есть ряд внутренних компонент, которые никак не связана с предметной областью приложения, - планирование, логирование, управление памятью, управление временем жизни объектов, контейнеры и т.д (многие из них врожденно централизованные). Без аппаратного параллелизма эти компоненты достаточно тривиальны и особого интереса не представляют. Но с появлением аппаратного параллелизма их масштабируемая реализация становится отнюдь не тривиальной. Если даже порог вхождения будет достаточно низким, то победа в соревновании, конечно, потребует более глубоких знаний в предметной области. Но тут хотя бы всё встаёт на свои места - в многопоточном конкурсе побеждает тот, у кого более глубокие знания по многопоточности; если не выигрываешь в многопоточном конкурсе из-за недостаточно глубоких знаний в области многопоточности, то тоже всё понятно (в отличие от глубоких знаний по математике или цифровой обработке сигналов в "многопоточном" конкурсе). |
| 27.03.2009 01:12
Dmitriy Vyukov
|
з.ы. опять появился баг с вырезанием всех переводов строк из комментариев |
| 27.03.2009 04:25
Svetlana Emelyanova (Intel)
|
Да, наши разработчики, так сказать, "неожиданно" немного пофиксили комментарии Word Press. И теперь, чтобы добавить брейк - надо в ручную добавить тег. Дико неудобно, но пока похоже придется с этим жить. Но есть и плюс несомненный - теперь можно добавлять теги html типа strong, em и т.д. для выделения текста. |
| 27.03.2009 09:50
Dmitry Oganezov (Intel)
|
Блин я кое-кому за такие нововведения с комментариями пожалуй выпишу награду в виде киловатного паяльника в одном месте :) Света, Дмитрий, вы посеяли зерно сомнения у меня в голове. Я беру тайм-аут на пару дней, буду думать, обсуждать с американскими коллегами, лазить по интернету, тыщу байт ему в килобайте. В конце концов, никто не мешает попробовать и так и так :). |
| 30.03.2009 19:43
ksili
| Мне вот ещё что интересно. Допустим, будет задание на математику, где будут использоваться операции с матрицами. Имеет ли в таком случае хоть какие-то шансы участник, у которого нет возможности использования Intel C++ Compiler, MKL, IPP... перед теми, кто имеет на них лицензии? |
| 31.03.2009 03:08
Dmitry Oganezov (Intel)
|
2 ksili - Хороший вопрос. Как я уже говорил, использование тяжелых матричных заданий я постараюсь избежать, по нескольким причинам. Во-первых, очень тяжело соревноваться с MKL - а теоретически многие задачи можно свести к библиотечным функциям. Во-вторых, я не хотел бы сводить конкурс к поиску библиотечных функций. В-третьих, даже использование триальных лицензий все равно поставит в трудное положение какого-нибудь грамотного парня из глубинки, для которого скачивание 500-600 метров уже проблема. Напоминаю, ято у нас есть триальные лицензии на весь софт. При необходимости я могу сделать для участников расширенные триальные лицензии. |
| 01.05.2009 11:47
jne100
| А мне кажется было бы интересно очень сильно ограничить время решения задачи.. можно ограничиться днем, а в особо экстремальных случаях - несколькими часами или даже одним.. Проводить контест так: знаешь что задачу опубликуют скажем в 21.00, сидишь, ждешь; опубликовали - быстрей делаешь ее и тут же отсылаешь... В таком случае проверялись бы совсем другие навыки нежели в долгих контестах... А то первый раунд Threading Challenge уже сколько тянется... |
| 02.05.2009 04:22
Dmitry Oganezov (Intel)
|
Там судейство первого руанда что-то затянулось. А вообще-то скоро уж задание третье опубликую, а там и второе решение присылать пора. Насчет "блиц-конкурсов" я уже думал. Это нечто вроде олимпиады получается. Только вот сомневаюсь я что-то: олимпиады - они ж для свободных студентов. А серьезные люди как же? Работа-семья, а тут вдруг еще и ночной конкурс ;) - могут неправильно понять... Хотя можно выходной попробовать... Подумаем. |





ksili
7,570
> и соответственно могут улучшить свою программу.
Свою или чужую? Не получится ли так, что кто-то делал программу неделями, выложил, а кто-то её немного оптимизнул за два дня - и в лидерах.
может давать возможность видеть чужие решения только тем, кто уже выложил своё? Тогда по-крайней мере можно будет проследить, что человек улучшил именно СВОЙ код на основе своих мыслей или того, что он увидел у других, а не просто взял ЧУЖОЙ код и оптимизировал его.