|
|
|
Теоретизирование: может ли быть data race при переходе потока с одного ядра на другое?
|
|||
|---|---|---|---|
|
#18+
Чисто теоретический вопрос. Допустим, есть у нас поток, который выполняется на core0. И в какой-то момент он берет и изменяет переменную A с 0 на 1, да так, что это изменение уходит в L1 кэш этого ядра, но не уходит в память. Потом этот поток вытесняется scheduler-ом, и в следующий раз получает квант времени уже на другом ядре core1, которое ничего про изменение A с 0 на 1 не знает. Вопрос: не увидит ли в этом случае поток устаревшее значение? Я на 100% уверен, что нет, ибо в этом случае мы бы тупо не могли ничего запрограммировать Но какие механизмы за этим стоят? Куда и в каком виде сохраняется состояние потока при context switch? Посоветуйте литературу на эту тему для современных платформ и операционок. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2013, 20:26:42 |
|
||
|
Теоретизирование: может ли быть data race при переходе потока с одного ядра на другое?
|
|||
|---|---|---|---|
|
#18+
Чет ты форумом наглухо ошибся. На сколько я понимаю, при переключении контекста кеши обязаны синхронизироваться с памятью. Читать, по-моему нужно мануалы по архитектуре конкретных процессоров. Сейчас не вспомню, но когда-то давали ссылу на хороший мануал именно от Intel. Поищу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2013, 20:31:26 |
|
||
|
Теоретизирование: может ли быть data race при переходе потока с одного ядра на другое?
|
|||
|---|---|---|---|
|
#18+
Да, согласен, уже не тот подфорум Что-то я настолько углубился в проблемы многопоточности, что даже не заметил, что от Java в моих вопросах почти ничего не осталось. Есть нехорошее подозрение, что такими темпами скоро придется начать писать на С/C++. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2013, 20:57:38 |
|
||
|
Теоретизирование: может ли быть data race при переходе потока с одного ядра на другое?
|
|||
|---|---|---|---|
|
#18+
Для Java достаточно оперировать Java Memory Model. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2013, 20:59:00 |
|
||
|
Теоретизирование: может ли быть data race при переходе потока с одного ядра на другое?
|
|||
|---|---|---|---|
|
#18+
BlazkowiczДля Java достаточно оперировать Java Memory Model.Вот не соглашусь. Любая абстракция всегда накладывает определенные ограничения. Вопрос лишь в том, как скоро ты в эти ограничения упрешься. В этом плане JMM сделана на очень высоком уровне, так как упереться в ее ограничения еще надо постараться. Тем не менее, такое случается. Мы в конторе, например, уже страдали от false sharing и отсутствия thread affinity. И если посмотреть на последние творения Doug Lee, то там так же прослеживаются различные хаки вроде паддинга в ForkJoinPool или недокументированного хака с Unsafe в StampedLock. Но 99,5% потребностей Java-программиста JMM закрывает, за что огромное спасибо ее разработчикам и идеологам. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2013, 21:15:39 |
|
||
|
Теоретизирование: может ли быть data race при переходе потока с одного ядра на другое?
|
|||
|---|---|---|---|
|
#18+
BlazkowiczНа сколько я понимаю, при переключении контекста кеши обязаны синхронизироваться с памятью. Вроде как не обязаны, но зависит от процессора и оси, вы правы. А вот при threads migration они по-любому будут сбрасываться, пруф правда найти не смог. Хотя кое-что интересное нарыл. http://mechanical-sympathy.blogspot.com/2013/02/cpu-cache-flushing-fallacy.html(в самом конце о конекст свитчах и L1). http://cs.stackexchange.com/questions/1088/what-happens-to-the-cache-contents-on-a-context-switch(а тут и манулаы к процессорам есть) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2013, 21:54:37 |
|
||
|
Теоретизирование: может ли быть data race при переходе потока с одного ядра на другое?
|
|||
|---|---|---|---|
|
#18+
Такого не может быть хотя бы потому, что это нарушает согласованность кэшей процессоров и памяти. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2013, 09:48:55 |
|
||
|
Теоретизирование: может ли быть data race при переходе потока с одного ядра на другое?
|
|||
|---|---|---|---|
|
#18+
schwaТакого не может быть хотя бы потому, что это нарушает согласованность кэшей процессоров и памяти. Вопрос не в том может или не может. Вопрос в том, где про это читать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2013, 10:00:18 |
|
||
|
Теоретизирование: может ли быть data race при переходе потока с одного ядра на другое?
|
|||
|---|---|---|---|
|
#18+
забыл ник http://cs.stackexchange.com/questions/1088/what-happens-to-the-cache-contents-on-a-context-switch(а тут и манулаы к процессорам есть) Да, там внутри ссылки на мануалы по CPU, я их и имел ввиду. Там должно быть задокументировано поведение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2013, 10:00:54 |
|
||
|
Теоретизирование: может ли быть data race при переходе потока с одного ядра на другое?
|
|||
|---|---|---|---|
|
#18+
BlazkowiczschwaТакого не может быть хотя бы потому, что это нарушает согласованность кэшей процессоров и памяти. Вопрос не в том может или не может. Вопрос в том, где про это читать. Ввиду того, что этот вопрос покрывает огромное число сфер (от работы железок и как там выполняются инструкции до работы операционных систем, со всеми переключениями их юзер мода в кернел), то литературы, которая покрывает все от и до, но при этом не переходит на "вы это уже знаете" или "мы это обсуждать не будем, а примите это как мы тут написали", не существует (но если она есть, то там будет несколько тысяч страниц, но такой не встречал). По железкам можно начать с что-нибудь вроде этого http://www.amazon.com/Computer-Architecture-Fifth-Edition-Quantitative/dp/012383872X Дальше что-то будь по операционным системам. Наверное некоторые юниксы должны быть прилично покрыты в литературе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2013, 10:32:30 |
|
||
|
Теоретизирование: может ли быть data race при переходе потока с одного ядра на другое?
|
|||
|---|---|---|---|
|
#18+
Blazkowiczзабыл ник http://cs.stackexchange.com/questions/1088/what-happens-to-the-cache-contents-on-a-context-switch(а тут и манулаы к процессорам есть) Да, там внутри ссылки на мануалы по CPU, я их и имел ввиду. Там должно быть задокументировано поведение. Только стоит учесть, что все усложняется тем, что скедулер может использовать только малую часть этих вещей, а остальное реализовывать на уровне операционной системы (и некоторые так и делают). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2013, 10:39:33 |
|
||
|
Теоретизирование: может ли быть data race при переходе потока с одного ядра на другое?
|
|||
|---|---|---|---|
|
#18+
"Вытесняется в кэш, но не вытесняется в память" без уточнения уровня и типа кэша - это пять. Cache snooping, вроде, никто не отменял. Тем более - на многоядерных процессорах. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2013, 17:50:39 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=38420876&tid=2128456]: |
0ms |
get settings: |
8ms |
get forum list: |
19ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
52ms |
get topic data: |
7ms |
get forum data: |
1ms |
get page messages: |
28ms |
get tp. blocked users: |
1ms |
| others: | 220ms |
| total: | 342ms |

| 0 / 0 |
