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: |

Since its launch in 2013, Telegram has grown from a simple messaging app to a broadcast network. Its user base isn’t as vast as WhatsApp’s, and its broadcast platform is a fraction the size of Twitter, but it’s nonetheless showing its use. While Telegram has been embroiled in controversy for much of its life, it has become a vital source of communication during the invasion of Ukraine. But, if all of this is new to you, let us explain, dear friends, what on Earth a Telegram is meant to be, and why you should, or should not, need to care. Perpetrators of such fraud use various marketing techniques to attract subscribers on their social media channels. The War on Fakes channel has repeatedly attempted to push conspiracies that footage from Ukraine is somehow being falsified. One post on the channel from February 24 claimed without evidence that a widely viewed photo of a Ukrainian woman injured in an airstrike in the city of Chuhuiv was doctored and that the woman was seen in a different photo days later without injuries. The post, which has over 600,000 views, also baselessly claimed that the woman's blood was actually makeup or grape juice. For tech stocks, “the main thing is yields,” Essaye said. "Someone posing as a Ukrainian citizen just joins the chat and starts spreading misinformation, or gathers data, like the location of shelters," Tsekhanovska said, noting how false messages have urged Ukrainians to turn off their phones at a specific time of night, citing cybersafety.
from it


Telegram Experimental chill
FROM American