Size: a a a

Compiler Development

2020 January 14

BD

Berkus Decker in Compiler Development
Михаил Бахтерев
Что конкретно искать? Поискал lock-free is slow, нашёл только общие слова. Когда мерял для себя, lock-free структуры были всегда быстрее семафоров или мьютексов. Понятно, что они подходят и для других сценариев, типа инверсии приоритетов. Но я бы сказал, что если в системе возникает инверсия приоритетов, то что-то не так с системой, и её необходимо перерабатывать, а не маскировать проблему lock-free структурами.
Мерял под нагрузкой я надеюсь? Full contention и вот это все?
источник

МБ

Михаил Бахтерев in Compiler Development
Berkus Decker
Мерял под нагрузкой я надеюсь? Full contention и вот это все?
Ну, у меня специфика была в том, что работает одна задача из кучи нитей. HPC всякое. В таком режиме и мерял
источник

__

_________ _________ in Compiler Development
источник

__

_________ _________ in Compiler Development
источник

AT

Alexander Tchitchigin in Compiler Development
https://t.me/CompilerDev/43506 затем https://t.me/CompilerDev/50863 и вот опять. Что-то в этом есть, да? 😃
источник

__

_________ _________ in Compiler Development
чот походу ага
источник

BD

Berkus Decker in Compiler Development
Михаил Бахтерев
Ну, у меня специфика была в том, что работает одна задача из кучи нитей. HPC всякое. В таком режиме и мерял
Без контеншена футексы либо атомики будут примерно одинаковы (юзерспейсная часть все равно на атомиках)
источник

BD

Berkus Decker in Compiler Development
Так что бенчмарк инвалид
источник

МБ

Михаил Бахтерев in Compiler Development
Berkus Decker
Без контеншена футексы либо атомики будут примерно одинаковы (юзерспейсная часть все равно на атомиках)
Ну. Либо я на атомиках пишу прямо в очередь, либо я на атомиках захватываю lock, пишу в очередь, освобождаю lock (это же должно ещё и по кэшам расползаться). Если просто генерировать случайную очередь 24-мя нитями, то lock-free у меня получается раза в 1.5 быстрее в сравнении с futex. На 48 нитях в такой нагрузке некоторые нити уже уходят в сон. Процессор 24C/48T.
источник

МБ

Михаил Бахтерев in Compiler Development
Berkus Decker
Так что бенчмарк инвалид
Ну. Какая задача, такой и бенчмарк. Sorry
источник

BD

Berkus Decker in Compiler Development
Михаил Бахтерев
Ну. Какая задача, такой и бенчмарк. Sorry
Ну так это anecdotal evidence, не стоит приводить его как универсальное доказательство. Если я доберусь до компа и мне будет еще не пофиг то я пришлю то что вы не осилили нагуглить, хотя видимо и не старались особо.
источник

МБ

Михаил Бахтерев in Compiler Development
Berkus Decker
Ну так это anecdotal evidence, не стоит приводить его как универсальное доказательство. Если я доберусь до компа и мне будет еще не пофиг то я пришлю то что вы не осилили нагуглить, хотя видимо и не старались особо.
Нагуглить lock-free is faster легко, нагуглить lock-free is slower не получается. Имеется в виду с табличками замеров. Видимо, не у меня одного такой анекдот случается. Я потому и просил каких-нибудь кейвордов для поиска. Сам не сталкивался с такой ситуацией, поэтому ничего в голову не приходит
источник

BD

Berkus Decker in Compiler Development
Михаил Бахтерев
Нагуглить lock-free is faster легко, нагуглить lock-free is slower не получается. Имеется в виду с табличками замеров. Видимо, не у меня одного такой анекдот случается. Я потому и просил каких-нибудь кейвордов для поиска. Сам не сталкивался с такой ситуацией, поэтому ничего в голову не приходит
Первые же два результата, один даже ведет к вашему любимому Прешингу
источник

BD

Berkus Decker in Compiler Development
Lock free algorithms generally perform more poorly than lock-based algorithms. That's a key reason they're not used nearly as frequently.
The problem with lock free algorithms is that they maximize contention by allowing contending threads to continue to contend. Locks avoid contention by de-scheduling contending threads. Lock free algorithms, to a first approximation, should only be used when it's not possible to de-schedule contending threads. That only rarely applies to application-level code.
Let me give you a very extreme hypothetical. Imagine four threads are running on a typical, modern dual-core CPU. Threads A1 and A2 are manipulating collection A. Threads B1 and B2 are manipulating collection B.
First, let's imagine the collection uses locks. That will mean that if threads A1 and A2 (or B1 and B2) try to run at the same time, one of them will get blocked by the lock. So, very quickly, one A thread and one B thread will be running. These threads will run very quickly and will not contend. Any time threads try to contend, the conflicting thread will get de-scheduled. Yay.
Now, imagine the collection uses no locks. Now, threads A1 and A2 can run at the same time. This will cause constant contention. Cache lines for the collection will ping-pong between the two cores. Inter-core buses may get saturated. Performance will be awful.
Again, this is highly exaggerated. But you get the idea. You want to avoid contention, not suffer through as much of it as possible.
источник

МБ

Михаил Бахтерев in Compiler Development
Berkus Decker
Lock free algorithms generally perform more poorly than lock-based algorithms. That's a key reason they're not used nearly as frequently.
The problem with lock free algorithms is that they maximize contention by allowing contending threads to continue to contend. Locks avoid contention by de-scheduling contending threads. Lock free algorithms, to a first approximation, should only be used when it's not possible to de-schedule contending threads. That only rarely applies to application-level code.
Let me give you a very extreme hypothetical. Imagine four threads are running on a typical, modern dual-core CPU. Threads A1 and A2 are manipulating collection A. Threads B1 and B2 are manipulating collection B.
First, let's imagine the collection uses locks. That will mean that if threads A1 and A2 (or B1 and B2) try to run at the same time, one of them will get blocked by the lock. So, very quickly, one A thread and one B thread will be running. These threads will run very quickly and will not contend. Any time threads try to contend, the conflicting thread will get de-scheduled. Yay.
Now, imagine the collection uses no locks. Now, threads A1 and A2 can run at the same time. This will cause constant contention. Cache lines for the collection will ping-pong between the two cores. Inter-core buses may get saturated. Performance will be awful.
Again, this is highly exaggerated. But you get the idea. You want to avoid contention, not suffer through as much of it as possible.
А измерения? Я бы хотел цифирьки посмотреть. Оно такое дело параллельное: думаешь одно, а работает по-другому. Это я, конечно, видел
источник

BD

Berkus Decker in Compiler Development
Михаил Бахтерев
А измерения? Я бы хотел цифирьки посмотреть. Оно такое дело параллельное: думаешь одно, а работает по-другому. Это я, конечно, видел
Это уже с компа
источник

МБ

Михаил Бахтерев in Compiler Development
Berkus Decker
Это уже с компа
Буду признателен
источник

AT

Alexander Tchitchigin in Compiler Development
Berkus Decker
Ну так это anecdotal evidence, не стоит приводить его как универсальное доказательство. Если я доберусь до компа и мне будет еще не пофиг то я пришлю то что вы не осилили нагуглить, хотя видимо и не старались особо.
Вот отчего Вы сразу на личности переходите на ровном месте? При таком высоком качестве того, что Вы пишете. Не понимаю как это так сочетается?.. 😞
источник

EM

Evgenii Moiseenko in Compiler Development
Alexander Tchitchigin
Вот отчего Вы сразу на личности переходите на ровном месте? При таком высоком качестве того, что Вы пишете. Не понимаю как это так сочетается?.. 😞
@Ioann_V по поводу атомиков в С/С++ есть годные слайды https://www.cs.tau.ac.il/~orilahav/papers/lahav_c11.pdf
там, кстати, есть и "аналогии с железом", которые вам так нравятся :)
источник

AT

Alexander Tchitchigin in Compiler Development
Evgenii Moiseenko
@Ioann_V по поводу атомиков в С/С++ есть годные слайды https://www.cs.tau.ac.il/~orilahav/papers/lahav_c11.pdf
там, кстати, есть и "аналогии с железом", которые вам так нравятся :)
Это не мне. 😃
источник