powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / C++ [игнор отключен] [закрыт для гостей] / размер кэша - КАК его максимально использовать?
85 сообщений из 85, показаны все 4 страниц
размер кэша - КАК его максимально использовать?
    #39910255
Фотография полудух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
у разных процов разное кол-во кэша, у corei9 под 20мб (и 10/20 ядер), у i7 - 16mb, у i5 - 12mb
а как именно это в коде использовать, чтобы выжать максимум из этих нескольких дополнительных Mb ?
...
Рейтинг: 0 / 0
размер кэша - КАК его максимально использовать?
    #39910263
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У некоторых компиляторов есть специальные опции подсказывающие для какой платформы идет компиляция. Если твой конкретный процессор есть в списке ключей - хорошо, нет - пишешь сам расширение для компилятора.

https://gcc.gnu.org/onlinedocs/gcc-9.2.0/gcc/Submodel-Options.html
https://clang.llvm.org/docs/CrossCompilation.html#target-triple
...etc
...
Рейтинг: 0 / 0
размер кэша - КАК его максимально использовать?
    #39910327
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[quote полудух#22052434]
а код где? Или опять, теоретически использовать процессор, ядра и кэши.
...
Рейтинг: 0 / 0
размер кэша - КАК его максимально использовать?
    #39910340
Фотография полудух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вопрос скорее общий, чем про какой-то случай...
и я так понимаю, что проц сам порешает, сколько кэша ему надо
т.е. он просто сможет реже сбрасывать старый кэш со структурами и векторами = меньше работы, только и всего
...
Рейтинг: 0 / 0
размер кэша - КАК его максимально использовать?
    #39910351
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1) Из рекомендаций... я помню самая ценная - использовать структуры данных в памяти выровнянные (padded)
на границу кратную 64 бит. Еще были какие-то инструкции компиллера наподобие __builtin_prefetch

2) Стараться делать доступ к памяти максимально локализованным. Вобщем .. читаете адресочек. Потом следующий
за ним рядом e.t.c. Тоесть ... не бомбить по рандомным адресам по всей доступной памяти. Думаю сюда-де до кучи
memory-mapped files. Фильтры Блума. Блочные кеши баз данных.

3) Далее.. просто мысли вслух. Я привел картинку (грубую) с топологией кешей разных уровне для процессора семейства Core i7.



Рискну предположить что если вы локализуете своё приложение на ядрах 0 и 1 и поотстреливаете все процессы-конкуренты
то кеши L2 - будут ваши. Что в общем случае - тоже оптимизация. Плохо или хорошо - обсудите.

Вообще я-бы все таки пошёл от алгоритма а не от абстрактных рекомендаций. Так... если-б они были
то любой программист выкручивал бы ручки кешей на максимум. Всё равно что nice для процесса понизить.
Закончится лагами других процессов. Сеть начнёт лагать там... или диск. Вобщем как от добра искать добро.
...
Рейтинг: 0 / 0
размер кэша - КАК его максимально использовать?
    #39910353
Фотография полудух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton, это ты азы рассказываешь )
только далеко не все...
структуры надо на 64 байт (а не бит), чтобы в cache-line влезали, и чтобы занимали его целиком.
(это справедливо для 64-битных компов, у 32-битных cache-line на 32 байта)
"последовательное считывание массива - самое быстрое, что может быть, и ничего быстрее не предвидится"
это ещё Scott Meyers говорил тут:
YouTube Video
...
Рейтинг: 0 / 0
размер кэша - КАК его максимально использовать?
    #39910358
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
полудух, а ты каких советов ожидал?
...
Рейтинг: 0 / 0
размер кэша - КАК его максимально использовать?
    #39910361
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да согласен насчет 64 байт.
...
Рейтинг: 0 / 0
размер кэша - КАК его максимально использовать?
    #39910366
Фотография полудух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
полудух, а ты каких советов ожидал?

да скорее просто уточнить - за что мы платим при апгрейде камня и как это по-максимуму заюзать...
ну понятно, когда новые ядра появляются (хотя ещё потестить надо - дадут ли они чё),
а вот, например, через +4мб кэша можно что-то ускорить?
...
Рейтинг: 0 / 0
размер кэша - КАК его максимально использовать?
    #39910369
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
полудухчерез +4мб кэша можно что-то ускорить?

Можно запустить на 4 мб больше кода. Не майся дурью, в любой современной операционке тебя
их этого кэша выщемят за мгновение ока.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
размер кэша - КАК его максимально использовать?
    #39910405
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
полудух
mayton
полудух, а ты каких советов ожидал?

да скорее просто уточнить - за что мы платим при апгрейде камня и как это по-максимуму заюзать...
ну понятно, когда новые ядра появляются (хотя ещё потестить надо - дадут ли они чё),
а вот, например, через +4мб кэша можно что-то ускорить?

Последний год ведутся жестокие баттлы Intel-Vs-AMD. Железки отличаются конфигурациями ядер и кешей размерами
и различного рода компоновок.

Но мне кажется там невозможно выбрать лучшую или удачную конфигурацию потому что на одних тестах
AMD показывает лучше перформанс. На других Intel.

Вот мне кажется твой вопрос - надо переформатировать. Ты говоришь об "максимально использовать".
А это неверная постановка. Ты - хочешь утилизации ресурсов. Это как в лекции Шипилева. Утилизация
леса - это устроить пожар в лесу. Максимальная утилизация. Понимаешь да?

Давай может в топик свой алгоритм и мы на него посмотрим под углом кешей.
...
Рейтинг: 0 / 0
размер кэша - КАК его максимально использовать?
    #39910443
Фотография полудух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
да я как раз и смотрю на эту гонку между AMD и Intel-ом
вот у AMD щас Ryzen, а там новые кэши, новые ядра
ну и возникают вопросы к цене...

вот, например, конфигурация:
Ryzen 7 3700X/3800X ( стоит 25 тыр )
Технология изготовления 0.007 микрон
Количество ядер 8
Количество потоков 16
Кэш L1 (для каждого ядра) 32 КБ данные + 32 КБ инструкции
Кэш L2 (для каждого ядра) 512 КБ
Кэш L3 2 x 16 МБ

а вот Intel Core i9-9900K стоит уже под 80к , но при этом имеет в тестах такие же результаты
(кстати, сам Intel имеет "Рекомендуемую цену для клиента" = $488.00 - $499.00 (для партий от 1000 штук))
Технология изготовления 0.014 микрон
Количество ядер 8
Количество потоков 8
Кэш L1 (для каждого ядра) 32 КБ данные + 32 КБ инструкции
Кэш L2 (для каждого ядра) 256 КБ
Кэш L3 16 МБ

т.е. Intel, чтобы догнать новый Ryzen, нужен core i9 за много денег
(а core i7 9700K вообще жёстко сливает на -25%)

так за что платим? Там вся начинка хуже. Не пора ли уже на AMD полностью переходить?
особенно нам, программистам C++, который могут этот процессор напрямую "пальчиками пощупать" и полностью заюзать этот кэш (можем ведь?)...
Раньше то я не был "настолько приближённым", а теперь вот проникся и всерьёз начал задумываться...
Я правда щас говорю не про десктоп, а про серверные конфигурации, а там и процы другие, но всё таки Intel есть Intel и они явно УХУ ели.

зы: Intel, кстати, щас выкатил новый сокет, который вообще никак не совместим со старым и на старую мать новый проц никак не поставить
сами себе могилу копают...
...
Рейтинг: 0 / 0
размер кэша - КАК его максимально использовать?
    #39910446
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да все в порядке. Идет нормальный процесс. Просто Intel слишком долго "починал на лаврах" победителя
а за это время конкуренты подтянулись. Отладили процесс и стали клепать камни не хуже но за меньшие деньги.

Я думаю Интел обязан либо выкатить нечто особо значимое в следующих релизах либо скинуть цены.

P.S. У меня на борту рабочей машинки дома стоит Ryzen-5.
6 ядер по 2 потока. ОС видит 12 логических CPU.
...
Рейтинг: 0 / 0
размер кэша - КАК его максимально использовать?
    #39910454
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
полудухможем ведь?

Не можем. См. выше.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
размер кэша - КАК его максимально использовать?
    #39910457
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Скорее пользу сложно посчитать.

Вот со ссылкой на https://gcc.gnu.org/onlinedocs/gcc/Other-Builtins.html
This function is used to minimize cache-miss latency by moving data into a cache before it is accessed. You can insert calls to __builtin_prefetch into code for which you know addresses of data in memory that is likely to be accessed soon. If the target supports them, data prefetch instructions are generated. If the prefetch is done early enough before the access then the data will be in the cache by the time it is accessed.
...
Рейтинг: 0 / 0
размер кэша - КАК его максимально использовать?
    #39910458
Фотография полудух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
о, тяжёлая артиллерия в ход пошла, стало интересно...

а почему они написали так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
for (i = 0;   i < n;   i++)
{
    a[i] = a[i] + b[i];
    __builtin_prefetch(&a[i + j], 1, 1);
    __builtin_prefetch(&b[i + j], 0, 1);
    /* … */
}


а не так:
Код: plaintext
1.
for (i = 0;   i != n;   ++i)


?
...
Рейтинг: 0 / 0
размер кэша - КАК его максимально использовать?
    #39910460
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Надо смотреть ассемблерный код.

P.S. Я вообще всегда предпочитаю сравнение "меньше" в пользу "не равно". Есть у меня свои критерии надёжности.
...
Рейтинг: 0 / 0
размер кэша - КАК его максимально использовать?
    #39910468
Фотография полудух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Страус топит за то, что != это более generic
...
Рейтинг: 0 / 0
размер кэша - КАК его максимально использовать?
    #39910469
Фотография полудух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну а ++ почему в цикле ставят то слева, то справа
...
Рейтинг: 0 / 0
размер кэша - КАК его максимально использовать?
    #39910470
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Справа - традиционно. Слева - в темплейтах и макросах на случай если цикловая переменная
окажется с перегруженным инкрементом.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
размер кэша - КАК его максимально использовать?
    #39910472
Фотография полудух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
т.е. в обычном for вообще пофигу?

зы: не припомню темплейтов с ++
...
Рейтинг: 0 / 0
размер кэша - КАК его максимально использовать?
    #39910473
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
полудухе припомню темплейтов с ++

Каждый первый итератор.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
размер кэша - КАК его максимально использовать?
    #39910475
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov
Справа - традиционно

особенности архитектуры PDP-11 - постинкремент регистра
...
Рейтинг: 0 / 0
размер кэша - КАК его максимально использовать?
    #39910559
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
полудух
Страус топит за то, что != это более generic

Пускай топит. Он итераторами считает циклы. А у меня в циклах - координаты пикселей экрана.
Или вещественный параметр цикла типа double. Нахера мне его "топка" ?
...
Рейтинг: 0 / 0
размер кэша - КАК его максимально использовать?
    #39910653
Фотография полудух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Надо смотреть ассемблерный код.

мы уже как-то пытались...
...
Рейтинг: 0 / 0
размер кэша - КАК его максимально использовать?
    #39910655
Фотография полудух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
... тута ... в итоге пришли к тому, что asm знают 2.5 человека, и те предпочитают смотреть в сырцы...
...
Рейтинг: 0 / 0
размер кэша - КАК его максимально использовать?
    #39910662
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я тебе там про Cortex написал. Видел да?

Так какой прикажешь ассемблер учить?
...
Рейтинг: 0 / 0
размер кэша - КАК его максимально использовать?
    #39910667
Фотография полудух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
но здесь же тебе не мешает Cortex "смотреть ассемблерный код"
...
Рейтинг: 0 / 0
размер кэша - КАК его максимально использовать?
    #39910669
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мы с тобой по разному помимаем пользу от реверс инжиниринга.
...
Рейтинг: 0 / 0
размер кэша - КАК его максимально использовать?
    #39910678
Фотография полудух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а это возможно? там просто поток инструкций, и польза одна - понять, ЧТО именно будет "хавать" процессор
...
Рейтинг: 0 / 0
размер кэша - КАК его максимально использовать?
    #39910700
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
полудух,
Имеется ввиду польза в написании программного кода.
Так кода нет, то и польза вопроса нулевая.
Просто изучаем железо и архитектуру процессоров.
авторВы не можете написать программу так, чтобы она случайно заиспользовала не весь кеш и пострадала от этого.
+1
...
Рейтинг: 0 / 0
размер кэша - КАК его максимально использовать?
    #39910724
Фотография полудух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
Так кода нет, то и польза вопроса нулевая.

чево
...
Рейтинг: 0 / 0
размер кэша - КАК его максимально использовать?
    #39910728
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
полудух,
Тут был пост интересный. С кодом по ссылке.
Глюки. Не вижу его.
Забей.
...
Рейтинг: 0 / 0
размер кэша - КАК его максимально использовать?
    #39910740
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хм... странно. Мне тоже утром показалось что кто-то писал развёрнутый пост по кешам.
...
Рейтинг: 0 / 0
размер кэша - КАК его максимально использовать?
    #39910743
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тут много основ и ссылок на более подробные статьи.
https://stackoverflow.com/questions/16699247/what-is-a-cache-friendly-code
...
Рейтинг: 0 / 0
размер кэша - КАК его максимально использовать?
    #39910744
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly Moskovsky, спасибо большое.

Эх некому занятся систематизацией знаний или написанием FAQ по тем вопросам которые уже здесь обсуждались.
...
Рейтинг: 0 / 0
размер кэша - КАК его максимально использовать?
    #39910753
Фотография полудух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а вот если у меня есть 10 векторов с данными по 10кб каждый...
и в каждом цикле используется 1-2-3 из них, но разные
и есть всяких других данных гигабайты, из которых в каждом цикле собираются небольшие строки в несколько кб, включая те 1-2-3 вектора...
могу ли я эти 100кб векторов принудительно запихнуть в L3, например, как гарантированно постоянно используемые?
или это нецелесообразный про*б кэша?
или это сделает сам проц/компилятор?
...
Рейтинг: 0 / 0
размер кэша - КАК его максимально использовать?
    #39910755
Фотография полудух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
полагаю, он сам их положит куда надо, как часто используемые (и наверное даже в L2/L1 частично)
...
Рейтинг: 0 / 0
размер кэша - КАК его максимально использовать?
    #39910765
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
полудухмогу ли я эти 100кб векторов *принудительно* запихнуть в L3, например, как гарантированно
постоянно используемые?

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

Повторюсь: для максимального использования кэша надо в первую и главную очередь
пристрелить всех конкурентов и получить процессор в монопольное распоряжение.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
размер кэша - КАК его максимально использовать?
    #39910782
Фотография полудух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov
Повторюсь: для максимального использования кэша надо в первую и главную очередь пристрелить всех конкурентов и получить процессор в монопольное распоряжение.

это ты так с false sharing борешься?
...
Рейтинг: 0 / 0
размер кэша - КАК его максимально использовать?
    #39910795
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
полудух
а вот если у меня есть 10 векторов с данными по 10кб каждый...
и в каждом цикле используется 1-2-3 из них, но разные
и есть всяких других данных гигабайты, из которых в каждом цикле собираются небольшие строки в несколько кб, включая те 1-2-3 вектора...
могу ли я эти 100кб векторов принудительно запихнуть в L3, например, как гарантированно постоянно используемые?
или это нецелесообразный про*б кэша?
или это сделает сам проц/компилятор?

Компиллятор вряд-ли сделает тут что-то полезное. Все такие это больше в плоскости рантайма происходит.
Подумай вот над следующим. Я буду оперировать терминологией Linux. Мне так удобнее.
0) Допустим у тебя есть Intel Core i7 с профилем железа как я привел выше на картинке.
1) Для конфигурации init.d и всех сервисов которые запускаются при старте мы используя taskset
(или подобный функционал) ты защёлкиваешь affinity на ядрe Core=0. Графическое окружение и все офисные
приложения также.
2) После этого согласно таск-менеджеру все системные процессы висят на Core-0.
3) Все твои пользовательские процессы запускаешь с affinity=1,2,3
Таким образом кеши L1/L2 для трех ядер будут твои. А для L3 будет необходимость (увы)
частично шарить ресурсы ОС в 3-м слое L3.

Ссылки по теме.
http://man7.org/linux/man-pages/man1/taskset.1.html
https://stackoverflow.com/questions/7759948/set-affinity-with-start-affinity-command-on-windows-7
...
Рейтинг: 0 / 0
размер кэша - КАК его максимально использовать?
    #39911050
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нарисовал такую сравнительную шпаргалку по размерам регистров общего назначения, кеш линиям
а также сетевой пакет (MTU) и единица операции различных подсистем I/O.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
00 (byte)

00 01 (short/word)

00 01 02 03 (int/dword, IPv4, 32bit)

00 01 02 03 04 05 06 07 (long, double, 64bit, MMX register)

00 01 02 03 04 05 06 07 : 08 09 0A 0B 0C 0D 0E 0F (IPv6, MD5, 128 bit, XMM/SSE register)

00 01 02 03 04 05 06 07 : 08 09 0A 0B 0C 0D 0E 0F (AVX register, 256 bit)
10 11 12 13 14 15 16 17 : 18 19 1A 1B 1C 1D 1E 1F

Single cache line (64 bytes, 512bit)
-----------------
$ getconf LEVEL1_DCACHE_LINESIZE = 64 (AMD Ryzen-5/Linux 5.0.0)

00 01 02 03 04 05 06 07 : 08 09 0A 0B 0C 0D 0E 0F
10 11 12 13 14 15 16 17 : 18 19 1A 1B 1C 1D 1E 1F
20 21 22 23 24 25 26 27 : 28 29 2A 2B 2C 2D 2E 2F
30 31 32 33 34 35 36 37 : 38 39 3A 3B 3C 3D 3E 3F

Network MTU (1500 bytes)
------------------------
?

I/O, Single page (512 bytes, 1K, 4K (database block, page))
-----------------------------------------------------------
$ getconf PAGESIZE = 4096 (AMD Ryzen-5/Linux 5.0.0)

?
...
Рейтинг: 0 / 0
размер кэша - КАК его максимально использовать?
    #39911054
bk0010
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Главное забыли: размер страницы (2Кб)
...
Рейтинг: 0 / 0
размер кэша - КАК его максимально использовать?
    #39911056
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bk0010
Главное забыли: размер страницы (2Кб)

На интеле 4КБ или 4МБ.
...
Рейтинг: 0 / 0
размер кэша - КАК его максимально использовать?
    #39911057
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хороший вопрос. Каким API мы можем посмотреть этот т.н. размер страницы?

Всегда ли это одно и тоже понятие или может быть их несколько для одной ОС ?
...
Рейтинг: 0 / 0
размер кэша - КАК его максимально использовать?
    #39911058
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Размер страницы задается при выделении памяти (параметром в mmap).
По умолчанию 4КБ (почти на всех архитектурах со страничной адресацией).
...
Рейтинг: 0 / 0
размер кэша - КАК его максимально использовать?
    #39911060
Фотография полудух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Каким API мы можем посмотреть этот т.н. размер страницы?

getconf PAGE_SIZE
getconf PAGESIZE
...
Рейтинг: 0 / 0
размер кэша - КАК его максимально использовать?
    #39911061
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
полудух,

У меня - 4096.

В рамках сбора статистики. Коллеги. Дайте сведенья что у вас и почем. Кеш-линии архитектурно тоже разные.
От 32 до 128 байт. Но умные статьи сообщают что популярным являет собой размер 64 байт. Подозреваю что
32 это что-то ну очень-очень старое.
...
Рейтинг: 0 / 0
размер кэша - КАК его максимально использовать?
    #39911069
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Хороший вопрос. Каким API мы можем посмотреть этот т.н. размер страницы?
Всегда ли это одно и тоже понятие или может быть их несколько для одной ОС ?

для винды -
GetSystemInfo
GetLargePageMinimum

одновременно могут использоваться разные размеры страниц
...
Рейтинг: 0 / 0
размер кэша - КАК его максимально использовать?
    #39911071
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ребята-виндузятники. Поделитесь цифрами plz.
...
Рейтинг: 0 / 0
размер кэша - КАК его максимально использовать?
    #39911075
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
размер кэша - КАК его максимально использовать?
    #39911076
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MTU - насколько я понимаю вообще не локальное свойство а свойство конкретной сети.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
$ ping -M do -s 8972 localhost
PING localhost (127.0.0.1) 8972(9000) bytes of data.
8980 bytes from localhost (127.0.0.1): icmp_seq=1 ttl=64 time=0.042 ms
8980 bytes from localhost (127.0.0.1): icmp_seq=2 ttl=64 time=0.043 ms
8980 bytes from localhost (127.0.0.1): icmp_seq=3 ttl=64 time=0.051 ms
8980 bytes from localhost (127.0.0.1): icmp_seq=4 ttl=64 time=0.039 ms
8980 bytes from localhost (127.0.0.1): icmp_seq=5 ttl=64 time=0.039 ms

$ ping -M do -s 8972 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 8972(9000) bytes of data.
ping: local error: Message too long, mtu=1500
ping: local error: Message too long, mtu=1500
...
Рейтинг: 0 / 0
размер кэша - КАК его максимально использовать?
    #39911084
bk0010
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly Moskovsky
bk0010
Главное забыли: размер страницы (2Кб)

На интеле 4КБ или 4МБ.
Прошу прощения, со страницей в Informix перепутал, видимо ( It is platform specific whether the page size is 2 KiB (Solaris, AIX, HP-UX, Linux) or 4 KiB (Windows, Mac OS X).)
...
Рейтинг: 0 / 0
размер кэша - КАК его максимально использовать?
    #39911148
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
32 это что-то ну очень-очень старое.
"Очень-очень старое" это 16-байтовая кэш-строка i486 (первый процессор Intel с интегрированным на кристалл кэшем).
...
Рейтинг: 0 / 0
размер кэша - КАК его максимально использовать?
    #39911178
Фотография полудух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в 8086 было 6 байт:
авторОбъём очереди команд: 6 байт (кэш-буфер команд)
...
Рейтинг: 0 / 0
размер кэша - КАК его максимально использовать?
    #39911179
Фотография полудух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ulrich Drepper говорил, что если бы не кеш-память, сегодняшние процессоры не сильно бы отличались от процессоров 80х...
...
Рейтинг: 0 / 0
размер кэша - КАК его максимально использовать?
    #39911180
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это было-бы прекрасно. Я-бы сидел и кодил под свой Z80.
...
Рейтинг: 0 / 0
размер кэша - КАК его максимально использовать?
    #39911189
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
полудух
в 8086 было 6 байт:авторОбъём очереди команд: 6 байт (кэш-буфер команд)
Это не кэш. А буфер предвыборки и сейчас никуда не делся - конвейер надо "кормить".
...
Рейтинг: 0 / 0
размер кэша - КАК его максимально использовать?
    #39911190
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И предсказывать, куда свернёт переход по JZ/JA...e.t.c.
...
Рейтинг: 0 / 0
размер кэша - КАК его максимально использовать?
    #39912199
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Данные посты одного мембера были удалены технически т.к. была закрыта учётка. Но контент мне понравился и
я их восстанавливаю из удалённых.

полудуху разных процов разное кол-во кэша, у corei9 под 20мб (и 10/20 ядер), у i7 - 16mb, у i5 - 12mb
а как именно это в коде использовать, чтобы выжать максимум из этих нескольких дополнительных Mb ?


fintank_ruНикак.

Размер кеша вам не важен - он всегда будет полезно занят вашей программой весь, сколько бы его ни было.
Вы не можете написать программу так, чтобы она случайно заиспользовала не весь кеш и пострадала от этого.
Разве что вы знаете схему трансляции адресов оперативы в номер-кеш линии и всегда ходите по таким адресам, что они все летят в одну кеш-линию, но это надо умудриться.
Проц всегда будет использовать весь кеш.

Важно другое: что единицей обмена с памятью является кеш-линия (упрощённое понимание, но на 90% практически годное)
То есть, проц не может прочитать из ОЗУ 1 байт или 8 байт - только всю кеш-линию.
Отсюда главная мудрость: "раз уж приехало, то использовать".
То есть, если вам из ОЗУ в кеш подвезли 64 байта, потратив 200 тактов, то все эти 64 байта должны быть вам полезны прямо сейчас.
Не надо использовать 8 байт, а потом трогать такой адрес в памяти, который за мегабайт от него.
Надо располагать данные (и код) так, чтобы максимальное количество из загруженной кеш-линии сразу же использовалось.
Идеальный пример: эти 64 байта хранят 8 64-битных чисел, которые вам надо перемножить.
Запись - аналогично.
Плюс межпроцессные коммуникации - если 2 процессора полезли менять память по близким адресам (между которыми меньше 64 байт), то вероятно они трогают одну кеш-линию и будут тратить время на синхронизацию между собой. Нельзя просто так взять и записать из двух разных процов в одно место оперативы. Или нельзя из одного проца прочитать адрес в ОЗУ, который был загружен в кеш другого проца и там изменён.

Представьте что вы хотите купить батон, но все магазины продают только ящик батонов за раз.
Вы купили ящик, сожрали один батон, остальное протухло и вы выкинули.
Рациональнее было собрать деньги со всех соседей и купленный ящик распределить между ними (ещё взять бабло за услугу доставки ящика с них).

В общем, это единственное, что надо знать про кеш - что обмен с реальной ОЗУ - целыми кеш-линиями.
Если вы читаете по 1 байту с интервалом 1 килобайт, значит шина памяти забита на 98.4% тем, что вам не надо.
Дороги заняты перевозкой батонов, которые никто не жрёт.

Ещё хорошо отделять читающие потоки данных от пишущих.
Не надо в кеш-линию укладывать 7 лонгов которые надо умножить, а 8-й использовать для хранения результата.
Смешивать чтение и запись в одной кеш-линии почему-то плохо, не помню почему.
Ну например потому, что не надо другим процессорам парить мозг по поводу того, что кеш-линия внезапно поменялась, хотя там 90% данных только для чтения.
Короче буфер с исходными данными отдельно от буфера для результатов.

Можно заценить на ютубе лекции С. Майерса или Г. Саттера на эту тему. Там много всяких таких приколов про межпроцессное взаимодействие, false sharing - когда процы друг другу мешают и т.п.
...
Рейтинг: 0 / 0
размер кэша - КАК его максимально использовать?
    #39912200
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fintank_ruЕсть ещё такое понятие - cache oblivious.
Это такое прилагательное.
Означает "что-то, что в курсе про кеш и делает из этого профит, но плевать хотело на конкретные параметры кеша".
Хотя прямой перевод на русский звучал бы как "не видящий кеш", как будто что-то не оптимизированное.
Слово oblivious буржуи заюзали для той части смысла, которая про "плевать хотело на параметры", а не на сам кеш.
Например: https://en.wikipedia.org/wiki/Cache-oblivious_algorithm
https://en.wikipedia.org/wiki/Van_Emde_Boas_tree - как уложить бинарное дерево так, чтобы от появления кеша она ощущала профит.
Имеет смысл думать в таком стиле, а не про конкретные параметры кеша.
Вкратце - это такие алгоритмы и структуры данных, которые эксплуатируют принцип "скорее всего батоны будут не по одному, а в ящиках и один ящик везти дорого".
...
Рейтинг: 0 / 0
размер кэша - КАК его максимально использовать?
    #39912202
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovНе майся дурью, в любой современной операционке тебя
их этого кэша выщемят за мгновение ока.

fintank_ruНе за мгновение ока.
Порядок числа переключений задач в OS обычно в районе 100 с пиками в 1000 в секунду.
Системный таймер, который пинает шедулер ("работай ленивая скотина!") пинается с частотой 250...1000 гц.
Не на каждое такое прерывание происходит переключение задач, часто переключение не нужно.
А иногда переключение делается чаще, если процессу пришли данные из сети или из диска или чё-то такое ещё.
На среднем веб-сервере народ мерял - в районе 100 раз в секунду.
Софтине, которая никакое IO особо не юзает и которая просто чё-то считает в памяти и которая почти одна такая на сервере будут подолгу давать работать.
Но даже при 200 раз в секунду и 3 гигагерцах вам доступно непрерывно 15 млн тактов.
Это можно 75 тысяч раз успеть сходить в ОЗУ промахнувшись мимо кеша и закешировав что-то (поход в ОЗУ считаю = 200 тактов).
И овердофига раз сходить в кеш.
Так что нифига не мгновение ока, а целая вечность - можно успеть много раз поюзать кеш.
...
Рейтинг: 0 / 0
размер кэша - КАК его максимально использовать?
    #39912213
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Оптимист этот "закрытый".
Память тактируется на сильно других частотах и доступ в память - десятки и даже сотни наносекунд. Единицы наносекунд - в некоторых частных случаях.
Цикл планирования, опять-таки, ближе к двум миллисекундам, а не к двадцати.
Команды, опять-таки, далеко не все распараллеливаются и далеко не все исполняются за такт.
Ну и самое главное: единица планирования - нить (thread), а не процесс. Если у вас многопоточное приложение - можно получить конкуренцию за кэши внутри собственного приложения.
Резюмируя: если у вас нет возможности монопольно использовать процессор не надо пытаться делать "суперглобальные" оптимизации. Но это уже было сказано.
Если вы работаете в виртуализированной среде - монополии у вас точно нет. А это - вполне частый (сегодня) сценарий.
...
Рейтинг: 0 / 0
размер кэша - КАК его максимально использовать?
    #39912779
Фотография полудух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fintank_ru
Не надо в кеш-линию укладывать 7 лонгов которые надо умножить, а 8-й использовать для хранения результата.

а как я это могу контролировать?
это в смысле в одну структуру не надо пихать result?
а где мне его держать тогда?
...
Рейтинг: 0 / 0
размер кэша - КАК его максимально использовать?
    #39912780
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
полудух
fintank_ru
Не надо в кеш-линию укладывать 7 лонгов которые надо умножить, а 8-й использовать для хранения результата.

а как я это могу контролировать?
это в смысле в одну структуру не надо пихать result?
а где мне его держать тогда?

Можно попробовать использовать aligned_alloc() и указать в качестве кратного - 8 байтов.

Вот тут пишут.
https://en.cppreference.com/w/c/memory/aligned_alloc
...
Рейтинг: 0 / 0
размер кэша - КАК его максимально использовать?
    #39912992
madb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
полудух
fintank_ru
Не надо в кеш-линию укладывать 7 лонгов которые надо умножить, а 8-й использовать для хранения результата.

а как я это могу контролировать?
это в смысле в одну структуру не надо пихать result?
а где мне его держать тогда?

У вас же C++: полный контроль над тем, как в адресом пространстве процесса будут лежать данные, к которым вы обращаетесь.
Располагайте как угодно.
Если кусок данных размером 64 байта начинается с границы 64 байт, то он будет лежать в кеш-линии целиком - вы же понимаете.
...
Рейтинг: 0 / 0
размер кэша - КАК его максимально использовать?
    #39913063
Фотография полудух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
madb
полный контроль

ещё скажите, что адреса им тоже я раздаю
и где что в кэше лежит - тоже НЕ я решаю
madb
Располагайте как угодно.

"как угодно" нельзя, ибо:
fintank_ru
Не надо в кеш-линию укладывать 7 лонгов, которые надо умножить, а 8-й использовать для хранения результата.
...
Рейтинг: 0 / 0
размер кэша - КАК его максимально использовать?
    #39913107
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
полудух
ещё скажите, что адреса им тоже я раздаю
Вам и не надо. Достаточно помнить, что сегменты процесса (код, стэки, данные) выровнены на страницу (4096 байт и более).
Этого достаточно, чтобы выравнивание на 64 байта работало так, как вам хочется.и где что в кэше лежит - тоже НЕ я решаюНе занимайте глобальными супероптимизациями.
...
Рейтинг: 0 / 0
размер кэша - КАК его максимально использовать?
    #39913216
Фотография полудух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
да не очень то и хотелось.
...
Рейтинг: 0 / 0
размер кэша - КАК его максимально использовать?
    #39913309
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
полудух
да не очень то и хотелось.
ну и ладно
...
Рейтинг: 0 / 0
размер кэша - КАК его максимально использовать?
    #39913321
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропил
полудух
да не очень то и хотелось.
ну и ладно

На кеш почти нельзя придумать объективный тест.

Вот анти-тест придумать легко.

Одна из задач над которой я думал в процессе https://www.sql.ru/forum/1173809-1/tyapnichnyy-benchmark-cpu-part-1
это был бенчмарк памяти+кеша. Ноя так и не придумал объективную постановку. Тоесть такую которая хотя-бы
была непохожа на Biosmemory test или на MemTest.

Вобщем я искал нечто прикладное. Лежащее на рубеже языков и железа. Но так и не придумал.
...
Рейтинг: 0 / 0
размер кэша - КАК его максимально использовать?
    #39913331
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кеш понятие очень относительное

Кроме кеша есть еще блоки процессора отвечающие за работу с памятью.

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

IMHO

Basil A. SidorovРезюмируя: если у вас нет возможности монопольно использовать процессор не надо пытаться делать "суперглобальные" оптимизации. Но это уже было сказано.
Если вы работаете в виртуализированной среде - монополии у вас точно нет. А это - вполне частый (сегодня) сценарий.

+++

Что бы понять некоректность вопроса в заголовки темы, достаточно привести паралелль с жестким диском.
"В компьтере жесткий диск 5 TB, а мое приложение занимает только 100 Kb, как мне написать приложение. что бы его максимально использовать"

проблемы "КАК его максимально использовать?" нет. Т.к. наплодить мусор и забить им процессор - много ума не нужно

Но практически как любой ресурс, чем меньше его приложение потребляет, тем в общем-то оно (и система в целом) будет быстрее работать.
...
Рейтинг: 0 / 0
размер кэша - КАК его максимально использовать?
    #39913341
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как альтернативный топик - я предлагаю также поднять
вопрос

что внутри ВАШЕГО бинарника
...
Рейтинг: 0 / 0
размер кэша - КАК его максимально использовать?
    #39913396
Фотография полудух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsev
Что бы понять некоректность вопроса в заголовки темы, достаточно привести паралелль с жестким диском.
"В компьтере жесткий диск 5 TB, а мое приложение занимает только 100 Kb, как мне написать приложение. что бы его максимально использовать"

это не параллель, а перпендикуляр
в случае с кэшем ситуация будет полярно иной:
кэш = 8мб, а приложение = 8 TB

и если в вашем примере диск это кэш (на 5 TB
),
то там можно виртуалку поднять, например...
или супер-секретные шифры взламывать...
или в пентагон вломиться...
на крайняк - дом, хозяйство, БИЗНЕС построить
А излишки - за рубёж продавать
...
Рейтинг: 0 / 0
размер кэша - КАК его максимально использовать?
    #39913460
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
полудух,
А на первую часть его поста почему не ответил?)
Профит какой от твоего кеша?
Абстрактная производительность процессора в попугаях?
...
Рейтинг: 0 / 0
размер кэша - КАК его максимально использовать?
    #39913554
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
Профит какой от твоего кеша?
Не от кэша. От кэширования.Абстрактная производительность процессора в попугаях?Реальное уменьшение времени счёта. Иногда - очень серьёзное.
Старый, но показательный пример.
Во времена пней-четыре считала некая контора задачи: вечером ставят, к обеду следующего дня обсчёт заканчивается.
Появился у них процессор типа "ЭкстремЭдишен" (удвоенный объём кэша второго уровня) и те же самые задачи стали обсчитываться ещё до начала рабочего дня.
Если правильно помню, то было тринадцать часов счёта, а стало - восемь.
...
Рейтинг: 0 / 0
размер кэша - КАК его максимально использовать?
    #39913569
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. Sidorov,
Ну я и сказал - производительней процессор.
Понятно что вылилось в "счёты".
Непонятно привязка производительности процессора к программированию.
Разве это входной параметр при написании программ?
Это константа или начальные условия (НУ).
...
Рейтинг: 0 / 0
размер кэша - КАК его максимально использовать?
    #39913593
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
полудух
у разных процов разное кол-во кэша, у corei9 под 20мб (и 10/20 ядер), у i7 - 16mb, у i5 - 12mb
а как именно это в коде использовать, чтобы выжать максимум из этих нескольких дополнительных Mb ?


Н И К А К !
...
Рейтинг: 0 / 0
размер кэша - КАК его максимально использовать?
    #39913613
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv,
)))))
...
Рейтинг: 0 / 0
размер кэша - КАК его максимально использовать?
    #39913615
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
Ну я и сказал - производительней процессор.
Частоты были одинаковы. Разным был размер кэша.
Или вы тоже считаете, что окружающие если не тупее паровоза, то сильно тупее вас?
...
Рейтинг: 0 / 0
размер кэша - КАК его максимально использовать?
    #39913632
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. Sidorov,
Вы под производительностью понимаете тактовую частоту.
Я в данном контексте про комплексную характеристику в попугаях.
Тут вы добавили ещё мЕрило тупости.))
Это все вы придумали. Не я.
...
Рейтинг: 0 / 0
размер кэша - КАК его максимально использовать?
    #39913634
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как всё запущено ...
Развёрнутый ответ набивать не буду.
...
Рейтинг: 0 / 0
размер кэша - КАК его максимально использовать?
    #39913637
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. Sidorov
Как всё запущено ...
Развёрнутый ответ набивать не буду.

Да. Все выше уже сказано.
Можно еще пр количество ядер порассуждать.
Однако MS и тут сделала автомат и прогеру особо думать не надо.
Конечно есть исключения. Если что.
...
Рейтинг: 0 / 0
размер кэша - КАК его максимально использовать?
    #39963078
Фотография полудух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Да все в порядке. Идет нормальный процесс. Просто Intel слишком долго "починал на лаврах" победителя
а за это время конкуренты подтянулись. Отладили процесс и стали клепать камни не хуже но за меньшие деньги.

ну походу интел слился ...
чё-то они вообще забили по всем фронтам... продают фуфло по завышенным в разы ценам
авторЕдинственные действительно новые процессоры в этой линейке — это 10-ядерные Core i9-10900 и Core i9-10900K. Все остальные — это по сути аналоги топовых или предтоповых решений предыдущих поколений, которые теперь будут продаваться по сниженным ценам.

С другой стороны, несмотря на большую презентацию десятков новых моделей, все прекрасно видят технологическое отставание Intel. Новые процессоры по прежнему производятся по устаревшему технологическому процессу 14 нм на той же старой архитектуре Skylake образца 2015 года, которая для своего времени была отличным достижением, но с тех пор практически не совершенствовалась: Kaby Lake (7-ое поколение) и Coffee Lake (8-ое и 9-ое поколения) архитектурно почти не отличаются от Skylake.

В то же время AMD уже год выпускает процессоры с нормой 7 нм, а осенью 2020 года мы должны увидеть чип Apple A14 на 5 нм. Компания AMD представила новую архитектуру Zen 2 и десктопные процессоры с числом ядер до 16. Так, новые процессоры Intel не смогут сравниться по производительности с 16-ядерным Ryzen 9 3950X. Конкурента для этого топового процессора Intel так и не выпустила.

Хотя Intel в официальных характеристиках указывает максимальное тепловыделения 125 Вт, первые независимые тесты указывают на гораздо больший TDP. Например, Core i9-10900 на частоте 4,6 ГГц нагревается до 93 °C и потребляет 220 Вт, как видно на скриншоте:
...
Рейтинг: 0 / 0
размер кэша - КАК его максимально использовать?
    #39991044
Фотография полудух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Intel - падение
AMD - рост +100% за год
...
Рейтинг: 0 / 0
85 сообщений из 85, показаны все 4 страниц
Форумы / C++ [игнор отключен] [закрыт для гостей] / размер кэша - КАК его максимально использовать?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]