Re[8]: Многопоточность сегодня
От: WolfHound  
Дата: 11.10.07 17:32
Оценка:
Здравствуйте, AVM, Вы писали:

AVM>Ну а если уж сваливаться на философию, то мое мнение начинает сдвигаться в сторону что развитие современных кремниевых процессоров — тупиковая ветвь. Какая разница 4 или 80 или 8000 ядер. Качественный скачек это не дает, просто порождает кучу проблем и обсуждений на форумах.

AVM>С другой стороны у каждого из нас в голове содержится нехреновый такой вычислительный центр додключенный к обалденным устройствам ввода/вывода
Вобще говоря эти машинки обладают принципиально разными свойствами и ИМХО то что хорошо делает одна другая будет делать плохо. Обратоное тоже верно.
Те они не будут заменять друг друга. Они будут друг друга дополнять.
... << RSDN@Home 1.2.0 alpha rev. 745>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[6]: Многопоточность сегодня
От: Кодт Россия  
Дата: 11.10.07 17:53
Оценка: +1
Здравствуйте, remark, Вы писали:

R>Но основная беда даже не в этом.


R>(опустим пока такие тривиальные вещи как сериализация на мьютексах)


R>Передача кэш-линии занимает порядка 150-350 тактов. Даже без всяких атомарных операций и пр.

R>Т.е. скорость работы снижается до 100 (!) раз. Т.о. тривиальный producer-consumer может стать ботлнеком, если данные просто переходят из одного кэша в другой (без всяких atomic, мьютексов, евентов, вызовов я ядро для пробуждения consumer).
R>Плюс шина межпроцессорного/межядерного взаимодействия может стать боттлнеком, так что приложение просто не будет масштабироваться вообще при добавлении ядер, даже если потоков/работы достаточно, и нет сериализации на мьютексах, ядра не загружены и шина памяти не загружена.

Получается, что нужно сосредоточиться не только на стычках потоков вокруг общих данных (что всегда было предметом уважения), но и на стычках ядер вокруг линеек кеша.

Это означает, что
— чем больше взаимодействие между потоками основано на пакетной обработке, тем лучше (впрочем, это и для одноядерных справедливо — в том плане, чтоб минимизировать переключения потоков)
— для очередей, не предполагающих пакетную обработку — нужно разбрасывать элементы по разным линейкам
Правильно?

На моей памяти это уже второй виток хардверно-специфических оптимизаций. Первый был, когда стали очень уважать попадание/промахивание в кэш своего ядра
... << RSDN@Home 1.2.0 alpha rev. 655>>
Перекуём баги на фичи!
Re[8]: Многопоточность сегодня
От: remark Россия http://www.1024cores.net/
Дата: 11.10.07 17:57
Оценка:
Здравствуйте, AVM, Вы писали:

AVM>Ну а если уж сваливаться на философию, то мое мнение начинает сдвигаться в сторону что развитие современных кремниевых процессоров — тупиковая ветвь. Какая разница 4 или 80 или 8000 ядер. Качественный скачек это не дает,


А качественного скачка и раньше никогда в истории не было. Было 10МГц, потом 20МГц, потом 50МГц, потом 100МГц, потом 200МГц, потом 500МГц, потом 1ГГц.
Просто умножается на 2. И это всех устраивало. И будет устраивать.

R>>

AVM>

1024cores &mdash; all about multithreading, multicore, concurrency, parallelism, lock-free algorithms
Re[21]: Многопоточность сегодня
От: remark Россия http://www.1024cores.net/
Дата: 11.10.07 17:59
Оценка:
Здравствуйте, Константин Л., Вы писали:


R>>С использованием std::atomic я показал, как должна была бы выглядеть программа для сферического компьютера в вакууме. Т.е. где должны быть какие типы барьеров.

R>>Потом я сказал, что те типы барьеров, которые тут должны быть на сферическом компьютере, на x86 не нужны, т.к. всегда присутствуют неявно.
R>>Т.е., если я пишу под x86, то я ничего не использую.

КЛ>


КЛ>Т.е. ты хочешь сказать, что Interlocked _вообще_ никогда не нужен и все само собой синхронизируется?


Где я это сказал?!

[дальнейшие фантазии поскипаны]


1024cores &mdash; all about multithreading, multicore, concurrency, parallelism, lock-free algorithms
Re[7]: Арифметика
От: remark Россия http://www.1024cores.net/
Дата: 11.10.07 17:59
Оценка:
Здравствуйте, Константин Л., Вы писали:

КЛ>Ну, честно признаюсь, дальше этого я не ходил:


КЛ>

КЛ>Without a garbage collector, things get harder. Much harder, actually, and it turns out that deterministic memory freeing is quite a fundamental problem in lock-free data structures.



Тогда было проблемой. Но развитие не стоит на месте


R>>>>

R>>

1024cores &mdash; all about multithreading, multicore, concurrency, parallelism, lock-free algorithms
Re[5]: Многопоточность сегодня
От: Cyberax Марс  
Дата: 11.10.07 18:15
Оценка:
Здравствуйте, eao197, Вы писали:

C>>А почему тут происходят переключения контекстов?

E>Если нить ввода-вывода и нить обработки находятся на разных ядрах, то передача сообщений между ними оказывается дороже, чем при работе обоих нитей на одном ядре. По крайней мере, по моим впечатлениям.
У меня впечатления обратные — передача данных через неблокирующуюся очередь (java.util.concurrent.ConcurrentNavigableMap, если кому интересно) у меня работает абсолютно с одинаковой скоростью на любом количестве процессоров (масштабируется почти линейно).
Sapienti sat!
Re[7]: Арифметика
От: remark Россия http://www.1024cores.net/
Дата: 11.10.07 18:18
Оценка:
Здравствуйте, WolfHound, Вы писали:

WH>Здравствуйте, remark, Вы писали:


R>>??? достаточно *либо* GC, *либо* RCU, иметь их вместе бессмысленно.

WH>Главная идея RCU (http://en.wikipedia.org/wiki/Read-copy-update оно?) это неизменение разделяемых данных, а изменеие ссылки по которой эти данные получают на ссылку на обновленные данные.
WH>Те GC не отменяет RCU. Но делает реализацию данного паттерна тривиальной.

Я бы так не сказал. "неизменение разделяемых данных" это основа практически всех lock-free алгоритмов.
RCU тут как раз решает задачу отложенного выполнения действий. Т.н. PDR, partial-copy-on-write deferred reclamation.
И в принципе теоретически можно произвольно выбрать какой-либо алгоритм, основанный на partial-copy-on-write. И произвольную технику deferred reclamation (GC, RCU, SMP/ROP, DRC, vZOOM). И соединить их воедино. И это будет работать. Т.е. они независимы.
И RCU это фактически понятие того же порядка, что и GC.



1024cores &mdash; all about multithreading, multicore, concurrency, parallelism, lock-free algorithms
Re[8]: Многопоточность сегодня
От: iZEN СССР  
Дата: 11.10.07 19:04
Оценка:
Здравствуйте, alpha21264, Вы писали:

iZEN>>>Вы сами проверяли?

iZEN>>>А я проверял. Двухъядерный процессор рвёт одноядерный на одной и той же частоте (Athlon64 X2 2ГГц vs. AthlonXP 1,8ГГц) в компиляции исходников C/C++ компилятором GCC более чем в 2,5 раза (двадцать пять минут против полутора часов) -- масштабируемость фактически линейная при одинаковой латентности подсистмы памяти и кэша L2).
GZ>>2,5 — не очень то линейно.
GZ>>С GCС не работал. А он действительно компилирует многопоточно, или как VS2005 загружает по проекту на каждый проц?

A>Кха... Юниксовый make много... параллельный короче.

A>Пишешь make -j 2 и он компилирует в два раза быстрее.
A>Даже если в машине ОДИН процессор.
A>А если в машине два процессора, то надо писать make -j 4.
A>Во как.
A>Разгадка простая — пока один экземпляр gcc занимает процессор, второй читает/пишет данные с диска.

Я раньше тоже так думал, но разгадка оказалась не так проста.
На двуядерном процессоре команда make -j4 ровным счётом ничего не дала в плане уменьшения времени компиляции -- времени затратилось ровно столько же (с точностью до 5 минут), как-будто компиляция проводилась в однопоточном режиме на одном ядре.
А вот команда make -j2 действительно увеличила скорость компиляции 2,5 раза.
Re[22]: Многопоточность сегодня
От: Константин Л. Франция  
Дата: 11.10.07 19:59
Оценка:
Здравствуйте, remark, Вы писали:

R>Здравствуйте, Константин Л., Вы писали:



R>>>С использованием std::atomic я показал, как должна была бы выглядеть программа для сферического компьютера в вакууме. Т.е. где должны быть какие типы барьеров.

R>>>Потом я сказал, что те типы барьеров, которые тут должны быть на сферическом компьютере, на x86 не нужны, т.к. всегда присутствуют неявно.
R>>>Т.е., если я пишу под x86, то я ничего не использую.

КЛ>>


КЛ>>Т.е. ты хочешь сказать, что Interlocked _вообще_ никогда не нужен и все само собой синхронизируется?


R>Где я это сказал?!


Начинаем читать отсюда
Автор: сипласплас
Дата: 11.10.07
:

1. Привели пример, когда значение поинтеров меняется из разных тредов без-каких либо Interlocked/atomic. Будем считать что каждый тред сразу должен увидеть эти изменения (актуально для refcounting, не правда-ли?)
2. Ты говоришь —

На x86 да, а почему бы и нет? Это экстремально быстро.

3. Тебе говорят — тут нужен memory barrier.
4. Ты в ответ — "Не нужен, на x86 все и так путем. Они там присутствуют неявно".
5. Тебя спрашивают — "За каким хреном нам тогда вообще Interlocked на x86"
6. Ты — "Где я это сказал"?

Я просто искренне хочу понять, что я упустил


R>[дальнейшие фантазии поскипаны]


R>
Re[23]: Многопоточность сегодня
От: WolfHound  
Дата: 11.10.07 20:07
Оценка: +1
Здравствуйте, Константин Л., Вы писали:

КЛ>1. Привели пример, когда значение поинтеров меняется из разных тредов без-каких либо Interlocked/atomic. Будем считать что каждый тред сразу должен увидеть эти изменения (актуально для refcounting, не правда-ли?)

Не путай запись из регистра в память (это одна атомарная операция) и чтение из памяти в регистр, изменение регистра, запись из регистра в память (это 3 атомарные операции) но вся последовательность не атомарна.
Интерлокеды нужны для того чтобы выполнять подобные последовательности атомарно.
... << RSDN@Home 1.2.0 alpha rev. 745>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[9]: Многопоточность сегодня
От: AVM Россия  
Дата: 11.10.07 20:21
Оценка: +2 :))
Здравствуйте, Стэн, Вы писали:

С>Здравствуйте, AVM, Вы писали:


AVM>>С другой стороны у каждого из нас в голове содержится нехреновый такой вычислительный центр подключенный к обалденным устройствам ввода/вывода

С>А с какой скоростью и с какой точностью сможешь перемножить две матрицы 100x100 действительных чисел в уме?
Это вопрос к Человеку дождя, если ты догадываешься о чем я — Мы не знаем всех возможностей мозга.
Можно задать и встречный вопрос? — с какой скоростью японский робот-пылесос сможет найти (если вообще сможет) грязные носки в углу? Да ладно носки — с какой скоростью он сможет найти угол
Re[9]: Многопоточность сегодня
От: AVM Россия  
Дата: 11.10.07 20:23
Оценка:
Здравствуйте, WolfHound, Вы писали:

WH>Здравствуйте, AVM, Вы писали:


AVM>>Ну а если уж сваливаться на философию, то мое мнение начинает сдвигаться в сторону что развитие современных кремниевых процессоров — тупиковая ветвь. Какая разница 4 или 80 или 8000 ядер. Качественный скачек это не дает, просто порождает кучу проблем и обсуждений на форумах.

AVM>>С другой стороны у каждого из нас в голове содержится нехреновый такой вычислительный центр додключенный к обалденным устройствам ввода/вывода
WH>Вобще говоря эти машинки обладают принципиально разными свойствами и ИМХО то что хорошо делает одна другая будет делать плохо. Обратоное тоже верно.
WH>Те они не будут заменять друг друга. Они будут друг друга дополнять.
Отчасти согласен, но думаю что со временем биомасса вытеснит кремний.
Re[9]: Многопоточность сегодня
От: AVM Россия  
Дата: 11.10.07 20:24
Оценка: +1
Здравствуйте, remark, Вы писали:

R>Здравствуйте, AVM, Вы писали:


AVM>>Ну а если уж сваливаться на философию, то мое мнение начинает сдвигаться в сторону что развитие современных кремниевых процессоров — тупиковая ветвь. Какая разница 4 или 80 или 8000 ядер. Качественный скачек это не дает,


R>А качественного скачка и раньше никогда в истории не было. Было 10МГц, потом 20МГц, потом 50МГц, потом 100МГц, потом 200МГц, потом 500МГц, потом 1ГГц.

R>Просто умножается на 2. И это всех устраивало. И будет устраивать.
Был, переход от механики к электричеству.

R>>>

AVM>>
R>
Re[3]: Многопоточность сегодня
От: RegisteredUser  
Дата: 12.10.07 00:11
Оценка:
Здравствуйте, remark, Вы писали:

R>Скорее всего ты говоришь о какой-то очень ограниченной области применения, либо вообще о HPC.


Нет, я говорю о языках общего назначения. Общеизвестный пример: на К написала большая часть kdb (говорят лидер рынка БД по производительности), набор трейдерских (то бишь зачастую очень real-time-овских) и других околофинансовых приложений (kx.com). Порылся на форумах JSoftware — нет, к сожалению текущая реализация J 601 никак не использует многоядерность, но принципиальных проблем с её использованием нет (ввиду implicit parallelism).
Просто эти языки и платформы предлагают иную (векторную сиречь _параллельную_) парадигму программирования (что не означает кстати, что они подходят лишь для перемножения матриц — обычные повседневные задачи тоже зачастую легко "векторизуются").
Это был всего лишь мой пример существующего решения проблемы означенной в заглавии этой дискуссии. Продолжайте ломать копия о memory barrier-ы и прочие низкоуровневые детали реализации взгромождаемые традиционными постфортрановскими средствами разработки на плечи прикладного программиста
Re[10]: Многопоточность сегодня
От: Sinclair Россия https://github.com/evilguest/
Дата: 12.10.07 04:31
Оценка: +1
Здравствуйте, AVM, Вы писали:
AVM>Отчасти согласен, но думаю что со временем биомасса вытеснит кремний.
Там проблема не в структуре кристалла. Если мы хакнем алгоритмическую базу, то прошить ее можно будет хоть в кремнии, хоть в германии. См.тж. Тезис Черча.
... << RSDN@Home 1.2.0 alpha rev. 677>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[2]: multicore -- напоминает переход на Win32
От: Sinclair Россия https://github.com/evilguest/
Дата: 12.10.07 04:49
Оценка: +1
Здравствуйте, eao197, Вы писали:

E>Что-то разговоры о проблемах программирования в условиях многоядерности напоминают мне шумиху вокруг перехода на Win32. Тогда так же было много шума. Многие выгоды сулили. Мол не будет для ваших данных барьеров в 64K, будут доступны файлы объемом свыше 2Gb и пр.


E>А в итоге -- многих ли этот переход действительно серьезно затронул?

Вообще-то этот переход серъезно затронул практически всех.
Проблема-то не в перекомпиляции приложения. Эти приложения к 2005 году практически вымерли совсем.
Проблема в том, что требования пользователя изменились. На win16 не было принято писать многопоточные приложения. У всех вся работа делалась прямо в цикле выборки сообщений.
... << RSDN@Home 1.2.0 alpha rev. 677>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[10]: Многопоточность сегодня
От: Стэн http://stanonwork.blogspot.com/
Дата: 12.10.07 05:56
Оценка:
Здравствуйте, AVM, Вы писали:

С>>А с какой скоростью и с какой точностью сможешь перемножить две матрицы 100x100 действительных чисел в уме?

AVM>Это вопрос к Человеку дождя, если ты догадываешься о чем я — Мы не знаем всех возможностей мозга.
Зато я читал о парочке случаев, из клинической психологии, когда человек мог запомнить и процетировать дословно несколько десятков страниц книжного текста, но при этом совершенно не мог объяснить о чем текст.
На самом деле мы знаем о возможностях мозга гораздо больше чем думают многие, и известно, что чудес не бывает, просто хочется в это верить...

AVM>Можно задать и встречный вопрос? — с какой скоростью японский робот-пылесос сможет найти (если вообще сможет) грязные носки в углу? Да ладно носки — с какой скоростью он сможет найти угол

Хороший вопрос. Вообщем-то о том и речь, что если задача искать носки, то забудь о перемножении матриц, если матрицы, то стоит забыть о носках...
Возьми какую-нибудь программную реализацию нейросетевого алгоритма. Нейронную сеть на его основе можно научить перемножать два числа, но для этого "умножения" ему придется несколько десятков тысяч внутренних коэффициентов перемножить! Спрашивается: а зачем такие сложности?

Сразу предвижу утверждение, что компьютер одной частью своего "мозга" может быстро искать носки, а другой быстро перемножать матрицы... Компьютер (ИИ), который пользуется компьютером... Вернемся тудаже откуда начали.
Re[11]: Многопоточность сегодня
От: AVM Россия  
Дата: 12.10.07 06:10
Оценка: 14 (2) -2
Здравствуйте, Sinclair, Вы писали:

S>Здравствуйте, AVM, Вы писали:

AVM>>Отчасти согласен, но думаю что со временем биомасса вытеснит кремний.
S>Там проблема не в структуре кристалла. Если мы хакнем алгоритмическую базу, то прошить ее можно будет хоть в кремнии, хоть в германии. См.тж. Тезис Черча.
IMHO хакнуть — это только пол дела, потом его надо заимплементить. Ну хакнул ты алгоритм генерации запаха. Как ты имплементируешь скунса в игрушках на железе которое сделано по сути песка? На кремнии в рантайме химии нет, там голая физика.

Тут задавали вопрос про скорость перемножения матриц. А какая скорость принятия решения у хищной птицы, который в пикировании ловит добычу? И сколько фотодиодов должна иметь каменная оптика, чтобы различить мышь в траве c высоты птичьего полета?

Сейчас бьются над распознаванием образов, используя супер-пупер многоядерные кремниевые процессора и сенсоры запахов, чтобы найти террориста в потоке людей в аэропорту, а обычная собака в толпе за доли секунды определяет субъекта представляющего для нее опасность.

Пишут супер навигационные системы, запускают спутники, создают GPS и ГЛОНАС, чтобы самолеты и корабли не заблудились. А птицы просто летят на зимовку и возвращаются с нее. Гарбуша просто идет на нерест.

Бъемся над распознаванием голоса, наворотили кучу железа и софта, защитили кучу диссертаций и получили вагон премий, а кутенок уже через пол часа уже узнает колос хозяина.

Таких примеров вагон и маленькая тележка. Не верю я что все это можно реализовать из мертвого камня на одной только физике.
Re[11]: Многопоточность сегодня
От: AVM Россия  
Дата: 12.10.07 06:13
Оценка:
Здравствуйте, Стэн, Вы писали:

С>Хороший вопрос. Вообщем-то о том и речь, что если задача искать носки, то забудь о перемножении матриц, если матрицы, то стоит забыть о носках...

Можно еще один хороший вопрос? Зачем нам вообще перемножать матрицы? Может быть только для того, чтобы сделать компьютер умеющий их перемножать?
Re[12]: Многопоточность сегодня
От: Sinclair Россия https://github.com/evilguest/
Дата: 12.10.07 06:45
Оценка:
Здравствуйте, AVM, Вы писали:
С>>Хороший вопрос. Вообщем-то о том и речь, что если задача искать носки, то забудь о перемножении матриц, если матрицы, то стоит забыть о носках...
AVM>Можно еще один хороший вопрос?
Ничего хорошего в этом вопросе нету.
AVM>Зачем нам вообще перемножать матрицы?
AVM>Может быть только для того, чтобы сделать компьютер умеющий их перемножать?
Перемножение матриц имеет невероятно широкий спектр прикладных применений.
... << RSDN@Home 1.2.0 alpha rev. 677>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.