Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
stawerfar
141 / 55 / 4
Регистрация: 14.12.2010
Сообщений: 347
Записей в блоге: 1
#1

Cache miss - C++

15.09.2013, 20:50. Просмотров 703. Ответов 19
Метки нет (Все метки)

Всем привет.
Хочу разобраться с cache miss. Кто знает какой вариант кода будет меньше содержать промахов и следовательно выполняться быстрее?

Код №1
C++
1
2
3
4
5
6
7
8
9
10
11
12
if (a == 12)
{
  do something....
}
else if (a == -1) 
{
  do something...
}
else
{
  do something...
}
Код №2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
if (a == 12)
{
  dosomething...
}
 
if (a == -1)
{
  dosomething...
}
 
if (a != -1 && a != 12)
{
  do something...
}
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.09.2013, 20:50
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Cache miss (C++):

На какой лучше поставить винду: WD 6400AAKS 640GB 16mb cache или UTANIA DF604RS 1TB 32mb cache ? - Жесткие диски
Имеется 2 жестака. 1) WD 6400AAKS 640GB 16mb cache 2) UTANIA DF604RS 1TB 32mb cache(покупался в корее, 0 инфы в гугле) Сделал 2 теста в...

Intel Dual Core 1,8 Ghz, 1 mb cache e2140 или Pentium 4 3,2 Ghz 2 mb cache 800mhz - что быстрее? - Компьютерное железо
Что быстрее работает ? Intel Dual Core 1,8 Ghz, 1 mb cache e2140 или Pentium 4 3,2 Ghz 2 mb cache 800mhz bus:huh:

Свойства Response.Expires = 60 Response.Expiresabsolute = Now() - 1 Response.AddHeader 'pragma','no-cache' Response.AddHeader 'cache-control','p - C# ASP.NET
Нашел в Инете строчки для запрета буфиризации и кэширования страници бравзером Response.Expires = 60 Response.Expiresabsolute = Now() -...

Cache - Objective-C
Всем доборое время суток! Я отправляю на Сервер запрос и он мне присылает данные JSON после чего я пропарсил JSON полученные...

WP Super Cache - WordPress
1. Если добавляется новая запись она становится видна на главной странице? 2. Если запись отредактировали изменяется ли кэш сразу?...

Mozilla cache - Софт
Где кеш мозиллы??? спасибо.

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Nekto
342 / 287 / 10
Регистрация: 23.03.2012
Сообщений: 838
15.09.2013, 20:54 #2
Что за cache miss?
0
stawerfar
141 / 55 / 4
Регистрация: 14.12.2010
Сообщений: 347
Записей в блоге: 1
15.09.2013, 20:56  [ТС] #3
Цитата Сообщение от Nekto Посмотреть сообщение
Что за cache miss?
.
Промахи кеша процессора
0
Nekto
342 / 287 / 10
Регистрация: 23.03.2012
Сообщений: 838
15.09.2013, 21:01 #4
Цитата Сообщение от stawerfar Посмотреть сообщение
Это как-то связано с С++, а тем более С++ для начинающих? О.о
0
stawerfar
141 / 55 / 4
Регистрация: 14.12.2010
Сообщений: 347
Записей в блоге: 1
15.09.2013, 21:06  [ТС] #5
Цитата Сообщение от Nekto Посмотреть сообщение
Это как-то связано с С++, а тем более С++ для начинающих? О.о
C C++ это связано так как приведенный код выше был на языке C++.
А архитектуру процессора (в целом) программисты должны знать еще до изучения C++ или каких то ни было серьезных языков. Следовательно начинающий программисту было бы не плохо знать при каких конструкциях условного оператора будет меньше промахов во время выполнения программы, что бы уже с озов писать нормальный код не вешая всю оптимизацию на компиляторы.
P.S (Тем более компилятор компилятору рознь)
0
OhMyGodSoLong
~ Эврика! ~
1243 / 992 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
15.09.2013, 21:10 #6
Идите дальше учить матчасть. В частности, разницу между кеш-промахами и ошибками предсказателя переходов. Эффективность данного кода слабо зависит от самих условных операторов. Если уж так хочется поизучать кеши, то возьмите какие-нибудь развёрнутые списки.

И орфографию тоже (пишется: "азы") неплохо бы подтянуть. И верьте в компиляторы. И процессоры. На них потрачено столько человеко-часов, что они редко когда оказываются глупее отдельно взятого человека.
0
stawerfar
141 / 55 / 4
Регистрация: 14.12.2010
Сообщений: 347
Записей в блоге: 1
15.09.2013, 21:13  [ТС] #7
Цитата Сообщение от OhMyGodSoLong Посмотреть сообщение
Идите дальше учить матчасть. В частности, разницу между кеш-промахами и ошибками предсказателя переходов. Эффективность данного кода слабо зависит от самих условных операторов. Если уж так хочется поизучать кеши, то возьмите какие-нибудь развёрнутые списки.
Мда... Мне очень кажется, с вероятностью 1.0 что вы заблуждаетесь в Вашем утверждении по поводу условных операторов и использования условных операторов типа else if или того хуже switch. (Естественно речь идет без контекста оптимизации кода компилятором)
0
alex_x_x
бжни
2447 / 1652 / 84
Регистрация: 14.05.2009
Сообщений: 7,162
15.09.2013, 21:19 #8
stawerfar, это вещь достаточно специфическая
я не сильно представляю теорию, но практически можно померить (cachegrind, или специфические тулы от производителей процессоров)
1
stawerfar
141 / 55 / 4
Регистрация: 14.12.2010
Сообщений: 347
Записей в блоге: 1
15.09.2013, 21:22  [ТС] #9
Цитата Сообщение от OhMyGodSoLong Посмотреть сообщение
И орфографию тоже (пишется: "азы") неплохо бы подтянуть. И верьте в компиляторы. И процессоры. На них потрачено столько человеко-часов, что они редко когда оказываются глупее отдельно взятого человека.
Я тут не бодаться пришел с Вами если что, а по поводу моего правописания, то знаете анекдот про программиста который не умел писать...? Я верю в компиляторы, но вы вместо того что бы пытаться прыгнуть выше головы ответили бы на вопрос. Потому что вы не учли может быть я буду использовать свой "тупой" компилятор некого языка, под программируемый свой контроллер. По этому если не можете сказать чего по теме лучше не засоряйте эфир разборками типа у кого больше яйца.
0
OhMyGodSoLong
~ Эврика! ~
1243 / 992 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
15.09.2013, 21:23 #10
Цитата Сообщение от stawerfar Посмотреть сообщение
Мда... Мне очень кажется, с вероятностью 1.0 что вы заблуждаетесь в Вашем утверждении по поводу условных операторов и использования условных операторов типа else if или того хуже switch. (Естественно речь идет без контекста оптимизации кода компилятором)
В данном конкретном коде — слабо зависит. Все эти клёвые ифы без циклов. Один промах предсказателя — ну тактов 20. Пара каких-нибудь кеш-промахов в этом "do something" с лихвой их перекроет. Я уж молчу, если операционке вздумается именно в этот момент отдать процессор другому потоку. По сравнению с переключением контекста все ваши три ифа — капля в море. Точно так же как переключение контекста по сравнению с неэффективным алгоритмом.

Цитата Сообщение от stawerfar Посмотреть сообщение
Я тут не бодаться пришел с Вами если что, а по поводу моего правописания то знаете анекдот про программиста который не умел писать...? Я верю в компиляторы, но вы вместо того что бы пытаться прыгнуть выше головы ответили бы на вопрос. Потому что вы не учли может быть я буду использовать свой "тупой" компилятор некого я зыка, под программируемый свой контроллер. По этому если не можете сказать чего по теме лучше не засоряйте эфир разборками типа у кого больше яйца.
Вот у своего особого компилятора и надо спрашивать, не? А также у мануала к контроллеру. А не об абстрактных ифах.
1
stawerfar
141 / 55 / 4
Регистрация: 14.12.2010
Сообщений: 347
Записей в блоге: 1
15.09.2013, 21:27  [ТС] #11
Цитата Сообщение от OhMyGodSoLong Посмотреть сообщение
три ифа — капля в море
Да кто сказал что их три будет? А если код 100 000 строк то сколько будет? А если 200 000? То может получиться что и не такая уж капля.
Тем более что я хочу писать это на своем программируемом микроконтроллере, а там количество логических элементов не так уж много, не говоря об остальных ресурсах. По этому хотелось бы ответа по конкретней.
И все же какой будет быстрее угадан?
0
OhMyGodSoLong
~ Эврика! ~
1243 / 992 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
15.09.2013, 21:30 #12
Цитата Сообщение от stawerfar Посмотреть сообщение
И все же какой будет быстрее угадан?
Второй снизу по вторникам и первый в остальные дни. Или одиннадцатый, если их число делится на 71231.

А по поводу памяти и кешей есть прекрасная вводная статья.
1
ValeryS
Модератор
6631 / 5039 / 466
Регистрация: 14.02.2011
Сообщений: 16,844
15.09.2013, 21:33 #13
Цитата Сообщение от stawerfar Посмотреть сообщение
Мне очень кажется, с вероятностью 1.0 что вы заблуждаетесь в Вашем утверждении по поводу условных операторов и использования условных операторов типа else if или того хуже switch.
а как по вашему организован свитч?
далее во всех приведенных кодах процессор ошибется примерно одинаково да и вылавливать блох в разовом коде бессмыслено
а вот в таком коде(условный)
C++
1
2
3
for(int i=0;i<100;i++)
 if(i<75)
.............
процессор может ошибиться пару раз при начальных итерациях, потом начнет предсказывать истину, потом еше пару раз ошибется при i больше или равно 75

если хочется вообще убыстрить код отказывайся от ветвлений

Добавлено через 3 минуты
Цитата Сообщение от stawerfar Посмотреть сообщение
Да кто сказал что их три будет? А если код 100 000 строк то сколько будет? А если 200 000? То может получиться что и не такая уж капля.
Тем более что я хочу писать это на своем программируемом микроконтроллере, а там количество логических элементов не так уж много, не говоря об остальных ресурсах.
и что там тоже есть кэш 2 уровня?
оптимизация так не делается
сначала пишется прога потом проходится профиловшиком выискиваются слабые места и их уже чистишь
1
stawerfar
141 / 55 / 4
Регистрация: 14.12.2010
Сообщений: 347
Записей в блоге: 1
15.09.2013, 21:37  [ТС] #14
Цитата Сообщение от ValeryS Посмотреть сообщение
кэш 2 уровня
нет но его можно легко реализовать ручками, как и всю логику процессора. Я говорю о плисине.
По поводу профилировщика, я понимаю о чем Вы. Я просто изначально хотел лишь получить совет на по ставленый в посте вопрос.
0
ValeryS
Модератор
6631 / 5039 / 466
Регистрация: 14.02.2011
Сообщений: 16,844
15.09.2013, 21:53 #15
Цитата Сообщение от stawerfar Посмотреть сообщение
Я просто изначально хотел лишь получить совет на по ставленый в посте вопрос.
изначально никто не знает
предсказания даются на основании каких то данных
а при первом запуске/проходе откуда они
Цитата Сообщение от stawerfar Посмотреть сообщение
нет но его можно легко реализовать ручками, как и всю логику процессора. Я говорю о плисине.
ой, не уверен
Интел этим не одно десятилетие занимается и то не все идеально
да и зачем микроконтроллеру кэш? там (у всех мне знакомых) гарвардская архитектура
программа лежит в памяти, смысл закачивать

попробуй stm32 достаточно дешевые адресуют до 4 гБайт памяти
и самое вкусное все и переферия и память и регистры все в одном сегменте, поначалу неудобно но быстро привыкаешь

Добавлено через 5 минут
Цитата Сообщение от ValeryS Посмотреть сообщение
изначально никто не знает
могу только предположить что изначально процессор код закачивает подряд
но компилятор вправе поменять твое условие, тем более если оно сложное, на обратное
т.е
C++
1
2
3
4
if(m)
 cod1
else
 cod2
может легко поменять на

C++
1
2
3
4
if(!m)
 cod2
else
 cod1
чтобы уменьшить количество переходов

почитай К Касперски, но все что я видел он пишет для ПСишных процессоров
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.09.2013, 21:53
Привет! Вот еще темы с ответами:

cache chrome - C# ASP.NET
Здравствуйте, скажите пожалуйста как программно открыть кэш хрома в самом браузере?

Cache-Control - nginx
Есть php файл с javascript. Он отдает заголовки кэширования. &lt;? $maxAge = 2592000; header (&quot;Content-Type: application/x-javascript;...

cache manifest - HTML, CSS
кто шарит помогите настроить, всегда статус 0 &lt;!DOCTYPE HTML&gt; &lt;html manifest=&quot;tocache.manifest&quot;&gt; &lt;html&gt; &lt;head&gt; ...

Second level cache - Java EE
Всем доброго дня. В такой ситуации: есть dao-либка, в настройкай которой мы включаем кэш второго уровня, и эта либка подрубается к двум...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
15.09.2013, 21:53
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru