|
Временно недоступен
957 / 228 / 14
Регистрация: 12.04.2009
Сообщений: 926
|
||||||
Что делает данный код и зачем такое кому-нибудь может понадобиться?08.06.2009, 23:57. Показов 10828. Ответов 38
Метки нет (Все метки)
Я ответил на вопрос,но точной формулировки не нашёл,хотел бы свериться(приложения с ответами нет).Задание:
Чёрный ящик.Что делается в данном примере?Зачем кому нибудь может понадобиться подобный код?
8
|
||||||
| 08.06.2009, 23:57 | |
|
Ответы с готовыми решениями:
38
Кто-нибудь может подробно объяснить, что такое allocators, зачем это и что с ними делать? Нигде не нашёл инфы Может кому понадобиться Выключение/перезагрузки компа и завершение сеанса Зачем вообще может понадобиться передавать структуру? |
|
2256 / 771 / 25
Регистрация: 27.05.2008
Сообщений: 1,496
|
||||||
| 09.06.2009, 01:33 | ||||||
|
Единственное,что я пока смог придумать - уменьшить количество сравнений при копировании. Деление на восемь выполняется быстро,деление на восемь с остатком тоже шустро,а потом имеем то же копирование,но счетчик уменьшается в 8 раз реже.
#pragma,а что значит "разорванный цикл"?) Си - это низкоуровневый ассемблер. Свич тут просто определяет, с какой точки цикл начнется ( причем компилятор тут сделает таблицу джампов,а не кучу сравнений). Добавлено через 29 минут 46 секунд Интересно.Буду говорить не называя цифр. Я взял функцию
Не думаю, что у всех результат будет такой.Вообще-то,все должно зависить от механизма предсказания переходов,конвеера и проч. Интересно посмотреть,как выйдет на интеле,у меня атлончик.) Добавлено через 18 секунд Интересная темка,спасибо автору ^^
2
|
||||||
|
|
||
| 09.06.2009, 08:43 | ||
|
pragma, почитай тут, там я уже описывал семантику switch'а Проверьте себя. А хорошо ли вы знакомы со switch'ом?
А задачка и вправду прикольная. Где такое достаёшь? Если в институте, то хороший у вас преподаватель Добавлено через 1 минуту 0 секунд
1
|
||
|
121 / 121 / 14
Регистрация: 14.03.2009
Сообщений: 462
|
|
| 09.06.2009, 10:41 | |
|
решил прогнать прогу под досбоксом, результаты поражают для 32000 прогонов при count=20, send работает в 2,5 раза быстрее, тока я так и не понял за счет чего такой прирост в скорости
0
|
|
|
121 / 121 / 14
Регистрация: 14.03.2009
Сообщений: 462
|
||
| 09.06.2009, 10:53 | ||
|
чем по индексам приравнивать, но если брать эту функцию,
1
|
||
|
2343 / 499 / 22
Регистрация: 01.04.2009
Сообщений: 2,200
|
|
| 09.06.2009, 11:46 | |
|
еще бы.
switch - это цепочка if(a == b) goto xx. в исходном коде таких ветвлений 7. а ветвление(оно-же - условный переход)... если почитать документацию по процессорам... при неверном предсказании обрывает суперконвейер, и требует заново загрузить данные из кэша. что требует очень много времени. а вот на старых процессорах тот код со switch делался быстрее, чем версия от XuTPbIu_MuHTAu
1
|
|
|
|
|||
| 09.06.2009, 12:10 | |||
|
Добавлено через 1 минуту 48 секунд
1
|
|||
|
121 / 121 / 14
Регистрация: 14.03.2009
Сообщений: 462
|
|||||||
| 09.06.2009, 12:11 | |||||||
|
сравнивалась send и
0
|
|||||||
|
|
||
| 09.06.2009, 12:13 | ||
Сообщение было отмечено как решение
РешениеВ варианте с send'ом получается, что на 8 пересылок у тебяодин переход и таким образом на НЕполезные операции уходит (опять-таки условно) порядка 10% времени (to pragma) Выше и написано, в чём заключается действие этого "чёрного ящика". Т.е. мы делаем некий аналог широкого копирования (которое ты видел в навороченной реализации strcpy), только широта тут заключается в том, что уменьшается доля бесполезных операций перехода. А switch нужен для того, чтобы правильно отпилить начало (т.е. чтобы при копировании 13 байт сначала скопировалось 5, а затем уже шло пачками по 8)
6
|
||
|
121 / 121 / 14
Регистрация: 14.03.2009
Сообщений: 462
|
||||||
| 09.06.2009, 12:18 | ||||||
|
т.е. данный код (который с функцией send) можно назвать по стуи развернуутым циклом, если я правильно понял
и еще вопрос в чем такое принципиальное отличие между
0
|
||||||
|
|
|||||||||||||
| 09.06.2009, 12:29 | |||||||||||||
Сообщение было отмечено как решение
Решение
Приличный оптимизирующий компилятор скорее всего сведёт второй код к первому (случай у нас простой), но вот в более сложном случае не факт, что это получится сделать
4
|
|||||||||||||
|
2343 / 499 / 22
Регистрация: 01.04.2009
Сообщений: 2,200
|
||
| 09.06.2009, 15:13 | ||
|
и даже при этом код примерно вдвое диннее. для непоследовательных значений - switch строится только на проверках каждого значения. лучший код такого рода, который я видел делал что-то вроде бинарного дерева... получалось на 20 значений - 6 условных переходов.
0
|
||
|
|
|||
| 09.06.2009, 15:16 | |||
|
1
|
|||
|
2343 / 499 / 22
Регистрация: 01.04.2009
Сообщений: 2,200
|
||
| 09.06.2009, 15:23 | ||
![]() а вкрывал я немало. любопытный очень.
0
|
||
|
|
|
| 09.06.2009, 15:27 | |
|
Просто 6 услоных переходов - это слишком много. Для intel'а с его длинным конвейером это смерти подобно. Т.е. такой код либо строился в режиме без оптимизаций, либо case'ы были уж очень разреженные
1
|
|
|
2343 / 499 / 22
Регистрация: 01.04.2009
Сообщений: 2,200
|
|||||||||||
| 09.06.2009, 16:02 | |||||||||||
|
с оптимизацей.
![]() но не суть важно. код все равно получается не очень быстрым. по моим понятиям. а помнится, исследователи еще писали, что в средней программе на каждые 8 команд приходится по одному условному переходу. ![]() из-за чего интел и стал развивать технологию предсказания ветвлений. так что описанная мной ситуация - это нормально. Добавлено через 3 минуты 59 секунд кстати, только что сделал в VC++ код. с оптимизацией на скорость.
в ассемблере это выгляди так:
0
|
|||||||||||
|
|
||||
| 09.06.2009, 16:10 | ||||
|
К тому же статистика про переход на 8 операций - сама по себе ничего не говорит. Важно не сколько переходов, а насколько точно они предсказываются. На целочисленных задах как правило идёт куча ветвлений (if'ов) и предсказываемость здесь хуже. Плавающие задачи в основном состоят из циклов, где предсказатели как правило работаю хорошо. Ну это так, лирика
1
|
||||
|
Временно недоступен
957 / 228 / 14
Регистрация: 12.04.2009
Сообщений: 926
|
|||
| 09.06.2009, 21:44 [ТС] | |||
,а со свитчами как-будто попадаем в разорванный цикл (как-то так).Наивное представление.Но ваши ответы помогли понять,что инструкция цикла сначала компилируется в некий код,и,независимо от switch,цикл будет работать.
0
|
|||
|
|
||||||||||||||||
| 09.06.2009, 21:56 | ||||||||||||||||
|
Кстати, в той теме я так и не раскрыл принцип работы switch'а. Напишу тогда сейчас
Грубо говоря, во многих учебниках объясняется так, что код:
3
|
||||||||||||||||
| 09.06.2009, 21:56 | |
|
Помогаю со студенческими работами здесь
20
зачем может понадобиться делать операторы виртуальными? кто нибудь может объяснить, что делает эта функция? Что делает данный код?
Что делает данный код? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма).
На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
|
Первый деплой
lagorue 16.01.2026
Не спеша развернул своё 1ое приложение в kubernetes.
А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения
развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
|
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ *
Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам
Кирхгофа, решает её и находит:
токи, напряжения и их 1 и 2 производные при t = 0;. . .
|
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым.
Но восстановить их можно так.
Для этого понадобится консольная утилита. . .
|
|
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
|
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
|
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11
— это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
|
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11
Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
|