powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Reordering
25 сообщений из 83, страница 3 из 4
Reordering
    #38528098
cdtyjv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
0FD ,
Я ничего не ожидаю, я лишь демонстрирую, как разные способы чтения влияют на то, завершится программа или нет.
...
Рейтинг: 0 / 0
Reordering
    #38528579
Фотография schwa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cdtyjvschwaИ если это был самый последний код, которые выполняется при завершении программы, то она бы не остановилась. А вот если он был бы расположен где-то в глубине, когда дальше будут идти запаси и обращения к "общим" локациям памяти, то все бы сработало как надо.Вы почитайте мой пост выше с анализом причин этого, и поймете, что данный код ломается независимо от "глубины".
Только вот с тем, что это код будет ломаться никто и не спорил ;)
cdtyjvГугл такого не знает.
Невезение с гуглом. Мне он выдает цитаты из соответствующих мануалов в первых же результатах поиска.
...
Рейтинг: 0 / 0
Reordering
    #38528599
cdtyjv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
schwaТолько вот с тем, что это код будет ломаться никто и не спорил ;)Ну вы же сказали, что при обращении к "общим" локациям памяти все будет нормально. Как видно из кода, не будет.

schwaНевезение с гуглом. Мне он выдает цитаты из соответствующих мануалов в первых же результатах поиска.Поделитесь ссылочкой.
...
Рейтинг: 0 / 0
Reordering
    #38528789
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123ну дак, они взаимодействуют по контрактуЭтот контракт реализует вполне конкретный человек.
Который может понавтыкать в своём коде всяческих чудес, которые прекрасно пройдут все юнит-тесты и начнут глючить, когда встанут под промышленную нагрузку. Не всегда, а так ... Время от времени, но всегда не ко времени.
...
Рейтинг: 0 / 0
Reordering
    #38529030
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. SidorovPetro123ну дак, они взаимодействуют по контрактуЭтот контракт реализует вполне конкретный человек.
Который может понавтыкать в своём коде всяческих чудес, которые прекрасно пройдут все юнит-тесты и начнут глючить, когда встанут под промышленную нагрузку. Не всегда, а так ... Время от времени, но всегда не ко времени.
Тут 2 момента:
- библиотеки...IDE...ЯП должен помогать программисту не писать Г.
Так, например, в Delphi для потока, нужно отнаследоваться от класса Поток.
- сам программист конечно тоже выполняет контракт. И не запускает поток, пока все данные для него не готовы.
А если уж припёрло на всём ходу использовать глобальную переменную, то ставь критическую секцию
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Section:=TCriticalSection.Create;

procedure IncElem;
var i: byte;
begin
  Section.Enter;
  for i:=1 to 100 do
     Inc(mas[i]);
  Section.Leave;
end;


...
А в одном потоке все инструкции должны идти ожидаемо, и так как написано).
IMHO
...
Рейтинг: 0 / 0
Reordering
    #38529106
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Тут 2 момента:
- библиотеки...IDE...ЯП должен помогать программисту не писать Г."Охренеть! Дайте две!"
Так, например, в Delphi для потока, нужно отнаследоваться от класса ПотокВ Java, что характерно - тоже. Ну или интерфейс реализовать соответствующий.сам программист конечно тоже выполняет контрактЕсть такой термин - "функциональная неграмотность". Это когда человек может читать, но не может понимать прочитанное.
Толку с вашего "тоже выполняет", если конкретный программист ни уха ни рыла в конкурентном программировании?
Он или засинхронизируется насмерть и будет работать в один поток или сделает глюкающий код.
...
Рейтинг: 0 / 0
Reordering
    #38529275
rfq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
zig zucdtyjv,

а вот в тот момент, когда процессор начал заниматься предсказаниями и выполнил одно из них "присваивает reslitReady = true", это вот предсказанное значение уже может увидеть второй поток?
Нет, не может. Все сделано так, что для программиста нет разницы, делал процессор спекулятивное выполнение или нет - разве что общее время получается разным.
...
Рейтинг: 0 / 0
Reordering
    #38529312
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. Sidorov,
1. Именно библиотеки или компилятор)).
Например, для установки глобального хука в Вин32 (перехват клавиатуры), передавая функцию класса - у вас код просто не скомпилится. Можно передать только неклассовую (в Delphi).
Ну и т.д....много есть примеров помощи))
2. Если он неграмотен - нефиг потоки писать. Они нужны не так много мест.
Загрузил хотя бы одним потоком все ядра)).
Пусть пишет прикладной код...или сервлеты. Там потоки снаружи и не видны...контейнер помогает.
Удачи!
...
Рейтинг: 0 / 0
Reordering
    #38529317
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rfqВсе сделано так, что для программиста нет разницы, делал процессор спекулятивное выполнение или нет
я тоже за это imho)
...
Рейтинг: 0 / 0
Reordering
    #38529322
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Загрузил хотя бы одним потоком все ядра)).

:)
...
Рейтинг: 0 / 0
Reordering
    #38529359
cdtyjv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rfqНет, не может. Все сделано так, что для программиста нет разницы, делал процессор спекулятивное выполнение или нет - разве что общее время получается разным.Ну вот кто вам такое сказал? Даже если процессор спекулятивно пошел по ошибочному бранчу, и начал что-то писать, это вовсе не значит, что sequential consistency сломается в потоке, в котором эта спекуляция произошла. Тем не менее, большинство (если не все) распространенных процессоров так не делают. Не потому, что это невозможно в принципе, а потому что просто инженеры решили пойти другим путем. Вот, что написано в одной из диссертаций ( http://www3.ece.neu.edu/~yilmazer/thesis/thesis.pdf) на эту тему:
AYSE YILMAZERTo maintain the illusion of sequential consistency, a store instruction cannot write its value to memory until it becomes the oldest (i.e., non-speculative) instruction in the processor.То есть да, пока мы не узнаем гарантированно, что данный бранч не является спекулятивным, мы не будем писать это в память. А следовательно, другие потоки не увидят спекуляцию. НО! Далее идет следующее замечание:
AYSE YILMAZERIn this study, we did not consider the multiprocessors based on uniprocessors that may speculatively execute store instructions, such as the speculative versioning cache of Multiscalar [22], or Levo [24].О как оно оказывается. Есть процессоры, которые могут спекулятивно писать в память. И если вы сейчас сидите на каком-нибудь Интеле, который это не делает, это не означает, что следующее поколение их же процессоров этого делать не будет.

В десятый раз поторюсь: рассуждать на тему того, что именно может делать какой-то абстрактный процессор в вакууме, это все от лукавого.
...
Рейтинг: 0 / 0
Reordering
    #38529528
rfq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cdtyjv И если вы сейчас сидите на каком-нибудь Интеле, который это не делает, это не означает, что следующее поколение их же процессоров этого делать не будет.


Интересно, не знал о Мultiscalar и Levo.
Тем не менее, речь-то идет о Java, и даже если она будет портирована на подобные экзотические процессоры, я думаю, что спекулятивная запись в память будет зарублена. Во всяком случае, я сомневаюсь, что такая запись в память допускается спецификацией JVM.
...
Рейтинг: 0 / 0
Reordering
    #38529619
Фотография schwa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Reordering
    #38529671
Фотография schwa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cdtyjvAYSE YILMAZERIn this study, we did not consider the multiprocessors based on uniprocessors that may speculatively execute store instructions, such as the speculative versioning cache of Multiscalar [22], or Levo [24].О как оно оказывается. Есть процессоры, которые могут спекулятивно писать в память. И если вы сейчас сидите на каком-нибудь Интеле, который это не делает, это не означает, что следующее поколение их же процессоров этого делать не будет.
А точно программа это поведение сможет обозреть, если вместе с введением этих оптимизаций идут правки в протоколы конгерентности кэшей и др. ? Просто в противном случае подобная оптимизация может сломать даже корректную программу.
...
Рейтинг: 0 / 0
Reordering
    #38529692
cdtyjv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rfqТем не менее, речь-то идет о Java, и даже если она будет портирована на подобные экзотические процессоры, я думаю, что спекулятивная запись в память будет зарублена. Во всяком случае, я сомневаюсь, что такая запись в память допускается спецификацией JVM.Спецификация JVM не оперирует такими понятиями, как "спекулятивная запись" в принципе. JVM для корректной работы нужно две вещи:
1) Sequential consistency по умолчанию для одного потока - что бы работали однопоточные программы;
2) Sequential consistency _по_требованию_ для нескольких потоков - что бы работали многопоточные программы.

Что здесь интересно? Если будет отсутствовать п.1, то у вас не будет работать не только JVM, но и все остальные современные приложения. Ибо без sequential consistency запрограммировать что-либо можно только в теории, но не практике.

А если будет отсутствовать п.2, то у вас не будет работать не только JVM с несколькими потоками, но и все остальные современные приложения. Ибо что из себя представляют понятия, из того же JSR133 Cookbook? Всякие там StoreLoad и иже с ними? Это просто логичесике обертки над какими-то физическими инструкциями процессора и правилами компилятора. Не более того. Если для этих логических оберток нет конкретных решений на конкретной платформе, значит она не предназначена для многопоточной работы в принципе.
...
Рейтинг: 0 / 0
Reordering
    #38529707
cdtyjv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
schwaА точно программа это поведение сможет обозреть, если вместе с введением этих оптимизаций идут правки в протоколы конгерентности кэшей и др. ? Просто в противном случае подобная оптимизация может сломать даже корректную программу.Вопрос лишен смысла. Я могу с таким же успехом спросить: "А точно ли текущая модель работы с памятью x86 работает правильно?" Теоретически, она может работать правильно. Работает ли она правильно по факту - не знаю.
Так же и со спекулятивными записями. Может ли такой подход работать теоретически? Да, может. Работает ли он корректно в конкретном экземпляре Multiscaler/Levo? Не знаю.
...
Рейтинг: 0 / 0
Reordering
    #38529924
Фотография schwa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cdtyjvschwaА точно программа это поведение сможет обозреть, если вместе с введением этих оптимизаций идут правки в протоколы конгерентности кэшей и др. ? Просто в противном случае подобная оптимизация может сломать даже корректную программу.Вопрос лишен смысла. Я могу с таким же успехом спросить: "А точно ли текущая модель работы с памятью x86 работает правильно?" Теоретически, она может работать правильно. Работает ли она правильно по факту - не знаю.
Так же и со спекулятивными записями. Может ли такой подход работать теоретически? Да, может. Работает ли он корректно в конкретном экземпляре Multiscaler/Levo? Не знаю.
Этот вопрос лишен смысла только для тех, кто не видит разницы между вычитываем старого значения и выполнением участков кода, которые выполнится никак не могли вообще ибо они используют значение, которые никакими операциями, которые выполнялись в программе получено не было.
...
Рейтинг: 0 / 0
Reordering
    #38529932
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
О чем спор, а то я запутался?
...
Рейтинг: 0 / 0
Reordering
    #38529939
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
забыл никО чем спор, а то я запутался?
О том что реордеринг можно наблюдать далеко не на всех архитектурах.
...
Рейтинг: 0 / 0
Reordering
    #38529962
cdtyjv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
schwaЭтот вопрос лишен смысла только для тех, кто не видит разницы между вычитываем старого значения и выполнением участков кода, которые выполнится никак не могли вообще ибо они используют значение, которые никакими операциями, которые выполнялись в программе получено не было.Ничего не понял, сформулируйте свой вопрос еще раз.
Вот мы спекулятивно предположили, что значение calc() вернет true, и пошли в соответствующий бранч. В этом бранче вы выполняем какие-то операции. Потом мы узнали, что calc() на самом деле вернул false. Окей, мы берем и откатываем те изменения, которые успели нагородить, и заново выполняем код с того момента, когда мы сделали ошибочное предположение.
Это не какие-то мои додумки, так работают все современные процессоры, почитайте любой мануал, ключевое слово - "speculative branch prediction".

НО! Современные процессоры не допускают спекулятивные записи в кэш. Они спекулятивно меняют значения только в рамках регистров процессора. А те архитектуры, что я указал выше, могут записать спекулятивное значение и в свой кэш, и даже в кэш другого ядра. И это будет работать до тех пора, пока данные изменения можно откатить. А откатить их можно.

И с точки зрения sequential consistency в рамках одного потока, абсолютно пофиг, где сейчас находятся спекулятивные (то есть потенциально некорректные) значения - в регистрах, в кэшах, или где-либо еще. Потому я и не могу понять, что вы хотите донести.

P.S.: Я надеюсь, что все понимают, что когда я говорю "начал спекулятивно выполнять бранч" != "начал спекулятивно выполнять все инструкции в этом бранче". Спекулятивно можно выполнять только то, что можно откатить. Поэтому, например, никто не будет спекулятивно джампить System.out.println(), так как в случае ошибки мы это не сможем откатить. Спекулятивно выполняются только те инструкции, ущерб от которых конкретный процессор сможет компенсировать.
...
Рейтинг: 0 / 0
Reordering
    #38529976
0FD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cdtyjvСпекулятивно можно выполнять только то, что можно откатить.
Да там наверное десяток машинных инструкций можно откатить, а Вы размахнулись.
...
Рейтинг: 0 / 0
Reordering
    #38530064
Фотография schwa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cdtyjv,

Результата работы этих спекулятивных лоудов и сторов никакая программа обозреть не сможет. И как в случае с обычным спекулятивным выполнением также никому ничего не будет видно*.

* - Разве что кто-то может обозреть увеличение сумм в счетах за электричество, но эти люди уже не разработчики программ.
...
Рейтинг: 0 / 0
Reordering
    #38530111
rfq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cdtyjvВ десятый раз поторюсь: рассуждать на тему того, что именно может делать какой-то абстрактный процессор в вакууме, это все от лукавого.
Мы здесь рассуждаем не об абстрактном процессоре в вакууме, а о JVM. Любая реализация JVM на каком угодно процессоре должна вести себя одинаково. Раз интерпретатор, сделанный по букве спецификации, никогда не записывает мусорные значения в память, которые могут быть замечены другим потоком, то и все остальные реализации не должны этого делать.
...
Рейтинг: 0 / 0
Reordering
    #38530147
cdtyjv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rfqЛюбая реализация JVM на каком угодно процессоре должна вести себя одинаково.Кто вам это сказал? Где это написано в спецификации? Они должны вести себя одинаково в рамках JMM. А JMM ничего не говорит ни о реордерингах, ни о кэшах, ни о чем-либо подобном. Она лишь дает набор правил, которым должна следовать JVM. И одно из этих правил, например, гласит: volailte чтение, следующее после volatile записи, гарантированно увидит результат этой записи. То есть, вам дают гарантию, что вы увидите что-то определенное, после того, как предпримете определенные шаги (в данном случае - обеспечите волатильное чтение, которое гарантированно идет после волатильной записи).


rfqРаз интерпретатор, сделанный по букве спецификации, никогда не записывает мусорные значения в память, которые могут быть замечены другим потоком, то и все остальные реализации не должны этого делать.Это что еще за глупость? Покажите мне, где в спецификации написано, что "интерпретатор не записывает мусорные значения в память". Можете сслыку на это привести? Думаю нет, так как это плод вашей фантазии, который к реальности отношения не имеет.
JMM говорит нам: если один поток записал что-то в переменную, то мы не можем ничего сказать, что увидит другой поток. В спецификации не сказано "вы увидите актуальное значение". В ней не сказано "вы увидите старое значение". В ней сказано: " мы не знаем, что вы там увидите ". Может быть старое значение, может быть новое значение, может быть это будет мусорный результат спекуляции, может это будет мусорный результат неатомарной записи long/double значения, да что угодно это может быть. Мы не даем никаких гарантий. Хотите быть в чем-то уверенными? Тогда вот вам synchronized-with, вот вам исключение в лице final - в этих случаях у вас будут гарантии, что вы увидите ровно то, что должны увидеть.

Еще раз, что бы уж точно усвоилось: выбор идет не между "старым" и "актуальным", а между "актуальным" и "не актуальным". А что такое "не актуальное" спецификация не говорит .
...
Рейтинг: 0 / 0
Reordering
    #38530152
rfq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cdtyjvВ ней сказано: " мы не знаем, что вы там увидите ". Может быть старое значение, может быть новое значение, может быть это будет мусорный результат спекуляции, может это будет мусорный результат неатомарной записи long/double значения, да что угодно это может быть.
В каком месте это сказано?
...
Рейтинг: 0 / 0
25 сообщений из 83, страница 3 из 4
Форумы / Java [игнор отключен] [закрыт для гостей] / Reordering
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]