Size: a a a

Compiler Development

2020 December 24

M

MaxGraey in Compiler Development
Roman Elizarov
/извините за продолжение оффтопика/, но мы вывели империческое правило, что если у вас concurrent алгоритм в котором нетривиальное число CAS-ов и у вас нет механически проверенного доказательства его корректности, то вряд ли он корректен. У нас тут ребята делали новый быстрый алгоритм семафора (а это уж намного более простая штука чем deqeue). Несколько экспертов думало и изучало алгоритм, тестов написано вагон. Начали док-во на Coq прикручивать, так сразу нашли несколько багов.
Мне кажется все это должно рашаться на уровне железа. Собственно для этого давно придумали спекулятивные техники вроде Speculative Lock Elision и Transactional Lock Removal (TLR)
источник

AG

Alex Gryzlov in Compiler Development
Roman Elizarov
У Tsigas-Sundell тоже «доказательство» есть. Но оно не помогает.
оно неполное, у Шафьей этот момент как раз разобран
источник

AG

Alex Gryzlov in Compiler Development
MaxGraey
Мне кажется все это должно рашаться на уровне железа. Собственно для этого давно придумали спекулятивные техники вроде Speculative Lock Elision и Transactional Lock Removal (TLR)
пусть хотя бы аппаратный MCAS сделают для начала
источник

AG

Alex Gryzlov in Compiler Development
MaxGraey
Там даже с CAS есть проблемка с ABA. Обычно решается через тегирование
существует целая мини-индустрия алгоритмов рекламации памяти
источник

AG

Alex Gryzlov in Compiler Development
эпохи, эры, интервалы и тд
источник

AG

Alex Gryzlov in Compiler Development
Roman Elizarov
/извините за продолжение оффтопика/, но мы вывели империческое правило, что если у вас concurrent алгоритм в котором нетривиальное число CAS-ов и у вас нет механически проверенного доказательства его корректности, то вряд ли он корректен. У нас тут ребята делали новый быстрый алгоритм семафора (а это уж намного более простая штука чем deqeue). Несколько экспертов думало и изучало алгоритм, тестов написано вагон. Начали док-во на Coq прикручивать, так сразу нашли несколько багов.
да, вот мы как раз этим и занимаемся - пилим логику для локфри структур на coq :)
источник
2020 December 25

RS

Rifat S in Compiler Development
Vyacheslav Egorov
(Или там SRW locks) если нужно с нераздельными ресурсами работать то доктор прописал использовать нормальные примитивы синхронизации а не самописные
В общем, попробовал заменить самописный Деккер на критические секции из Windows и проблема ушла. Спасибо за совет. Еще, кстати, проблема пропадала, если внутри самописной критической секции делать вывод в консоль. А вывод в консоль он тоже сделан через вызов WinApi функций и видимо это тоже как-то связано. Но критические секции в любом случае надежнее, чем консоль.
источник

ИЛ

Иван Лещенко... in Compiler Development
Всем привет. Кто-то пилил свой фронт-енд для Cranelift? Не пойму как собрать готовый бинарь под хостовый таргет
источник

ИЛ

Иван Лещенко... in Compiler Development
Иван Лещенко
Всем привет. Кто-то пилил свой фронт-енд для Cranelift? Не пойму как собрать готовый бинарь под хостовый таргет
Есть пока-что такое. Сам IR корректный
источник

BD

Berkus Decker in Compiler Development
Rifat S
Или что-то типа lock-free списка реализовать, тогда как мне кажется, если какие-то изменения еще не отразились, то это не должно приводить к ошибкам в работе с очередью.
Ой, а расскажите как сделать надежный лок фри без атомиков и барьеров?
источник

BD

Berkus Decker in Compiler Development
Evgenii Moiseenko
Обычный спинлок на CAS будет корректен без барьеров на x86 (но нужно использовать CAS, а вы вроде не хотите это делать).
Из экзотики, есть вот такой алгоритм https://en.m.wikipedia.org/wiki/Szyma%C5%84ski%27s_algorithm. Он вроде тоже не требует барьеров, но тут я не до конца уверен :)
О, спасибо
источник

BD

Berkus Decker in Compiler Development
Alex Gryzlov
но тут еще вопрос что считать C11, там же не одна модель
В с11 вроде стандартизовали модель памяти же?
источник

DF

Dollar Føølish in Compiler Development
Он про формализации
источник

DF

Dollar Føølish in Compiler Development
То есть не лапша в виде стандарта
источник

DF

Dollar Føølish in Compiler Development
А норм формализм
источник

EM

Evgenii Moiseenko in Compiler Development
Berkus Decker
В с11 вроде стандартизовали модель памяти же?
там ещё есть замечательный абзац про запрет out-of-thin-air значений, без какого-либо определения этих самых thin-air значений
источник

DF

Dollar Føølish in Compiler Development
Кек
источник

BD

Berkus Decker in Compiler Development
Roman Elizarov
/извините за продолжение оффтопика/, но мы вывели империческое правило, что если у вас concurrent алгоритм в котором нетривиальное число CAS-ов и у вас нет механически проверенного доказательства его корректности, то вряд ли он корректен. У нас тут ребята делали новый быстрый алгоритм семафора (а это уж намного более простая штука чем deqeue). Несколько экспертов думало и изучало алгоритм, тестов написано вагон. Начали док-во на Coq прикручивать, так сразу нашли несколько багов.
Хы, да
источник

DF

Dollar Føølish in Compiler Development
Roman Elizarov
/извините за продолжение оффтопика/, но мы вывели империческое правило, что если у вас concurrent алгоритм в котором нетривиальное число CAS-ов и у вас нет механически проверенного доказательства его корректности, то вряд ли он корректен. У нас тут ребята делали новый быстрый алгоритм семафора (а это уж намного более простая штука чем deqeue). Несколько экспертов думало и изучало алгоритм, тестов написано вагон. Начали док-во на Coq прикручивать, так сразу нашли несколько багов.
О пользе верификации.. спасибо
источник

BD

Berkus Decker in Compiler Development
Rifat S
В общем, попробовал заменить самописный Деккер на критические секции из Windows и проблема ушла. Спасибо за совет. Еще, кстати, проблема пропадала, если внутри самописной критической секции делать вывод в консоль. А вывод в консоль он тоже сделан через вызов WinApi функций и видимо это тоже как-то связано. Но критические секции в любом случае надежнее, чем консоль.
Вывод в консоль захватывает мьютекс обычно, а там барьеры и все что к ним прилагается
источник