Перейти к публикации
  • Сейчас на странице   Всего пользователей: 0   (0 пользователей, 0 гостей)

Rooster

Программирование[11]

var  

303 пользователя проголосовало

У вас нет прав на голосование в этом опросе, или на просмотр результатов опроса. Пожалуйста, войдите или зарегистрируйтесь для голосования в опросе.

Рекомендованные сообщения

  Kant написал 12.06.2024 в 18:41:

ну ахуеть ты что вспомнил

 

Вроде есть десятка винда 32битная.

  Kant написал 12.06.2024 в 18:41:

еще скажи что 8битные процессоры не могут 64битные числа в регистры запихнуть в виду их отсутствия

 

Ну прикинь а вот жава искаропки на 32битах позволяет с 1995 работать с 64битными примитивами.

(пусть и жертвой атомарности)

Поделиться сообщением


Ссылка на сообщение
  Just.Doit написал 12.06.2024 в 09:13:

 

  Vova написал 12.06.2024 в 01:39:

оу май

в какой момент мы начали ограничивать платформы?

я например говорил про общий вид, с учетом всех платформ а не только избранных

 

Да тот код никто не воспроизвел ни на одной платформе.

 

Я просто для уверенности говорю что на почти всех платформах он не воспроизведется. На самом деле скорей всего он нигде и никогда не воспроизведется даже на PowerPC.


towBCf6.pngimage.png.6f88ac9ad688355eb803ba0b32e309ca.pngimage.png.c05354238865437022b3e4a97a835dbd.pngimage.png.0e8329f2b07e208ae8ef4e3f6878d126.png

 

 

 

Поделиться сообщением


Ссылка на сообщение
  Index написал 12.06.2024 в 18:45:
  Kant написал 12.06.2024 в 18:41:

Вроде есть десятка винда 32битная.

  Kant написал 12.06.2024 в 18:41:

 

Ну прикинь а вот жава искаропки на 32битах позволяет с 1995 работать с 64битными примитивами.

(пусть и жертвой атомарности)

а ты найди для начала 32 битный процессор сейчас дома у кого-нибудь

 

смысл не в этом, всем похуй в обсуждении на случай, если у тебя разрядность неправильная, это лично твои проблемы в этом случае

 


Торжество разума в том, чтобы уживаться с теми, у кого этого разума нет. Вольтер.
Чтобы хорошо высыпаться, нужно спать 8 часов в день. И еще столько же ночью.

Поделиться сообщением


Ссылка на сообщение
  Kant написал 12.06.2024 в 19:03:

а ты найди для начала 32 битный процессор сейчас дома у кого-нибудь

 

Ничто не мешает поставить 32битную ОС на 64битный процессор.

Windows 10, the last Windows operating system to support 32-bit operation, will reach End of Life in October 2025.

 

Поделиться сообщением


Ссылка на сообщение
  scarppy написал 12.06.2024 в 18:35:

вы хоть знаете чем спан от дива отличается

умники блять

Дива (мифология)

Большого роста, сильны, глупы, изображаются с небольшими рожками. В сказках описываются случаи похищения ими женщин с целью сожительства. Обычно считается,...

Поделиться сообщением


Ссылка на сообщение
  Grohuf написал 12.06.2024 в 00:33:
  Kant написал 11.06.2024 в 21:32:

Не помогай вове!

 

Я тут причем? @Kant тебе ответил долбаебу что это функция нужна уже потому что она делает ДВА ДЕЙСТВИЯ даун

 

Даже если ты всунешь по барьеру в кажду строчку кода ДВА ДЕЙСТВИЯ не стан вдруг атомарными:

 

int exchange(std::atomic<int>& var, int new_value)
{
    std::atomic_thread_fence(std::memory_order_seq_cst);
    int old_value = var.load();
    std::atomic_thread_fence(std::memory_order_seq_cst);
    var.store(new_value);
    std::atomic_thread_fence(std::memory_order_seq_cst);
    return old_value;
}

 

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

sp4rk понравилось это

towBCf6.pngimage.png.6f88ac9ad688355eb803ba0b32e309ca.pngimage.png.c05354238865437022b3e4a97a835dbd.pngimage.png.0e8329f2b07e208ae8ef4e3f6878d126.png

 

 

 

Поделиться сообщением


Ссылка на сообщение
(изменено)
  Vova написал 12.06.2024 в 19:51:

Даже если ты всунешь по барьеру в кажду строчку кода ДВА ДЕЙСТВИЯ не стан вдруг атомарными:

никто даже не заикнулся про атомарность

речь про последовательность событий и их возможные порядки с точки зрения наблюдателя (того кто их читает)

мемори ордер это про ордер, а не про атомарность


Изменено пользователем Just.Doit

 

очень крутые котейки


Кому-то пизды дал - нужно сделать скрин обязательно. (с) Solo

Поделиться сообщением


Ссылка на сообщение
  Index написал 12.06.2024 в 19:11:
  Kant написал 12.06.2024 в 19:03:

Ничто не мешает поставить 32битную ОС на 64битный процессор.

Windows 10, the last Windows operating system to support 32-bit operation, will reach End of Life in October 2025.

 

ничто не мешает мне и дос на свой комп поставить, на обсуждении это никак не скажется


Торжество разума в том, чтобы уживаться с теми, у кого этого разума нет. Вольтер.
Чтобы хорошо высыпаться, нужно спать 8 часов в день. И еще столько же ночью.

Поделиться сообщением


Ссылка на сообщение
(изменено)
  Just.Doit написал 12.06.2024 в 20:01:
  Vova написал 12.06.2024 в 19:51:

никто даже не заикнулся про атомарность

речь про последовательность событий и их возможные порядки с точки зрения наблюдателя (того кто их читает)

мемори ордер это про ордер, а не про атомарность

 

 

Я это и говорю - речь была про последовательность событий.

 

@Grohuf дал ссылку на read-modify-write функцию и спрашивает зачем она нужна если запись int атомарная (я не утверждал что запись int атомарная ВСЕГДА это @Grohuf сам придумал снова).

 

НУ КАК БЫ ДАЖЕ С ЛИНЕЙНОЙ ПОСЛЕДОВАТЕЛЬНОСТЬЮ СОБЫТИЙ И АТОМАРНОЙ ЗАПИСЬЮ read-modify-write НЕ СТАНОВЯТСЯ АТОМАРНЫМИ

 

Пруф того что по логики долбаеба из атомарности записи int должна следовать атомарность read-modify-write:

 

  Grohuf написал 11.06.2024 в 11:49:

Смотри что нашел!

https://learn.microsoft.com/en-us/windows/win32/api/winnt/nf-winnt-interlockedexchange

Совсем ебанулись, да? Они че, не знают, что 32 битные значения на 32 битных компьютерах записываются АТОМАРНО! Они для этого функцию сделали, хотя уже 386 были 32 битным. Ахахаха, всегда знал, что Билл Гейтс - шизик.

 

@Grohuf в следующий раз тащи сразу функцию на 100 строчек обложенную мьютексами и спрашивай зачем ее сделали


Изменено пользователем Vova

towBCf6.pngimage.png.6f88ac9ad688355eb803ba0b32e309ca.pngimage.png.c05354238865437022b3e4a97a835dbd.pngimage.png.0e8329f2b07e208ae8ef4e3f6878d126.png

 

 

 

Поделиться сообщением


Ссылка на сообщение

 грохув пздц душит конечно, я думаю его резюме больше одной страницы, да ещё и не с ХХ форм сгенерировано

scarppy понравилось это

:kaifstelish:

Поделиться сообщением


Ссылка на сообщение
(изменено)
  Vova написал 12.06.2024 в 21:25:

Я это и говорю - речь была про последовательность событий.

 

@Grohuf дал ссылку на read-modify-write функцию и спрашивает зачем она нужна если запись int атомарная (я не утверждал что запись int атомарная ВСЕГДА это @Grohuf сам придумал снова).

 

НУ КАК БЫ ДАЖЕ С ЛИНЕЙНОЙ ПОСЛЕДОВАТЕЛЬНОСТЬЮ СОБЫТИЙ И АТОМАРНОЙ ЗАПИСЬЮ read-modify-write НЕ СТАНОВЯТСЯ АТОМАРНЫМИ

 

Пруф того что по логики долбаеба из атомарности записи int должна следовать атомарность read-modify-write:

Показать больше  

ты говорил про атомарность инта

image.png.9f88f30e7b70e492f1547d82df2cc577.png

объясни плс как из "все операции с инт атомарны" -> "так что такого случая произойти не может"

я до сих пор не понимаю как атомарность инта связана с выстраиванием послежовательностей чтения-записи по 2+ переменным

 

Более того

если баг не воспроизводится, это не значит что его нет

про что блять и речь

бы мне объясни какая часть спеки гарантирует корректное поведение 

и более того, объясни почему это воспроизводится на 2х потоках? ведь код корректный и бага быть не должно

 

далее ты привел что вроде как ты написал эквивалентный код на с++ и сделал вывод что это не возможно на основе того что конкретная версия компилятора, под конкретную архитектуру содержит одинаковый код.

ты можешь гарантировать что другие версии компилятора и/или под другие архитектуры всегда будут выдавать такой же идентичный код?

 

у тебя как раз проблема в том чтобы понять что гарантий нет. даже если сейчас все реализовано так что это эквивалентные операции, это не значит что завтра не выйдем проц М1 или новая оптимизация в компиляторе/процессоре которая не будет эквивалентной. тебе просто повезло в конкретном случае

и опять же, я не понимаю причем здесь инт и его атомарность вообще блять

Более того.

у тебя в джаве может быть код так организован (на континуациях) что выполнить код рефери будет выполнен на том же треде и в итоге у тебя баг воспроизведется

 

более того в спеке по плюсам дословно написано

> The synchronization is established only between the threads releasing and acquiring the same atomic variable. Other threads can see different order of memory accesses than either or both of the synchronized threads.

 

там напрямую написано что баг, который ты считаешь невозможен, возможен

либо я не знаю о какой-то еще фичи плюсов которая упорядочет чтения-записи этих 2х переменных (cat и panda) и гарантирует что они будут прочитаны в одинаковом порядке 

 

так что я не вижу в чем ты прав кроме того что так совпало что код который не гарантированно корректный работает корректно в текущих условиях

 

но возможно я что-то не знаю про атомарность интов в плюсах что начинает гарантировать порядок операций в req/aq для 2+ переменных


Изменено пользователем Just.Doit

 

очень крутые котейки


Кому-то пизды дал - нужно сделать скрин обязательно. (с) Solo

Поделиться сообщением


Ссылка на сообщение
  Just.Doit написал 12.06.2024 в 21:58:

ты говорил про атомарность инта

image.png.9f88f30e7b70e492f1547d82df2cc577.png

объясни плс как из "все операции с инт атомарны" -> "так что такого случая произойти не может"

 

Если бы операции чтения / присвания инта могли быть выполнены на половину у нас были бы проблемы.

 

Пример когда такое может произойти в с++

 

struct Big {int64_t a,b,c,d,e,f,g,h,i,... , z;};
Big A, B;
...
A = B;

 

Последнее присваивание может исполниться на половину

  Just.Doit написал 12.06.2024 в 21:58:

я до сих пор не понимаю как атомарность инта связана с выстраиванием послежовательностей чтения-записи по 2+ переменным

 

Никак

 

Нужно смотреть на конкретный этот код презентации и что он делает

 

Если один поток уже увидел изменения в переменной то и последующие чтения из других потоков это изменение тоже увидят - вот и все

  Just.Doit написал 12.06.2024 в 21:58:

бы мне объясни какая часть спеки гарантирует корректное поведение 

 

Можно посмотреть как выглядит запись с memory_order_seq_cst:

 

        mov     eax, 12345678
        xchg    eax, DWORD PTR z[rip]

 

И как выглядит запись с любой другой memory_order:

 

        mov     DWORD PTR z[rip], 12345678

 

И как выглядит чтение вообще с любой memory_order:

 

        mov     eax, DWORD PTR z[rip]

 

То есть для чтение вообще не добавляются специальных инструкций а для запили с memory_order_seq_cst добавляют инструкцию "слить кэш в общую память"


towBCf6.pngimage.png.6f88ac9ad688355eb803ba0b32e309ca.pngimage.png.c05354238865437022b3e4a97a835dbd.pngimage.png.0e8329f2b07e208ae8ef4e3f6878d126.png

 

 

 

Поделиться сообщением


Ссылка на сообщение
  Vova написал 12.06.2024 в 22:27:

Если бы операции чтения / присвания инта могли быть выполнены на половину у нас были бы проблемы.

да

но как это отвечает на изначальный вопрос про то почему проблема ордеринга не может произойти с интами? очевидно что выполнение на половину это не единственный источник проблемы ордеринга


 

очень крутые котейки


Кому-то пизды дал - нужно сделать скрин обязательно. (с) Solo

Поделиться сообщением


Ссылка на сообщение
  Just.Doit написал 12.06.2024 в 22:44:
  Vova написал 12.06.2024 в 22:27:

да

но как это отвечает на изначальный вопрос про то почему проблема ордеринга не может произойти с интами? очевидно что выполнение на половину это не единственный источник проблемы ордеринга

 

Ответил выше


towBCf6.pngimage.png.6f88ac9ad688355eb803ba0b32e309ca.pngimage.png.c05354238865437022b3e4a97a835dbd.pngimage.png.0e8329f2b07e208ae8ef4e3f6878d126.png

 

 

 

Поделиться сообщением


Ссылка на сообщение
  Vova написал 12.06.2024 в 22:27:

Если один поток уже увидел изменения в переменной то и последующие чтения из других потоков это изменение тоже увидят - вот и все

что это гарантирует?

там нету "последующих" чтений, там конкрурентные чтения, порядок между ними не определен ничем кроме rel/aq семантики

  Vova написал 12.06.2024 в 22:27:

То есть для чтение вообще не добавляются специальных инструкций

на одном конкретном компиляторе и на одной конкретной архитектуре

кто гарантирует что этого не произойдет в других условиях?

  Vova написал 12.06.2024 в 22:27:

То есть для чтение вообще не добавляются специальных инструкций а для запили с memory_order_seq_cst добавляют инструкцию "слить кэш в общую память"

попробуй обхяснить тогда зачем их столько?

почему не оставить в с++ только 2 модификатора на запись и вообще убрать все модификаторы на чтение если "И как выглядит запись с любой другой memory_order:" "И как выглядит чтение вообще с любой memory_order:" ?

ты понимаешь логику почему это сущесвтует и почему ты не прав в рассуждениях на счет гарантий ордеринга?


 

очень крутые котейки


Кому-то пизды дал - нужно сделать скрин обязательно. (с) Solo

Поделиться сообщением


Ссылка на сообщение
  Just.Doit написал 12.06.2024 в 21:58:

и более того, объясни почему это воспроизводится на 2х потоках? ведь код корректный и бага быть не должно

 

Разные есть варианты почему может быть так:

 

1) На этапе компилятора убирается полностью чтение переменной которая в том же потоке выставлена true и полностью убирается вообще вся проверка кондишена

 

2) Запись просходит по схеме lazy write то есть фактический write происходит как самая последняя операция

 

3) Может быть чтение переменной которая в том же потоке выставлена true все же происходит но читается из локального кэша а не глобальной памяти


towBCf6.pngimage.png.6f88ac9ad688355eb803ba0b32e309ca.pngimage.png.c05354238865437022b3e4a97a835dbd.pngimage.png.0e8329f2b07e208ae8ef4e3f6878d126.png

 

 

 

Поделиться сообщением


Ссылка на сообщение
  Vova написал 12.06.2024 в 22:51:

Разные есть варианты почему может быть так:

тоесть код не корректный хотя ты говорил что "автор дурак и код будет работать корректно"


 

очень крутые котейки


Кому-то пизды дал - нужно сделать скрин обязательно. (с) Solo

Поделиться сообщением


Ссылка на сообщение
(изменено)
  Just.Doit написал 12.06.2024 в 22:52:
  Vova написал 12.06.2024 в 22:51:

тоесть код не корректный хотя ты говорил что "автор дурак и код будет работать корректно"

 

Я что-то утверждал только про код с 4 тредами

 

:roflanebalo:

 

Вы все пытаетесь меня упрекнуть тем что на 2 тредах код воспроизводится но я ничего не говорил про код с 2 тредами изначально

  Just.Doit написал 12.06.2024 в 21:58:

ты можешь гарантировать что другие версии компилятора и/или под другие архитектуры всегда будут выдавать такой же идентичный код?

 

Перестановки кода компилятором запрещены даже с acquire release семантикой как минимум в с++ это так

 

Более того там нечего переставлять как бы

  Just.Doit написал 12.06.2024 в 21:58:

тебе просто повезло в конкретном случае

 

Мне повезло с вероятностью 100% и уверен повезет снова на любом компиляторе и архитектуре

 

Пока что эту хуйню с 4 тредами никто нигде не воспроизвел мне продолжает везти


Изменено пользователем Vova

towBCf6.pngimage.png.6f88ac9ad688355eb803ba0b32e309ca.pngimage.png.c05354238865437022b3e4a97a835dbd.pngimage.png.0e8329f2b07e208ae8ef4e3f6878d126.png

 

 

 

Поделиться сообщением


Ссылка на сообщение
(изменено)
  Vova написал 12.06.2024 в 22:55:

Я что-то утверждал только про код с 4 тредами

но код с 4мя тредами не корректный

ты увтерждал что "этого не может произойти", но это может произойти, просто пока не нашлось архитектуры/компилятора который бы так работал

  Vova написал 12.06.2024 в 22:55:

Перестановки кода компилятором запрещены даже с acquire release семантикой как минимум в с++ это так

где это прописано?

я не вижу в мемори ордер этого

там прямо написано что чтения в другом порядке возможны

более того есть перестановки на уровне процессора

  Vova написал 12.06.2024 в 22:55:

Более того там нечего переставлять как бы

там 2 чтения

ты можешь в рефери прочитать по 0 в кота и в панду когда никто не стартовал, и протом прочитать по 1 когда оба финишировали. и будет баг

ничто не гарантирует отстутсвия данного поведения


Изменено пользователем Just.Doit

 

очень крутые котейки


Кому-то пизды дал - нужно сделать скрин обязательно. (с) Solo

Поделиться сообщением


Ссылка на сообщение
  Just.Doit написал 12.06.2024 в 23:00:

 

  Vova написал 12.06.2024 в 22:55:

где это прописано?

я не вижу в мемори ордер этого

там прямо написано что чтения в другом порядке возможны

 

https://en.cppreference.com/w/cpp/atomic/memory_order

 

memory_order_acquire A load operation with this memory order performs the acquire operation on the affected memory location: no reads or writes in the current thread can be reordered before this load. All writes in other threads that release the same atomic variable are visible in the current thread (see Release-Acquire ordering below).

memory_order_release A store operation with this memory order performs the release operation: no reads or writes in the current thread can be reordered after this store. All writes in the current thread are visible in other threads that acquire the same atomic variable (see Release-Acquire ordering below) and writes that carry a dependency into the atomic variable become visible in other threads that consume the same atomic (see Release-Consume ordering below).

  Just.Doit написал 12.06.2024 в 23:00:

просто пока не нашлось архитектуры/компилятора который бы так работал

 

Когда найдется сообщите

 

Претензия что я слелал вывод в контексте конкретных архитектур процессоров звучит сомнительно учитывая что КОНКРЕТНЫЕ АРХИТЕКТУРЫ упомянуты в моем изначальном посте


towBCf6.pngimage.png.6f88ac9ad688355eb803ba0b32e309ca.pngimage.png.c05354238865437022b3e4a97a835dbd.pngimage.png.0e8329f2b07e208ae8ef4e3f6878d126.png

 

 

 

Поделиться сообщением


Ссылка на сообщение

Присоединяйтесь к обсуждению

Вы можете опубликовать сообщение сейчас, а зарегистрироваться позже. Если у вас есть аккаунт, войдите в него для написания от своего имени.

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Восстановить форматирование

  Разрешено не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.


×
×
  • Создать...