|
Временно недоступен
957 / 228 / 14
Регистрация: 12.04.2009
Сообщений: 926
|
||||||
Что делает данный код и зачем такое кому-нибудь может понадобиться?08.06.2009, 23:57. Показов 10694. Ответов 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
зачем может понадобиться делать операторы виртуальными? кто нибудь может объяснить, что делает эта функция? Что делает данный код?
Что делает данный код? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта
Симптом:
После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
|
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
|
Новый ноутбук
volvo 07.12.2025
Всем привет.
По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне:
Ryzen 5 7533HS
64 Gb DDR5
1Tb NVMe
16" Full HD Display
Win11 Pro
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|
|
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов
На странице:
https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/
нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
|
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
|
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
|
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут.
В век Веб все очень привыкли к дизайну Single-Page-Application .
Быстренько разберем подход "на фреймах".
Мы делаем одну. . .
|