0 / 0 / 0
Регистрация: 24.03.2017
Сообщений: 18
1

Работа с КЭШ памятью

17.01.2018, 01:40. Показов 3550. Ответов 22
Метки нет (Все метки)

Здравствуйте. Порекомендуйте пожалуйста литературу где хорошо описано, как работать с КЭШ памятью в программировании (желательно на С или С++).
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
17.01.2018, 01:40
Ответы с готовыми решениями:

Работа с памятью
Всем привет! Не могу разобраться, как написать код программы, которая моделирует механизм...

работа с памятью
a) Статическая память. Двумерный массив. Дан массив целых чисел. В массиве есть отрицательные...

Работа с памятью
Добрый день всем. Я только начал изучение C#(раньше работал c: C++ маленько -т.е. общее...

работа с памятью
Доброго времени суток! У меня возникло затруднение - нужно реализовать на языке Си...

22
зомбяк
1561 / 1210 / 344
Регистрация: 14.05.2017
Сообщений: 3,924
17.01.2018, 01:53 2
Читай книги по архитектуре процессоров. В С и С++ непосредственного управления кэшем нет - процессор этим занимается сам.
0
0 / 0 / 0
Регистрация: 24.03.2017
Сообщений: 18
17.01.2018, 05:12  [ТС] 3
А конкретно какие книги можете порекомендовать?
0
2753 / 1908 / 568
Регистрация: 05.06.2014
Сообщений: 5,559
17.01.2018, 06:57 4
Цитата Сообщение от Александр160119 Посмотреть сообщение
Здравствуйте. Порекомендуйте пожалуйста литературу где хорошо описано, как работать с КЭШ памятью в программировании (желательно на С или С++).
Команды способные влиять на работу кеша, относятся к числу привилегированных. И при попытке их исполнить из под современной ОС, у вас тупо вылетит ошибка ввиду отсутствия у вашего приложения этих самых привилегий. Если же вы вдруг собрались пилить свою ОС, то обкладываться документацией на конкретный процессор.
0
0 / 0 / 0
Регистрация: 24.03.2017
Сообщений: 18
17.01.2018, 07:19  [ТС] 5
А как тогда делают люди, которые говорят, что в какой то программе использовали кэш память такого то уровня, выравнивание данных по кэш и т.д. Я в этом хочу разобраться. То есть какие сказать компьютеры, что вот часть этих данных надо послать в кэш память первого уровня, часть других данных послать в кэш память второго уровня и т.д.
0
5222 / 3193 / 362
Регистрация: 12.12.2009
Сообщений: 8,094
Записей в блоге: 2
17.01.2018, 09:22 6
Цитата Сообщение от Renji Посмотреть сообщение
Команды способные влиять на работу кеша, относятся к числу привилегированных.
префетчинг доступен из ring 3
1
0 / 0 / 0
Регистрация: 24.03.2017
Сообщений: 18
17.01.2018, 09:43  [ТС] 7
Объясните пожалуйста, что это значит, а то я совсем новичок? И порекомендуйте пожалуйста литературу по этой теме.
0
5222 / 3193 / 362
Регистрация: 12.12.2009
Сообщений: 8,094
Записей в блоге: 2
17.01.2018, 10:06 8
Цитата Сообщение от Александр160119 Посмотреть сообщение
а то я совсем новичок
Ну и не лезь туда пока)

Книга, я правда сам ее не читал, но считается чуть ли не библией.
1
0 / 0 / 0
Регистрация: 24.03.2017
Сообщений: 18
17.01.2018, 10:09  [ТС] 9
Так я хочу в этом разобраться. Хочу в это лезть. :-) Спасибо за рекомендацию.
0
Evg
Эксперт CАвтор FAQ
21244 / 8258 / 636
Регистрация: 30.03.2009
Сообщений: 22,602
Записей в блоге: 30
17.01.2018, 10:16 10
Цитата Сообщение от Renji Посмотреть сообщение
Команды способные влиять на работу кеша, относятся к числу привилегированных
Да там и команд скорее всего никаких нет. Правда есть инструкция прочистки одной линии кэша или что-то типа того. Кэш - это особенность внутренней реализации процессора, а потому напрямую никак не управляется

Цитата Сообщение от Александр160119 Посмотреть сообщение
где хорошо описано, как работать с КЭШ памятью в программировании
Хочешь воспользоваться Spectre/Meltdown или чего?
0
0 / 0 / 0
Регистрация: 24.03.2017
Сообщений: 18
17.01.2018, 11:40  [ТС] 11
Что такое Spectre/Meltdown? Я хочу понять как я могу свои входные данные выровнять по кэшу. А в общем вообще хочу понять как например взять часть данных из большого массива и сказать процессору обработай эти данные в кэше первого уровня, так как он самый быстрый. Например отсортировать часть массива данных по возрастанию.
0
Evg
Эксперт CАвтор FAQ
21244 / 8258 / 636
Регистрация: 30.03.2009
Сообщений: 22,602
Записей в блоге: 30
17.01.2018, 12:21 12
Коль скоро ты новичок, то я бы посоветовал воспользоваться советом из поста #8 - "Ну и не лезь туда пока". Разберись с чем-нибудь другим, более полезным
0
0 / 0 / 0
Регистрация: 24.03.2017
Сообщений: 18
17.01.2018, 12:24  [ТС] 13
Я основы то знаю. Пишу всякие программы в основном по вычислительной математике.
0
зомбяк
1561 / 1210 / 344
Регистрация: 14.05.2017
Сообщений: 3,924
17.01.2018, 12:47 14
Александр160119, начни не с кэша, а с регистров. Изучи, как собственно работает процессор, и что из себя представляет машинный код, как он обрабатывается, какими командами производятся операции над данными и над регистрами, и потом уже переходи к кэшу, когда и как он подгружается.

А если хочется поверхностных рекомендаций - не "прыгай" между разными массивами часто, старайся обрабатывать в одном, например, цикле только два - три массива и не больше.
1
0 / 0 / 0
Регистрация: 24.03.2017
Сообщений: 18
17.01.2018, 13:00  [ТС] 15
У меня цель, чтобы моя вычислительная программы быстрее считала (Я решаю трёхмерное уравнение теплопроводности) и вот там надо как то оптимизировать работу с памятью, чтобы данные как можно быстрее поступали в память.
0
зомбяк
1561 / 1210 / 344
Регистрация: 14.05.2017
Сообщений: 3,924
17.01.2018, 13:16 16
Александр160119, они у тебя и так поступают в память максимально быстро, но их у тебя слишком много. Ну не уместится у тебя вся матрица линейного уравнения в кэш. Вот и придумывай, как можно упорядочить вычисления так, чтобы одновременно операции производились в локальной области матрицы, без обращений к остальной её области (причём, если там 3-мерный массив, то "локальной области" в плане отдельных строк, т.е. последнего индекса). Если так сделать нельзя - значит и ускорить процесс тоже нельзя.
1
308 / 220 / 74
Регистрация: 23.05.2011
Сообщений: 981
17.01.2018, 13:57 17
Ты не туда копаешь.

Вариант 1, наиболее простой:
Используй OpenMP. Суть в том, что это очень простое параллельное программирование. Но, подозреваю, что там много накладных расходов на создание потоков.

Вариант 2, сложнее:
Разберись с std::thread, std::mutex, сделай пул потоков, используй его для расчётов.

Вариант 3, сложный, требует наличия видеокарты, но даёт огромный прирост производительности при работах с матрицами:
Подключи CUDA и считай с её помощью. Вообще, все нормальные люди так делают.
Если ты достаточно упорот, можешь подключить OpenGL/Vulkan и считать с помощью шейдеров. Но это не лучше, просто вариант.
1
0 / 0 / 0
Регистрация: 24.03.2017
Сообщений: 18
17.01.2018, 14:06  [ТС] 18
А как понять есть на моей видеокарте CUDA или нет?
0
Evg
Эксперт CАвтор FAQ
21244 / 8258 / 636
Регистрация: 30.03.2009
Сообщений: 22,602
Записей в блоге: 30
17.01.2018, 14:55 19
Цитата Сообщение от Александр160119 Посмотреть сообщение
У меня цель, чтобы моя вычислительная программы быстрее считала (Я решаю трёхмерное уравнение теплопроводности) и вот там надо как то оптимизировать работу с памятью, чтобы данные как можно быстрее поступали в память
Уверен на 99%, что для ускорения этого кода есть миллион различных способов. Начиная от того, что надо научиться пользоваться опциями компилятора, заканчивая тем, что нужно правильно и оптимально реализовать алгоритм (переписать код). Настройка работы с кэшем в списке возможных вариантов ускорения будет уверенно занимать одно из последних мест, как по значимости/применимости, так и по количественному ускорению

Добавлено через 1 минуту
Цитата Сообщение от Александр160119 Посмотреть сообщение
А как понять есть на моей видеокарте CUDA или нет?
Выяснить модель видеокарты и проверить на сайте nvidia, есть ли cuda в твоём GPU (CUDA есть только у nvidia, у amd своя приблуда)
1
0 / 0 / 0
Регистрация: 24.03.2017
Сообщений: 18
17.01.2018, 16:05  [ТС] 20
Я работаю с Visual Studio. Какие книги порекомендуете, где написано, как работать с компилятором? Алгоритм оптимизирован.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
17.01.2018, 16:05
Помогаю со студенческими работами здесь

Работа с памятью
Есть приложение,в нем есть label'ы. Есть ли какая-нибудь возможность средствами C++ допустим,...

Работа с памятью
Форумчане, доброго времени суток. Заранее извиняюсь за нубские вопросы, но должен разобраться в...

Работа с памятью
Может кто хорошо понимает механизм выделения и освобождения памяти объяснить его, а то я в конец...

Работа с памятью
Нужно ривести пример использования операторов new и delete для выделения памяти под двумерный...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru