Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Биты, потоки и др.
|
|||
|---|---|---|---|
|
#18+
Допустим, есть код, в котором один поток присваивает переменной случайные чётные значения, а другой - случайные нечётные значения. Верное ли, что если переменная типа int, использовать обёртку atomic необходимости нет, а если float или double, то надо? Почему объекты int сравниваются между собой точно, а float или double уместно сравнивать с учётом допустимой погрешности, ведь в каждом случае достаточно сравнивать соответствующие биты? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2017, 18:59 |
|
||
|
Биты, потоки и др.
|
|||
|---|---|---|---|
|
#18+
IMHO жестокий вопрос, точнее два жестоких вопроса 1) фиолетово, что для int, что для float. double. Т.к. все пытаются только присвоить и никто не пытается ничего прочитать, то, что присваивать четные значения, что нечетные - одно фиолетово. Просто преобразование электронов в температуру воздуха в комнате, где стоит системный блок. При чем тут atomic совершенно не понятно. 2) одинаково фиолетово, если работать с float как с набором битов Код: sql 1. 2. 3. 4. будет работать вне зависимости от того, float или int. А вот математические вычисления, точно работать с плавающей точкой НЕ будут. Код: sql 1. 2. 3. 4. с int работать будет, а с float уже нет ))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2017, 19:45 |
|
||
|
Биты, потоки и др.
|
|||
|---|---|---|---|
|
#18+
Leonid Kudryavtsev1) фиолетово, что для int, что для float. double. Т.к. все пытаются только присвоить и никто не пытается ничего прочитать, то, что присваивать четные значения, что нечетные - одно фиолетово. Просто преобразование электронов в температуру воздуха в комнате, где стоит системный блок. При чем тут atomic совершенно не понятно. Хорошо, не чётные/нечётные, а значения, в последних 5 битах которых стоят единицы для первого потока (остальные биты случайны) и значения, у которых на тех же местах стоят нули для второго потока. Затем потоки прерываются. После завершения работы потоков по присвоению значений одной и той же переменной у int на последних 5 битах будут стоять только нули или только единицы (насколько я понял). У double или float тоже будут на последних 5 битах либо нули, либо только единицы? Про сравнение: по-моему, Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. В тех строках, где неправильно (наверное) сравниваются float и double печать будет происходить не всегда. Или я ошибаюсь? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2017, 20:07 |
|
||
|
Биты, потоки и др.
|
|||
|---|---|---|---|
|
#18+
ayvangoПосле завершения работы потоков по присвоению значений одной и той же переменной у int на последних 5 битах будут стоять только нули или только единицы (насколько я понял). У double или float тоже будут на последних 5 битах либо нули, либо только единицы? И то и то атомарный тип процессора (intel). Почему поведение для int должно отличаться от поведения для float - лично мне совершенно не понятно Насколько такая операция безопасна и документирована - я не знаю, не спец по процессорам и многозадачности в таком сферическом вопросе. Подозреваю, обработка все равно будет идти по cache line, т.ч. что int, что double будет глубоко пофиг. Но подозреваю, точно не знаю. Ссылку на доку дать не готов. ayvangoпечать будет происходить не всегда. Или я ошибаюсь? Я сильно сомневаюсь, что кто-то специально добавлял генератор случайных чисел в команду присваивания ))) Но разумеется, все зависит от разработчиков компилятора, их воображения и чувства юмора ))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2017, 20:20 |
|
||
|
Биты, потоки и др.
|
|||
|---|---|---|---|
|
#18+
ayvango, у тебя какая-то каша в голове. Атомарность это прочитать-изменить-записать. atomic именно это гарантирует для int/float/double и т.д., т.е. между чтением и записью исходное значение не изменилось. Про точность float/double и почему их нельзя сравнивать на == читай гугл. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2017, 20:23 |
|
||
|
Биты, потоки и др.
|
|||
|---|---|---|---|
|
#18+
Т.е., atomic нужен только для того, чтобы учесть изменения, вносимые каждым потоком (когда оба они выполняют, нампример, операцию сложения с константой). А если один поток присваивает переменной случайное значение, большее 100, а другой значение, меньшее 100, то никакие atomic не нужны? Что тогда имеется ввиду в фразе "int - атомарный тип, а double таковым не является" ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2017, 20:38 |
|
||
|
Биты, потоки и др.
|
|||
|---|---|---|---|
|
#18+
ayvangoТ.е., atomic нужен только для того, чтобы учесть изменения, вносимые каждым потоком (когда оба они выполняют, нампример, операцию сложения с константой). А если один поток присваивает переменной случайное значение, большее 100, а другой значение, меньшее 100, то никакие atomic не нужны? Если тебе пофиг что в итоге запишется то не нужны. ayvangoЧто тогда имеется ввиду в фразе "int - атомарный тип, а double таковым не является" ? Откуда эта фраза? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2017, 20:49 |
|
||
|
Биты, потоки и др.
|
|||
|---|---|---|---|
|
#18+
Откуда эта фраза? Наверное, что-то напутал. Думал, что принципиальные различия у int и double имеются. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2017, 20:57 |
|
||
|
Биты, потоки и др.
|
|||
|---|---|---|---|
|
#18+
ayvangoЧто тогда имеется ввиду в фразе "int - атомарный тип, а double таковым не является"? Спроси у её автора. Скорее всего - отсутствие/наличие "thorn read". У Интеля его нет ни для int ни для double (при должном выравнивании). Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2017, 20:59 |
|
||
|
Биты, потоки и др.
|
|||
|---|---|---|---|
|
#18+
ayvangoОткуда эта фраза? Наверное, что-то напутал. Думал, что принципиальные различия у int и double имеются. Все что укладывается в одну команду асма - атомарно. Присвоение значения int/float/double это одна команда, т.е. прерывание потока может произойти или до или после, но не в середине. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2017, 21:14 |
|
||
|
Биты, потоки и др.
|
|||
|---|---|---|---|
|
#18+
Dima TВсе что укладывается в одну команду асма - атомарно. Присвоение значения int/float/double это одна команда, т.е. прерывание потока может произойти или до или после, но не в середине. нездоровый тезис ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2017, 22:10 |
|
||
|
Биты, потоки и др.
|
|||
|---|---|---|---|
|
#18+
Dima TВсе что укладывается в одну команду асма - атомарно. Всё несколько усложняется когда приходит многопроцессорность. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2017, 22:13 |
|
||
|
Биты, потоки и др.
|
|||
|---|---|---|---|
|
#18+
ayvango, float, это 4 байта, double - 8 байт. Для процессора Intel совершенно фиолетово, какими типами данных оперирует компилятор C++ и он с одинаковым успехом командой "lock xchg" запишет хоть long, хоть float по указанному адресу памяти. Если не знаком с inline-ассемблером, ничто не мешает использовать WINAPI Interlocked функции, к примеру: Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2017, 22:21 |
|
||
|
Биты, потоки и др.
|
|||
|---|---|---|---|
|
#18+
Dima TВсе что укладывается в одну команду асма - атомарно.Нет, не атомарно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2017, 23:15 |
|
||
|
Биты, потоки и др.
|
|||
|---|---|---|---|
|
#18+
Я думаю что среди нормальных овец найдется одна паршивая. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2017, 23:32 |
|
||
|
Биты, потоки и др.
|
|||
|---|---|---|---|
|
#18+
ИзопропилDima TВсе что укладывается в одну команду асма - атомарно. Присвоение значения int/float/double это одна команда, т.е. прерывание потока может произойти или до или после, но не в середине. нездоровый тезис Я к тому что в результате одновременного вызова из нескольких потоков Код: plaintext 1. в x всегда будет значение записанное одним из потоков, а не комбинация из части байтов от одного потока и части от второго. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.06.2017, 09:17 |
|
||
|
Биты, потоки и др.
|
|||
|---|---|---|---|
|
#18+
Dima T, про выравнивание забываешь, из-за него и может ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.06.2017, 09:36 |
|
||
|
Биты, потоки и др.
|
|||
|---|---|---|---|
|
#18+
Dima TЯ к тому что в результате одновременного вызова из нескольких потоков Код: plaintext 1. в x всегда будет значение записанное одним из потоков, а не комбинация из части байтов от одного потока и части от второго.Нет! Там всегда будет то значение, которое каким-либо образом попало в кэш обратной (отложенной) записи ядра процессора. В данном случае, там будет значение, записанное ядром в свой собственный кэш. В реальности всё гораздо сложнее - система кэширования процессора оперирует блоками отображения на память. Величина блока - величина не константная и зависит от модели процессора. На время выполнении операции чтения/записи с памятью, системная шина блокируется и данные из кэша ядра синхронизируется с памятью, что обеспечивает атомарность переноса данных из кэша в память и обратно. MFENCE and LFENCE Micro-Architectural Implementation Method and System ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.06.2017, 10:12 |
|
||
|
Биты, потоки и др.
|
|||
|---|---|---|---|
|
#18+
ayvangoПочему объекты int сравниваются между собой точно, а float или double уместно сравнивать с учётом допустимой погрешности, ведь в каждом случае достаточно сравнивать соответствующие биты? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.06.2017, 11:28 |
|
||
|
Биты, потоки и др.
|
|||
|---|---|---|---|
|
#18+
в огороде бузина, а в Киеве - дядька... ты хотя бы определился бы, о каком языке программирования речь... ayvangoДопустим, есть код, в котором один поток присваивает переменной случайные чётные значения, а другой - случайные нечётные значения. Верное ли, что если переменная типа int, использовать обёртку atomic необходимости нет, а если float или double, то надо? скорей всего, , неверно. ayvangoПочему объекты int сравниваются между собой точно, а float или double уместно сравнивать с учётом допустимой погрешности, ведь в каждом случае достаточно сравнивать соответствующие биты? это совсем другая история. int точный тип данных, а float , double - неточные, их в принципе сравнивать бессмысленно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.06.2017, 23:13 |
|
||
|
Биты, потоки и др.
|
|||
|---|---|---|---|
|
#18+
MasterZivayvango....ведь в каждом случае достаточно сравнивать соответствующие биты? это совсем другая история. int точный тип данных, а float , double - неточные, их в принципе сравнивать бессмысленно. не очень понятно, о чем же спрашивает автор и откуда он взял эту информацию если о хранение данных, то что int, что float/double одинаковые последовательности битиков и никто не мешает их сравнивать если о вычислениях, то тогда float/double точно сравнивать обычно бессмысленно Видел одну систему, где Primary Key в БД был float. Наверное, в случае Primary Key, сравнивать "с учетом допустимой погрешности" как-то странно. Другое дело, что я хотел бы видеть того архитектора и анал итика который Primary Key сделал float'ом и зачем он это сделал так. Даже на hibernate головного мозга это не списать. Там какое-то другое заболевание. Система была на Delphi написана. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.06.2017, 07:37 |
|
||
|
Биты, потоки и др.
|
|||
|---|---|---|---|
|
#18+
если о вычислениях, то тогда float/double точно сравнивать обычно бессмысленно Именно это я и спрашивал: почему бессмысленно. Чтобы не плодить темы о потоках: отличается ли чем-то принципиально многопоточное программирование от многопроцессного, кроме разных механизмов синхронизации? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.06.2017, 01:24 |
|
||
|
Биты, потоки и др.
|
|||
|---|---|---|---|
|
#18+
ayvangoЧтобы не плодить темы о потоках: отличается ли чем-то принципиально многопоточное программирование от многопроцессного, кроме разных механизмов синхронизации? Отличаются. Каждый процесс имеет свое адресное пространство, поэтому указатель между процессами не передать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.06.2017, 07:37 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=39475922&tid=2018142]: |
0ms |
get settings: |
8ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
165ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
57ms |
get tp. blocked users: |
1ms |
| others: | 11ms |
| total: | 273ms |

| 0 / 0 |
