The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



"Проект Minotaur развивает оптимизатор векторных инструкций для LLVM "
Вариант для распечатки  
Пред. тема | След. тема 
Форум Разговоры, обсуждение новостей
Изначальное сообщение [ Отслеживать ]

"Проект Minotaur развивает оптимизатор векторных инструкций для LLVM "  +/
Сообщение от opennews (??), 16-Июл-23, 10:43 
Группа исследователей из университета Юты (США) предложила оптимизатор Minotaur для набора компиляторов LLVM, использующий метод на основе решения задач выполнимости формул (SMT Solver) для выявления недостающих оптимизаций в промежуточном представлении кода (LLVM IR), генерируемом оптимизатором LLVM.  Minotaur главным образом нацелен на оптимизацию целочисленных векторных инструкций (SIMD), как переносимых, так и специфичных для систем x86_64 (SSE, AVX, AVX2 и AVX-512)...

Подробнее: https://www.opennet.ru/opennews/art.shtml?num=59447

Ответить | Правка | Cообщить модератору

Оглавление

Сообщения [Сортировка по ответам | RSS]

1. Сообщение от Аноним (1), 16-Июл-23, 10:43   –21 +/
много человекочасов, пропукали не один стул, построили целую науку, добились повышения в 1.3%. Это прогресс ащетаю
Ответить | Правка | Наверх | Cообщить модератору
Ответы: #3, #9, #23, #27, #86, #87

2. Сообщение от Аноним (2), 16-Июл-23, 10:58   –4 +/
А они учитывают то что многие процессоры тут же включают троттлинг от таких инструкций?
Ответить | Правка | Наверх | Cообщить модератору
Ответы: #6, #32

3. Сообщение от Аноним (3), 16-Июл-23, 10:58   +3 +/
Прогресс в навязывании avx2
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #1

4. Сообщение от Аноним (3), 16-Июл-23, 10:59   +/
>(SMT Solver)

очень медленно будет.

Ответить | Правка | Наверх | Cообщить модератору
Ответы: #8

6. Сообщение от Аноним (6), 16-Июл-23, 11:29   +2 +/
околесицу и чушь про тротлинг при вызове таких инструкций не несите, хорошо? спасибо.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #2 Ответы: #7

7. Сообщение от Аноним (7), 16-Июл-23, 11:33   –1 +/
Может троттлинг и не точное определение, но то, что ядра снижают частоту при использовании AVX-* - факт.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #6 Ответы: #15, #30

8. Сообщение от Аноним (8), 16-Июл-23, 11:35   +3 +/
с какого это перепугу? вы, судя по всему, вообще не понимаете, что это и как оно реализовывается в Minotaur. https://arxiv.org/pdf/2306.00229.pdf
почитайте источник исследований и то, откуда скопирована по своей сути статья.

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

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #4 Ответы: #18

9. Сообщение от Аноним (9), 16-Июл-23, 11:36   +12 +/
Ты шутишь? Это целые 1.3%! Нука шляпу сними!
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #1 Ответы: #29

15. Сообщение от Аноним (2), 16-Июл-23, 12:33   +/
Это то же самое и по той же причине. Своеобразный преемптивный троттлинг, avx легко отобрали пальму первенства по нагреву у sse и fpu. Особенно заметно, когда СО в итоге всё же не справляется и легко падает в полноценный троттлинг. Для примера, компиляция вебкита (и хромиума соотвественно) -- единственный процесс из всех пакетов, который выкидывал мой пк в защиту от перегрева (температура на ~20 градусов выше обычной максимальной).
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #7 Ответы: #16, #41

16. Сообщение от Аноним (2), 16-Июл-23, 12:37   +/
То, что это в принципе самый долгособираемый пакет, вопрос отдельный, троттлить начинало довольно быстро и соответственно всё растягивалось на долго.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #15

17. Сообщение от Аноним (17), 16-Июл-23, 12:43   +/
Rewrite Generator -> Rewrites -> Rewrite Rules -> Rewrite
Ответить | Правка | Наверх | Cообщить модератору
Ответы: #21

18. Сообщение от Аноним (18), 16-Июл-23, 12:45   +5 +/
компиляция медленная, не выполнение. SMT - это тяжёлая артиллерия для таких задач, как инверсия хэш-функций. По сути - оптимизированный ветвями и границами брутфорс. Они могут это решить в принципе, но никто не обещал, что за приемлимое время и при приемлимом потреблении памяти. На smt полагаются тогда, когда на всё остальное положиться уже нельзя.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #8

20. Сообщение от Аноним (2), 16-Июл-23, 12:56   +/
Интересно было бы сравнить с GCC (O3+pgo).
Ответить | Правка | Наверх | Cообщить модератору
Ответы: #63

21. Сообщение от Аноньимъ (ok), 16-Июл-23, 12:57   –1 +/
Знают толк в С++
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #17

22. Сообщение от Аноньимъ (ok), 16-Июл-23, 13:05   +/
>Пример оптимизации для Си-кода:

Это очень круто, но бывает эти avx инструкции нужны для всяких векторных вычислений, всяких кодировщиком видео, и прочее.

А цикл заменяющий символы в строке может всеже стоит без avx делать?


Другими словами если всё так круто и быстро может вообще отказаться от обычных инструкций и все через avx считать?

Правда были уже процессоры которые сразу умели несколько инструкций выполнять... Только же закопали их потому как слишком сложно было несчастным программистам думать, а компиляторы нешмогли.
Или шмогли.
Но процессоры то закопали.

И вот опять.

Ответить | Правка | Наверх | Cообщить модератору

23. Сообщение от AKTEON (?), 16-Июл-23, 13:19   +/
Ага - полезность науки это растет как длина фрактала к ометаемой площади ....
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #1 Ответы: #88

24. Сообщение от Аноним (24), 16-Июл-23, 13:21   +/
Может я чего-то недопонимаю, но зачем в LLVM вообще для  if (*--p == '.') приплетают векторные инструкции вместо примитивной инструкции CMP.
Ответить | Правка | Наверх | Cообщить модератору
Ответы: #26, #31

26. Сообщение от Аноньимъ (ok), 16-Июл-23, 13:30   +2 +/
Они цикл разворачивают, как я понимаю.
Но многое остаётся загадкой да.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #24

27. Сообщение от Аноним (27), 16-Июл-23, 13:41   +7 +/
Ты пропукал свой комментарий, это прогресс я считаю.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #1

29. Сообщение от Аноним (29), 16-Июл-23, 14:45   +17 +/
Так потратили человекочасы одна группа и один раз, а 1.3% прироста теперь будут всегда и для всех.

Вполне себе выигрыш.

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #9 Ответы: #51

30. Сообщение от Аноним (29), 16-Июл-23, 14:48   +4 +/
Это было на самых первых реализациях от интела. Этого уже нет, если укладывается в теплопакет - частота будет та же.

Так и AVX-512 за троттлинг и снижение частоты гнобили, а *внезапно* это оказалось просто легкой болячкой первых интеловских реализаций, вон в Zen 4 никакого снижения частоты от AVX-512 не происходит. И теперь даже memcpy() с ним оказывается эффективнее воткнуть во всех программы, а то что когда-то Линус говорил против этого - оказалось частью истории и неактуальной частностью. Прошло время, ошибки изучили, сделали нормально. Вон, ознакомьтесь с бенчмарками phoronix с/без AVX2 и AVX-512.

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #7 Ответы: #36, #46, #69

31. Сообщение от Аноним (65), 16-Июл-23, 14:51   +1 +/
Внезапно, это прямое назначение векторных инструкций - выполнить одну операцию над кучей данных. А "примитивной" CMP вы будете долго и нудно ковырять эту строку по одному символу за раз.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #24 Ответы: #39

32. Сообщение от Аноним (65), 16-Июл-23, 14:53   +3 +/
> А они учитывают то что многие процессоры тут же включают троттлинг от таких инструкций?

А многие не включают.

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #2 Ответы: #33

33. Сообщение от Аноним (2), 16-Июл-23, 15:10   +/
Вроде, это каждый раз повторяется. Добавляют новые SIMD, не вывозят по тепловыделению, и пока литография не обновится, все процессоры идут бракованные. И не предъявишь ведь как АМД -- ничего не падает.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #32 Ответы: #34

34. Сообщение от Аноним (2), 16-Июл-23, 15:14   +/
У АМД была похожая история с совместными блоками -- вроде, ядер много, а используется только половина и остальные стоят ждут. Ещё что-то там с шиной межъядерного взаимодействия было. Всё лучше чем сегфолты, конечно. Но старое железо никуда не девается ведь.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #33 Ответы: #38, #49

35. Сообщение от YM2608 (?), 16-Июл-23, 15:21   –1 +/
лучше уже на ассемблере программировать, чем этой фигней заниматься
Ответить | Правка | Наверх | Cообщить модератору
Ответы: #37

36. Сообщение от Аноньимъ (ok), 16-Июл-23, 15:27   +1 +/
В процессорах нет инструкций для копирования произвольных кусков памяти?
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #30 Ответы: #57, #81

37. Сообщение от Аноним (27), 16-Июл-23, 15:33   +/
Так программируй, кто тебе мешает? Покеж заодно что ты там уже наваял.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #35 Ответы: #40

38. Сообщение от Аноним (27), 16-Июл-23, 15:35   +/
Всё лучше чем проц сгорает если снять кулер.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #34 Ответы: #47

39. Сообщение от Аноньимъ (ok), 16-Июл-23, 15:40   +/
Стоит ли вообще такое делать без явного указания программиста что именно так нужно делать большой вопрос.

У меня есть много вопросов по конкретному примеру вообще.

Как приведенный в новости код векторизировать если неизвестен размер массива?

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

Нормальная система такого позволять не должна.

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #31 Ответы: #44, #50, #67

40. Сообщение от YM2608 (?), 16-Июл-23, 15:43   +/
а я на ассемблере не умею
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #37 Ответы: #43

41. Сообщение от Аноним (41), 16-Июл-23, 15:48   +2 +/
Пользуйтесь процессорами AMD, у них частоты одинаковые при любых инструкциях.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #15 Ответы: #42

42. Сообщение от Аноним (2), 16-Июл-23, 15:54   –1 +/
А как же быть с тем, что процессоры АМД не показывают реальную температуру на датчиках? Из-за того, что они склеены из различной отбраковки, результаты могут довольно разниться. У них намного жёстче ограничения по рабочим температурам, как из-за материала затворов, так и из-за клея.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #41 Ответы: #73

43. Сообщение от Аноним (2), 16-Июл-23, 16:12   +/
А что там уметь? Самое время научиться, можешь начать с игр типа https://store.steampowered.com/app/716490/EXAPUNKS/
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #40

44. Сообщение от Tim (??), 16-Июл-23, 16:41   +/
Конкретно в этом примере не весь цикл, а только оператор сравнения. Фактически выбросили две бессмысленные операции.

Реализовать можно по-разному. Например три цикла, где первый побайтовый до границы кэш линии, затем векторный, и финал опять побайтовый. Или другой вариант – маскировать load/store.

AVX это не сопроцессор. Компилятор может выдать REP MOVSB или использовать быстрые инструкции, благо они все выполняются последовательно и не создают проблем при переключении задач.

Проблемы начнутся если для копирования будут использовать DMA каналы, так как их мало и работают асинхронно.

PS. Процессоры, которые кичатся своей RISC-овостью, могут load/store только с машинными словами, и только выровненными по границе слова.

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #39 Ответы: #48, #53

45. Сообщение от uis (??), 16-Июл-23, 16:51   +/
> if (*--p == '.') *p = '_';

Ауч, кэшу больно

Ответить | Правка | Наверх | Cообщить модератору
Ответы: #60, #66

46. Сообщение от Аноним (46), 16-Июл-23, 16:51   +1 +/
Ага, такой лёгкой болячкой оказалось, что вообще нафиг выпилили из новых процессоров.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #30 Ответы: #56, #65

47. Сообщение от Аноним (46), 16-Июл-23, 16:54   +2 +/
Тут, конечно, пара человек с сокетом  462 найдётся, но в основном все обновились уже.
А то так можно вспомнить и «всё лучше, чем когда математику неправильно считает».
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #38

48. Сообщение от uis (??), 16-Июл-23, 16:55   +/
> PS. Процессоры, которые кичатся своей RISC-овостью, могут load/store только с машинными словами, и только выровненными по границе слова.

Не совсем. Хотя у POWER VMX очень интересно сделано: оно игнорирует последние n бит, всегда загружает выровненное слово и отказывается выдавать ошибку. Как результат - программная невыровненная загрузка выполняется в 3 инструкции.

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #44

49. Сообщение от An2 (?), 16-Июл-23, 17:03   +/
Они тогда решили сэкономить на блоках для плавающей запятой (1 на 2 ядра). В бульдозерах, вроде. Напрасно.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #34 Ответы: #70

50. Сообщение от An2 (?), 16-Июл-23, 17:08   +/
> Стоит ли вообще такое делать без явного указания программиста что именно так нужно делать большой вопрос.

Но откуда программисту знать, на каком процессоре код будет выполняться? Можно ли ему за раз 128 бит проверять или 256, а может и все 512?

Если оптимизатор не накладывает ограничений на кратность размера буфера - просто замечательно.

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #39 Ответы: #52

51. Сообщение от Аноним (51), 16-Июл-23, 17:08   +/
для всех, кто ЭТО использует. А кто будет использовать прилепленныетсбоку васяноподелки ради 1% производительности?
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #29 Ответы: #58, #72

52. Сообщение от Аноньимъ (ok), 16-Июл-23, 17:21   +/
>Но откуда программисту знать, на каком процессоре код будет выполняться?

Да просто не от куда, загадка!
Не говоря уже о том, что никогда никакой код и не пытается даже узнать это в рантайме прямо, это ведь невозможно.
Только компилятор может знать, или не может.
Кстати, откуда компилятору знать на каком процессоре будет код выполняться если программист этого не знает?

>Можно ли ему за раз 128 бит проверять или 256, а может и все 512?

Программисту ненужно знать сколько там бит и какие конкретно инструкции, достаточно сказать что это должна быть SIMD операция.
Обычно делается это через спец векторные примитивы.

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #50 Ответы: #54

53. Сообщение от Аноньимъ (ok), 16-Июл-23, 17:23   +/
> Реализовать можно по-разному. Например три цикла, где первый побайтовый до границы кэш
> линии, затем векторный, и финал опять побайтовый. Или другой вариант –
> маскировать load/store.

Для этого компилятору нужно знать размер массива.


Ответить | Правка | Наверх | Cообщить модератору
Родитель: #44

54. Сообщение от An2 (?), 16-Июл-23, 17:41   +/
> Не говоря уже о том, что никогда никакой код и не пытается даже узнать это в рантайме прямо, это ведь невозможно.

Очень даже возможно. Самый известный проигрыватель mplayer при запуске как раз об этом и сообщает: "Compiled with runtime CPU detection". И, самое главное, использует обнаруженные преимущества.

> Кстати, откуда компилятору знать на каком процессоре будет код выполняться если программист этого не знает?

Об этом ему может сообщить сборщик программы, который, в общем случае, не программист.

> это должна быть SIMD операция

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

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #52 Ответы: #62

55. Сообщение от Аноним (55), 16-Июл-23, 18:00   +2 +/
Кто Генту хаял из-за ничтожных 3% прироста производительности? Наука - понимать надо.
Ответить | Правка | Наверх | Cообщить модератору
Ответы: #61

56. Сообщение от анонимус (??), 16-Июл-23, 18:10   +1 +/
Выпилили чтобы зеоны продавать, в них-то avx512 остался.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #46

57. Сообщение от Oe (?), 16-Июл-23, 18:15   +/
Нету, проще каждое поколение наращивать количество ядер и продавать. Ой, уже давно уперлись в потребление в пол-киловатта, поэтому чтобы добавить еще больше ядер, половину ядер урезают по частотам под соусом "энергоэффективности и экологии", так можно еще пару лет делать новые "инновационные" поколения процессоров и впаривать хомякам, не внося абсолютно никаких изменений в архитектуру и техпроцесс.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #36 Ответы: #59, #82

58. Сообщение от Аноним (58), 16-Июл-23, 18:17   +4 +/
Например, любой крупный облачный оператор. Да и в целом, сэкономить 1% денег через несложные единоразовые телодвижения — хороший бизнес. Надо брать.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #51

59. Сообщение от Аноньимъ (ok), 16-Июл-23, 18:26   +1 +/
"Прогресс"

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #57

60. Сообщение от Аноньимъ (ok), 16-Июл-23, 18:33   +/
>> if (*--p == '.') *p = '_';
> Ауч, кэшу больно

Меня больше смущает:
> while (p != name);

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #45 Ответы: #75

61. Сообщение от Аноним (61), 16-Июл-23, 18:36   +1 +/
1.3% - это ниже уровня стат. погрешности. Статья лежит не рецензированная. Такое достижение нормальные рецензенты не пропустят.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #55 Ответы: #89

62. Сообщение от Аноньимъ (ok), 16-Июл-23, 18:40   +/
> Когда теперь чуть ли не каждый цикл можно автовекторизировать, то проще уже
> указывать обратное: вот именно тут, пожалуйста, никакой самодеятельности.

Не знаю.
Я думаю это не такой простой вопрос.

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #54

63. Сообщение от Аноним (63), 16-Июл-23, 18:46   +/
Не заставляй афтаров LLVM посыпать себе голову пеплом. Спиды тестируются на O2 в любом случае.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #20

65. Сообщение от Аноним (65), 16-Июл-23, 19:19   +/
Выпилили по совершенно другой причине.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #46 Ответы: #80

66. Сообщение от Аноним (65), 16-Июл-23, 19:30   +1 +/
Процессоры, выпущенные в последние лет 15-20 вполне могут распознать обратную итерацию. И даже итерацию в любую сторону с большим шагом, и даже несколько параллельных итераций. Так что с кешем всё в порядке, не переживайте.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #45

67. Сообщение от Аноним (65), 16-Июл-23, 19:39   +/
> Как приведенный в новости код векторизировать если неизвестен размер массива?

Очевидно, он известен, т.к. p указывает на конец, а name - на начало.

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

Никаких чудес, если в рамках страницы памяти. Да, всякие sanitizer'ы и valgrind будут вонять про выход за границы буфера, но на практике всё будет работать без проблем. Такой подход реально применялся раньше, пока sanitizer'ы не стали модными.

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #39 Ответы: #68

68. Сообщение от Аноньимъ (ok), 16-Июл-23, 20:00   +/
> Очевидно, он известен, т.к. p указывает на конец, а name - на
> начало.

Да, вы правы, я как-то не так этот кот прочитал.

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #67

69. Сообщение от S22 (?), 16-Июл-23, 21:44   +/
В zen4 avx512 выполняется в 2 инструкции так как ширина канала 256. По факту avx512 там не даёт существенных преимуществ над avx2
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #30 Ответы: #71

70. Сообщение от Аноньимъ (ok), 16-Июл-23, 22:08   +3 +/
Работало вообще оно отлично для обычных задач.

Да, на всяких расчётах не очень хорошо тянуло в сравнении, хотя там свои нюансы были.

Мне кажется бульдозеры незаслуженно ругали вообще.

Думаю маркетинг подкачал скорее.

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #49 Ответы: #100

71. Сообщение от анонимус (??), 16-Июл-23, 22:44   +/
Phoronix потестил и смысл очень даже есть: https://www.phoronix.com/review/amd-zen4-avx512
а вот с 512бит шириной канала есть вопросы поскольку штука узкоспециализированная, у интел тоже не дураки чтобы выкинуть поддержку из гражданских моделей, ибо греется сильней и зря занимает полезное место. Можно конечно придумать куда впихнуть, но тут проблема курицы и яйца
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #69 Ответы: #79

72. Сообщение от Я (??), 16-Июл-23, 23:03   +/
для некоторых задач и ускорение на 0.1% это миллионы доларов экономии в год
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #51

73. Сообщение от Я (??), 16-Июл-23, 23:05   +2 +/
какая разница что там на датчиках если процессор не пререгревается и работает нормально без тротлинга?
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #42

74. Сообщение от Tron is Whistling (?), 16-Июл-23, 23:09   +2 +/
Не, я к этим ребятам не зайду. Пример уж слишком весел.

do {
  if (*--p == '.') *p = '_';
} while (p != name);

Если p не байт, а длина (p - start) в байтах не кратна sizeof(*p), будет интересно :D

Ответить | Правка | Наверх | Cообщить модератору
Ответы: #76, #77, #78, #85

75. Сообщение от Tron is Whistling (?), 16-Июл-23, 23:11   +1 +/
Yup. Тоже это усмотрел, ну их нафиг.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #60 Ответы: #95

76. Сообщение от Tron is Whistling (?), 16-Июл-23, 23:13   +1 +/
Да и если p < start - тоже внезапно окажется не менее весело.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #74

77. Сообщение от Tron is Whistling (?), 16-Июл-23, 23:14   +/
Но если до проверки p > start или установки p = start + X догонит каждый второй студент третьего курса аграрного, то вот с кратностью могут быть проблемы.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #74

78. Сообщение от Аноним (65), 17-Июл-23, 02:47   +/
> Если p не байт, а длина (p - start) в байтах не кратна sizeof(*p), будет интересно :D

Это будет означать, что один из указателей не выровнен, что значит UB и косяк программиста. На практике надо явно постараться, чтобы этого добиться.

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #74 Ответы: #84

79. Сообщение от S22 (?), 17-Июл-23, 07:29   +1 +/
Увеличение скорости на 10% против нормативных 2х раз.

Avx512 там добавили для галочки. Кстати, как я понимаю многопоточность не будет работать с avx512 в линуксе, так как регистры не сохраняются при переключении задач?

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #71 Ответы: #83, #99, #103

80. Сообщение от Аноним (46), 17-Июл-23, 07:35   +/
И пр какой же? Только не надо вот про зионы, как выше написали, эти рынки вообще не пересекаются.
В любом случае — это весьма стыдное в репутационном смысле решение. Вот представьте лет 20 назад: а давайте мы уберём SSE из наших пентиумов-3, и оставим его только в зионах! Дико? Дико.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #65 Ответы: #98

81. Сообщение от n00by (ok), 17-Июл-23, 08:02   +2 +/
Есть, начиная с 16-ти разрядных 8086.

rep movs

В какие-то периоды времени она работала медленнее, чем цикл с предвыборкой из кеша (prefetchnta), но давно ускорили.

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #36 Ответы: #90

82. Сообщение от n00by (ok), 17-Июл-23, 08:05   +2 +/
>> В процессорах нет инструкций для копирования произвольных кусков памяти?
> Нету,

Прекратите распространять мракобесие.

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #57

83. Сообщение от анонимус (??), 17-Июл-23, 08:10   +/
> против нормативных 2х раз

uwot

https://www.phoronix.com/review/rocket-lake-avx512
https://www.phoronix.com/review/zen4-avx512-7700x

> как я понимаю многопоточность не будет работать с avx512 в линуксе

Ну да, а HPC для которых всё затевалось на виндосервере работают. Вон Майкл даже на епике потестил и есть сравнение с "настоящим" avx512 на интелах

https://www.phoronix.com/review/amd-epyc-avx512
https://www.phoronix.com/review/intel-sapphirerapids-avx512/

Может посмотреть тесты на железе сперва?

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #79

84. Сообщение от n00by (ok), 17-Июл-23, 08:21   +1 +/
>> Если p не байт, а длина (p - start) в байтах не кратна sizeof(*p), будет интересно :D
> Это будет означать, что один из указателей не выровнен, что значит UB

Он имел ввиду "не кратна размеру операнда SIMD инструкции", но сформулировал ошибочно. А указатели на char всегда "выровнены".

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #78 Ответы: #104, #109

85. Сообщение от n00by (ok), 17-Июл-23, 08:26   +1 +/
Там наверняка отдельных два цикла: один обрабатывает байты пачкой, а второй остаток. Ну и поскольку средняя длина строки меньше размера пачки, оптимизированная часть за пределами синтетических тестов не работает.) Смотрите pdf - в ряде случаев оптимизация приводит к ухудшению результатов тестов.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #74

86. Сообщение от Anonymous1917 (?), 17-Июл-23, 09:18   +1 +/
На больших масштабах это могут быть огромные деньги. К счастью они будут потрачены на рождение и воспитание детей не таких как ты
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #1

87. Сообщение от Аноним (87), 17-Июл-23, 09:33   +/
Для каких-нибудь видеоигр один процент - это целый кадр, если метишь в 120 FPS.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #1 Ответы: #105

88. Сообщение от freehckemail (ok), 17-Июл-23, 10:50   +/
Покуда учёные не создали perpetuum mobile, как бы мы полезность не определили, она всё-таки конечна. )
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #23

89. Сообщение от Аноним (46), 17-Июл-23, 11:02   –1 +/
Вот не надо пытаться показаться умным, не зная значения термина.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #61

90. Сообщение от Аноньимъ (ok), 17-Июл-23, 11:26   +/
> Есть, начиная с 16-ти разрядных 8086.
> rep movs
> В какие-то периоды времени она работала медленнее, чем цикл с предвыборкой из
> кеша (prefetchnta), но давно ускорили.

Зачем тогда avx используют для копирования?

И разве это не просто способ повторения копирования одного слова?

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #81 Ответы: #91, #118

91. Сообщение от n00by (ok), 17-Июл-23, 12:36   +1 +/
>> Есть, начиная с 16-ти разрядных 8086.
>> rep movs
>> В какие-то периоды времени она работала медленнее, чем цикл с предвыборкой из
>> кеша (prefetchnta), но давно ускорили.
> Зачем тогда avx используют для копирования?
> И разве это не просто способ повторения копирования одного слова?

Не знаю, зачем. Может маркетинг, или очередной выигрыш на уровне погрешности измерений.

Вот цитата 64-ia-32-architectures-optimization-manual.pdf

2.6.6 REP String Enhancement

REP prefix in conjunction with MOVS/STOS instruction and a count value in ECX are frequently used to
implement library functions such as memcpy()/memset().
...
Fast string (ECX >= 76: excluding REP MOVSB): the processor implementation provides hardware
optimization by moving as many pieces of data in 16 bytes as possible. The latency of REP string
latency will vary if one of the 16-byte data transfer spans across cache line boundary:
...
In order for REP string to operate in “fast string” mode, previous microarchitectures requires address
alignment. In Intel microarchitecture code name Nehalem, REP string can operate in “fast string”
mode even if address is not aligned to 16 bytes.

Обратите внимание на "аппаратная оптимизация" (hardware optimization).

Проблема со скоростью копирования была во времена Athlon XP и разобрана в http://files.rsdn.ru/23380/AMD_block_prefetch_paper.pdf
Смысл в том, что память читается не побайтно, а кратно размеру линии кэша, и лишнего загрязнения кэша желательно избегать.
В следующем поколении Intel оптимизировали REP MOVSB и она догнала по скорости оптимизированные циклы.

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #90

92. Сообщение от pavlinux (ok), 17-Июл-23, 12:45   +/
Открою секрет, чтоб подсчитать определитель матрицы иль
повернуть тело на 146°, полюбасу нужно перебрать все элементы матрицы.

Ответить | Правка | Наверх | Cообщить модератору

93. Сообщение от pavlinux (ok), 17-Июл-23, 12:48   +/
> Пример оптимизации для Си-кода:
>
>  do {
>   if (*--p == '.') *p = '_';
>  } while (p != name);
> Для операции сравнения штатный оптимизатор LLVM сгенерирует биткод для использования инструкций AVX-2:
>
>  %1 = shufflevector %0, <31, 30, 29, ... , 0>
>  %2 = icmp eq %1, <46, 46, 46, ... , 46>
>  %3 = shufflevector %2, <31, 30, 29, ... , 0>

Cейчас кто-нибудь, вообще, ещё считает такты процессора?
А то ж окажется, что 250 раз cmp + jnz будет быстрее трех SIMD инструкций

Ответить | Правка | Наверх | Cообщить модератору

94. Сообщение от Анонимemail (94), 17-Июл-23, 13:01   +4 +/
Талантливые программисты:

в среднем ускорение составило 2.2%. При тестировании набора SPEC CPU2017 ускорение составило 1.3%.

Патчи к ядру для защиты от очередной дырки в процессоре:

замедление 20..75%, на некоторых задачах до 400%, при применении защиты процессоры иногда взрываются, но, пожалуйста, не волнуйтесь, это только в очень редких случаях, которые хорошо описаны в документации

Ответить | Правка | Наверх | Cообщить модератору

95. Сообщение от pavlinux (ok), 17-Июл-23, 13:37   +2 +/
Только ыксперты опеннета могут закопать 30-летний опыт Free Software  Foundation, Inc. и,
конкретно Jean-loup Gailly.. https://ru.wikipedia.org/wiki/%D0%93%D0%...,_%D0%96%D0%B0%D0%BD-%D0%9B%D1%83

:)


... For example, consider this loop, in C, from the compression/decompression utility gzip,
where name is the base address of a string and p is a pointer into the string:

do {
if (*--p == '.') *p = '_';
} while (p != name);


https://git.savannah.gnu.org/cgit/gzip.git/tree/util.c#n356


/* ========================================================================
* Make a file name legal for file systems not allowing file names with
* multiple dots or starting with a dot (such as MSDOS), by changing
* all dots except the last one into underlines.  A target dependent
* function can be used instead of this simple function by defining the macro
* MAKE_LEGAL_NAME in tailor.h and providing the function in a target
* dependent module.
*/
void
make_simple_name (char *name)
{
    char *p = strrchr(name, '.');
    if (p == NULL) return;
    if (p == name) p++;
    do {
        if (*--p == '.') *p = '_';
    } while (p != name);
}

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #75 Ответы: #97

97. Сообщение от Tron is Whistling (?), 17-Июл-23, 22:00   +/
Тут-то как раз всё нормально. Контекст.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #95

98. Сообщение от Аноним (98), 18-Июл-23, 00:33   +/
Очевидно, потому что малые E-ядра не могут в AVX-512. Скорее всего, тупо не влезло по площади в кремнии и по энергопотреблению, даже если делать в double pumped варианте без добавления новых исполнительных устройств. Регистров больше, более сложный shuffle блок, 64-битный блок векторного умножения.

А если спросите "а как же модели без E-ядер", то ответ тоже очевиден - сегментирование рынка. Да, чтобы брали зионы за конский ценник, кому оно действительно надо.

> В любом случае — это весьма стыдное в репутационном смысле решение. Вот представьте лет 20 назад: а давайте мы уберём SSE из наших пентиумов-3, и оставим его только в зионах! Дико? Дико.

С пробуждением. До недавнего времени в Pentium'ах и Celeron'ах не было AVX. Никакого, только SSE.
Так что ничто не ново под луной.

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #80

99. Сообщение от Аноним (98), 18-Июл-23, 00:35   +/
> Кстати, как я понимаю многопоточность не будет работать с avx512 в линуксе, так как регистры не сохраняются при переключении задач?

Чего только не прочитаешь в комментах.

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #79

100. Сообщение от Аноним (98), 18-Июл-23, 01:02   +/
А вы посмотрите обзоры и сравнения тех времен, и перестанет казаться.

Разделяемый FPU не взлетел потому что, внезапно, программы его активно используют. Напомню, что в случае AMD FPU используется не только для вычислений с плавающей запятой, но и для векторных инструкций. А в Бульдозере, к тому же, использовался сырой процесс, в котором не смогли добиться высоких частот. Вот и получилось, что разделяемый FPU, расчитанный на высокую пропускную способность (throughput) в ущерб задержке (latency), работал на относительно низких частотах.

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #70 Ответы: #101, #102

101. Сообщение от Аноньимъ (ok), 18-Июл-23, 02:39   +/
Смотрел обзоры, видел много некомпетентности.

И успешно использовал эти апушки много много лет вплоть до войны.

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

CPU рендерингом не занимался.

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #100

102. Сообщение от Аноньимъ (ok), 18-Июл-23, 02:48   +/
Первой их апушкой у меня был
AMD A10-5800K
Разгонялся вообще отлично.
При этом был не особо то горячим, хотя я его скальпнул в итоге и на жм прилепил вначале так, а потом крышку на место вернул.

>расчитанный на высокую пропускную способность (throughput)

Там подсистему памяти(или что-то такое) можно и нужно было гнать, не помню уже что у меня там стояло..

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #100 Ответы: #106

103. Сообщение от Staxemail (ok), 18-Июл-23, 07:42   +/
Не туда смотрите. Вот вам в TensorFlow и в два раза прирост: https://www.phoronix.com/review/amd-ryzen7040-avx512/7

При совершенно том же теплопакете. Да, на райзене, потому что на Ice Lake старая реализация, которая так повышала энергопотребление и из-за этого мобильный CPU снижал частоту. Да, вне задач рендеринга и AI двухкратный выигрыш получить сложно, мало что еще параллелится до такой степени, чтобы 512 бит за раз перемалывать. Но когда что-то параллелится - выигрыш на чистом месте вплоть до двухкратного относительно AVX2 без доп. расхода энергии (8 страница).

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #79

104. Сообщение от Tron is Whistling (?), 18-Июл-23, 08:09   +/
А кто сказал, что там char. Из вырванных из контекста строк не видно.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #84 Ответы: #107

105. Сообщение от Аноним (1), 18-Июл-23, 08:10   +/
разве есть какая-то разница 119 и 120 fps ?
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #87

106. Сообщение от n00by (ok), 18-Июл-23, 09:13   +/
"расчитанный на высокую пропускную способность (throughput) в ущерб задержке (latency)" - вот это про архитектуру NetBurst. Те самые "кукурузные гигагерцы" первых Pentium 4, которые проигрывали ноутбучным Pentium 3 с меньшей частотой. Похоже, что эксперт просто прилепил запомнившуюся фразу куда пришлось.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #102 Ответы: #108

107. Сообщение от n00by (ok), 18-Июл-23, 09:25   +/
Видно. Там '_' вместо L'_'.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #104 Ответы: #110

108. Сообщение от Аноним (98), 18-Июл-23, 12:57   +1 +/
Да нет, всё "прилеплено" куда надо. Да, NetBurst был расчитан на высокие частоты, ну так он их и брал. А Бульдозер не смог. И кстати, во времена Бульдозера у Intel уже был прорывной Nehalem и появился легендарный Sandy Bridge, которые рвали его как тузик грелку.

Кстати, если интересно, вот статейка по Бульдозеру:

https://chipsandcheese.com/2023/01/22/bulldozer-amds-crash-m.../
https://chipsandcheese.com/2023/01/24/bulldozer-amds-crash-m.../

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #106 Ответы: #111

109. Сообщение от Аноним (98), 18-Июл-23, 12:59   +/
Я читаю то, что написано, и написано там было совсем не то, что у вас. И сдаётся мне, что автор имел ввиду то, что он написал, а не то, что кажется вам.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #84 Ответы: #113

110. Сообщение от Аноним (98), 18-Июл-23, 13:02   +1 +/
Фантазировать можно в любую сторону. Сравнивать с '_' можно хоть int, хоть double.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #107 Ответы: #112

111. Сообщение от n00by (ok), 19-Июл-23, 09:01   +/
> Да, NetBurst был расчитан на высокие частоты, ну так он их и брал.

Но толку не было, потому она (архитектура NetBurst) и породила мем "кукурузные гигагерцы".

> А Бульдозер не смог.

То есть "расчитанный на высокую пропускную способность (throughput) в ущерб задержке (latency)" не относится.

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #108 Ответы: #114

112. Сообщение от n00by (ok), 19-Июл-23, 09:06   +/
> Фантазировать можно в любую сторону. Сравнивать с '_' можно хоть int, хоть
> double.

Аноним - игнорим.

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #110

113. Сообщение от n00by (ok), 19-Июл-23, 09:09   +/
Мне ничего не кажется - я посмотрел и понял листинг в статье. Проблема с гранулярностью касается размера операнда
%1 = icmp eq %0, <46, 46, 46, ... , 46>
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #109

114. Сообщение от Аноним (98), 19-Июл-23, 11:27   +/
> То есть "расчитанный на высокую пропускную способность (throughput) в ущерб задержке (latency)" не относится.

Относится. Почитайте статьи по ссылкам.

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #111 Ответы: #115

115. Сообщение от n00by (ok), 19-Июл-23, 15:17   +/
Вот сам читай их, подбирай цитаты и подтверждай своё заявление. Мне достаточно курса физики, арифметики, а так же понимания, что такое пропускная способность и частота.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #114 Ответы: #116

116. Сообщение от Аноним (98), 19-Июл-23, 23:04   +/
> Вот сам читай их, подбирай цитаты и подтверждай своё заявление. Мне достаточно курса физики, арифметики...

Всё понятно, удачи с вашим багажом знаний.

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #115 Ответы: #117

117. Сообщение от n00by (ok), 20-Июл-23, 09:18   +/
>> Вот сам читай их, подбирай цитаты и подтверждай своё заявление. Мне достаточно курса физики, арифметики...
> Всё понятно, удачи с вашим багажом знаний.

Бгг, но ведь ты как то живёшь, не понимая индукцию.

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #116

118. Сообщение от Аноним (118), 03-Янв-24, 21:38   +/
Там целая эпопея https://stackoverflow.com/questions/43343231/enhanced-rep-mo...
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #90


Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру