четверг, 10 сентября 2009 г.

[comp.prog.benchmark] Реализация chameneos-redux от Дмитрия Вьюкова порвала всех на Computer Language Benchmark Game

Вот сравнительная таблица результатов: http://shootout.alioth.debian.org/u32q/benchmark.php?test=chameneosredux&lang=all
Результат в 0.72 секунды, когда ближайший конкурент показывает 4.59 – это мощно!

А вот сама программа: http://shootout.alioth.debian.org/u32q/benchmark.php?test=chameneosredux&lang=gcc&id=5

Мои поздравления Дмитрию (aka remark)!

Update: Дмитрий подготовил подробное описание того, что именно он сделал в своей реализации этого теста.

18 комментариев:

Unknown комментирует...

да remark вообще крут! По rsdn виден его резкий прогресс. Вот что бывает когда человек чем то серьёзно увлекается.

eao197 комментирует...

Ага. Ведь мало того, что увлекается, так еще ему и время удается выкраивать для этого!

Хотя, я думаю, он бы был не против, если бы это было хорошо оплачиваемым увлечением :)

Dmitry Vyukov комментирует...

спасибо-спасибо :)

Miroslav комментирует...

круто конечно.
вот только сочетание cas и реального быдлокода меня почему-то пугает. :)
Вот у нас реальный ппц - год не можем уговорить топ-менеджеров что работу софтинки в кластере должен делать программист, а не тело из офиса. При том что фабы уже стучатся с мешками бабла. Просто когда эти менеджеры закончили свое развитие не было кластеров и потоков и cas и вообще :D

ззы про контраст просто решил написать, вот.

eao197 комментирует...

2Rubanets Myroslav: да фиг его знает, во что реально весь этот шум вокруг multi/many-core затем превратится. В реальности все может оказаться и не так страшно. А может и наоборот -- вон, вокруг Web-технологий страшный ужас какой творится: начиналось с CGI, потом PHP/JSP/ASP, потом AJAX, JavaScript и Flash, RoR/Django -- и все это для решения, по сути, одних и тех же задач. Представь, что в области мультипоточности/многозадачности такой зоопарк вырастет? ;)

А что такое "фабы"?

Miroslav комментирует...

2eao197:
зоопарк таки вырастет - и это хорошо.

фабы = иносказательно ;) http://images.google.com.ua/images?hl=ru&client=firefox-a&rls=org.mozilla:en-GB:official&hs=XGi&q=semiconductor+fab&um=1&ie=UTF-8&ei=bxmqSsv2J8zJ_gasiLm8Bg&sa=X&oi=image_result_group&ct=title&resnum=4&gbv=1&ei=gRmqSsHQEdbisAbwr7n0Bw

jazzer комментирует...

Поздравляю, remark!!!

А насчет хорошо оплачиваемого увлечения - так он сам не хочет ;)

Dmitry Vyukov комментирует...

2jazzer Так просто оплаты никто и не предлагал. Предлагают или оплату И переезд из столицы в глубинку, или оплату И переезд вообще в другую часть света и культуру :)

Dmitry Vyukov комментирует...

2Rubanets Myroslav ну на вкус и цвет как говорится... Как по мне, так код вполне цивильный.
Кстати, а из-за каких именно моментов Вы назвали это быдлокодом?
В любом случае, проект открытый - любой может предложить свою, более хорошую реализацию.

Dmitry Vyukov комментирует...

Кстати, написал достаточно подробное описание реализации:
http://software.intel.com/ru-ru/blogs/2009/09/15/2002127/

Miroslav комментирует...

2Dmitriy V'jukov
я вообще то сказал что меня пугает смешивать такой код (тонкий) с быдлокодом. О вашем коде я хорошего мнения.

eao197 комментирует...

2Dmitriy V'jukov: за подробное описание того, что было сделано -- отдельное спасибо. Ща добавлю эту ссылку в текст заметки. Имхо -- это бы описание расширить вводными словами и пояснениями "для чайников" и получилась бы хорошая статья о том, как можно на низком уровне задействовать многоядерные процессоры.

Dmitry Vyukov комментирует...

2Rubanets Myroslav А, извиняюсь, тогда значит я не понял о чём речь... я правда и сейчас не понимаю. При чём тут быдлокод?

Dmitry Vyukov комментирует...

2Евгений Охотников а описанием чего именно расширить? Какие места требуют пояснения?

eao197 комментирует...

2Dmitriy V'jukov: навскидку:
a) нужно более подробно описать условие задачи и дать ее "хрестоматийное" решение на каком-то псевдокоде;
b) нужно объяснить для чайников, что такое CAS и почему используется он;
c) нужно объяснить для чайников, что такое линии кэша и чем опасно попадание данных для разных ядер в одну линию.

Т.е. представь, что ты пишешь для человека, который слышал шум про мультиядерность, но не очень представляет себе что это такое и что такое бенчмарк chameneos-redux.

Miroslav комментирует...

2Dmitriy V'jukov:
в общем-то Евгений Охотников уже написал - люди ничего не знают про микропроцессоры и их кэш и слова "модель памяти" у них остались в учебнике где было написано random access каждого байта ;) Они пишут код который едва едва работает в одном потоке и постоянно течет и крашит. Смены языков на это не влияют пока. Влияют только на форму диалогового окошка "программа совершила суицид и будет отправлена в ад".
ps да мы это уже обсуждали на кывте не раз (sleepydrago@кывт)

Dmitry Vyukov комментирует...

Спасибо за предложения, постараюсь их учесть в некоторой мере в дальнейшем.
Но как известно для кого пишешь, тот тебя и читает :) Если пишешь "для чайников", то и общаться потом придётся с чайниками. Пойдут вопросы а что такое мьютекс и когда я долежн я его использовать. Или а вот тут у меня лабораторная, не поможете? :)
Если/когда я буду зарабатывать этим на жизнь (платные статьи, лекции), то пожалуйста, тут можно на любом уровне. А так просто для себя писать полноценные тьюториалы, это конечно было бы здорово, но ресурсы не позволяют.

eao197 комментирует...

Ну смотри, Дима, ты автор, тебе решать. Представь себе, что есть куча опытных программистов, которые нормально понимают, как обращаться с mutex-ами и condition-ами, а вот с CAS-ами дел не имели. Я, например, и не вспомню, когда в последний раз CAS использовал и использовал ли вообще. Такие люди тебе только спасибо скажут, если ты механизм CAS-ов прямо в статье распишешь, а не будешь отсылать читателей в Wikipedia или какой другой толмуд.