Warning: mkdir(): No space left on device in /var/www/group-telegram/post.php on line 37

Warning: file_put_contents(aCache/aDaily/post/experimentalchill/--): Failed to open stream: No such file or directory in /var/www/group-telegram/post.php on line 50
Experimental chill | Telegram Webview: experimentalchill/160 -
Telegram Group & Telegram Channel
Продолжаем наши пути неисповедимые в сортировке в C++.

Ох, наконец-то мне можно говорить об этом.

Тут наши друзья из DeepMind решили запушить свои находки в сортировках 3, 4 и 5 элементов примитивных типов. https://reviews.llvm.org/D118029

Такой кейс очень интересный, потому что компилируются в машинный код без веток (только с помощью cmov).

Количество инструкций скомпилированного sortN без веток равно 2N + 4M (M -- оптимальное количество сравнений N элементов):

1. N копирований инструкций из памяти
2. N копирований инструкции из регистров
3. 4 инструкции на компаратор
3.1. Переместить во временный регистр
3.2. Сравнить
3.3. 2 условных хода с помощью cmov

Если посчитать количество инструкций, то вы можете увидеть
Sort3 2*3 + 4*3 = 18 (3 элемента за 3 сравнения)
Sort4 2*4 + 4*5 = 28 (4 элемента за 5 сравнений)
Sort5 2*5 + 4*9 = 46 (5 элементов за 9 сравнений)

И компилятор это генерирует на картинке снизу и по ссылке https://gcc.godbolt.org/z/Mdn8WxaMK

Ребята из DeepMind решили применить MuZero (та самая AlphaZero, дада) на то, чтобы она поискала какие-то улучшения в branchless sorting

И она нашла как сделать sort3 за 17 инструкций, sort5 за 43.

Условно когда мы сортируем 3 элемента A, B, C мы делаем

cond_swap(B, C)
cond_swap(A, C)
cond_swap(A, B)

Каждая по 4 инструкции

MuZero нашёл это сделать так:

cond_swap(B, C) // B < C
magic_swap(A, B, C)

magic_swap похож на двойной cond_swap, но с одним отличием:

1. Move C into tmp.
2. Compare A and C.
3. Conditionally move A into C.
4. Conditionally move A into tmp.
// By now C’ = max(A, C), tmp = min(A, C)
Move tmp into A. !!!, эта была в двойном cond_swap, а теперь ушло
5. Compare tmp and B.
6. Conditionally move B into A.
7. Conditionally move tmp into B.

Это настолько круто, насколько это возможно. Теперь мы с помощью reinforcement learning находим оптимизации в сортировках.

Быстрее ли оно, чем 18 инструкций? На самом деле вряд ли, mov из регистров в регистр это переименовывание регистров, и работа будет идти только на декодинге инструкции и retirement (выходе из пайплайна) части. Мелочи, в реальности особо не заметно, но приятно в любом случае.

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



group-telegram.com/experimentalchill/160
Create:
Last Update:

Продолжаем наши пути неисповедимые в сортировке в C++.

Ох, наконец-то мне можно говорить об этом.

Тут наши друзья из DeepMind решили запушить свои находки в сортировках 3, 4 и 5 элементов примитивных типов. https://reviews.llvm.org/D118029

Такой кейс очень интересный, потому что компилируются в машинный код без веток (только с помощью cmov).

Количество инструкций скомпилированного sortN без веток равно 2N + 4M (M -- оптимальное количество сравнений N элементов):

1. N копирований инструкций из памяти
2. N копирований инструкции из регистров
3. 4 инструкции на компаратор
3.1. Переместить во временный регистр
3.2. Сравнить
3.3. 2 условных хода с помощью cmov

Если посчитать количество инструкций, то вы можете увидеть
Sort3 2*3 + 4*3 = 18 (3 элемента за 3 сравнения)
Sort4 2*4 + 4*5 = 28 (4 элемента за 5 сравнений)
Sort5 2*5 + 4*9 = 46 (5 элементов за 9 сравнений)

И компилятор это генерирует на картинке снизу и по ссылке https://gcc.godbolt.org/z/Mdn8WxaMK

Ребята из DeepMind решили применить MuZero (та самая AlphaZero, дада) на то, чтобы она поискала какие-то улучшения в branchless sorting

И она нашла как сделать sort3 за 17 инструкций, sort5 за 43.

Условно когда мы сортируем 3 элемента A, B, C мы делаем

cond_swap(B, C)
cond_swap(A, C)
cond_swap(A, B)

Каждая по 4 инструкции

MuZero нашёл это сделать так:

cond_swap(B, C) // B < C
magic_swap(A, B, C)

magic_swap похож на двойной cond_swap, но с одним отличием:

1. Move C into tmp.
2. Compare A and C.
3. Conditionally move A into C.
4. Conditionally move A into tmp.
// By now C’ = max(A, C), tmp = min(A, C)
Move tmp into A. !!!, эта была в двойном cond_swap, а теперь ушло
5. Compare tmp and B.
6. Conditionally move B into A.
7. Conditionally move tmp into B.

Это настолько круто, насколько это возможно. Теперь мы с помощью reinforcement learning находим оптимизации в сортировках.

Быстрее ли оно, чем 18 инструкций? На самом деле вряд ли, mov из регистров в регистр это переименовывание регистров, и работа будет идти только на декодинге инструкции и retirement (выходе из пайплайна) части. Мелочи, в реальности особо не заметно, но приятно в любом случае.

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

BY Experimental chill




Share with your friend now:
group-telegram.com/experimentalchill/160

View MORE
Open in Telegram


Telegram | DID YOU KNOW?

Date: |

He said that since his platform does not have the capacity to check all channels, it may restrict some in Russia and Ukraine "for the duration of the conflict," but then reversed course hours later after many users complained that Telegram was an important source of information. Emerson Brooking, a disinformation expert at the Atlantic Council's Digital Forensic Research Lab, said: "Back in the Wild West period of content moderation, like 2014 or 2015, maybe they could have gotten away with it, but it stands in marked contrast with how other companies run themselves today." After fleeing Russia, the brothers founded Telegram as a way to communicate outside the Kremlin's orbit. They now run it from Dubai, and Pavel Durov says it has more than 500 million monthly active users. Perpetrators of such fraud use various marketing techniques to attract subscribers on their social media channels. The fake Zelenskiy account reached 20,000 followers on Telegram before it was shut down, a remedial action that experts say is all too rare.
from hk


Telegram Experimental chill
FROM American