|
108 / 108 / 23
Регистрация: 21.03.2010
Сообщений: 445
|
|
Производительность операций20.11.2011, 06:34. Показов 16913. Ответов 135
Метки нет (Все метки)
Не уверен в своих силах для самостоятельной оценки сабжа. Где можно найти информацию о производительности стандартных операций с++ (гуглением не справился, нашел только сравнение реализации на с++, джаве и на нескольких интерпретируемых языках)?
То есть интересует информация плана << : * как 1:15 или <= : == как 25:24... То есть, чрезвычайно интересно знать, какие операции выбирать если есть альтернатива.
0
|
|
| 20.11.2011, 06:34 | |
|
Ответы с готовыми решениями:
135
Вставить между цифрами 1, 2,..., 8, 9 в данном порядке, знак одной из 4-х арифметических операций так, чтобы результат восьми послед-х операций =100 Производительность
|
|
114 / 114 / 13
Регистрация: 29.04.2010
Сообщений: 240
|
|
| 21.11.2011, 19:57 | |
|
Предлагаю ТСу забить на такого рода оптимизацию. Все равно в итоге выигрыш будет незначительным.
Если необходимо ускорить код, то надо переходить на чистый С. Надо считать массив из файла, где заранее кол-во элементов неизвестно? realloc в помощь. Если известно приблизительное количество элементов, можно еще ускорить процесс. Необходимо решать большие СЛАУ? Может вы просто метод не тот выбрали?
0
|
|
|
Заблокирован
|
|
| 21.11.2011, 20:09 | |
|
Извиняюсь за сумбур. Ибо я ассемблер не ведаю. И возможно просто не понимаю о чем сейчас напишу.
Мне вот интересно, а вот так можно сделать: Если допустим, операция + (причем в ассемблированном варианте, а не на языке с++) весит.. нууу пусть будит 1 условная единица. Допустим * - 2 условных единицы А разделить - 3 условных единицы, ну и тд После компиляции, просматривается кусок кода (функции, которую нужно замерить), и тупо подсчитывается, сколько условных единиц она наберёт. Ну и... зная среднее значение, которое по времени тратится на 1 условную единицу, можно уже сделать предположение сколько по времени будит выполняться данный кусок кода. Конечно, нужно как то учесть поправку на то, что разные коды могут выполняться одновременно на разных ядрышках. Но! В целом, даже не зная, сколько времени будит исполняться код, можно же замерить его "условную тяжесть". И сравнивать разные куски кода друг с другом. Ведь все равно, тот кусок, который наберёт больше условных единиц будит работать медленнее более легковесных аналогов. Как вам идея? Все что нужно - на одно-ядерном компьютере при 100% загрузке процессора (а ещё лучше не на многозадачной ОС) погонять ассемблированные команды, и определить их адекватные условные веса. Можно вообще весь ассемблер "оценить". И потом получать в условных единицах абсолютную оценку производительности функций, алгоритмов и тп
0
|
|
|
108 / 108 / 23
Регистрация: 21.03.2010
Сообщений: 445
|
||
| 22.11.2011, 01:45 [ТС] | ||
|
0
|
||
| 22.11.2011, 02:40 | |
|
Не по теме: Пишите на ассемблере, вот где для оптимизаций непочатый край. А Си и С++ оставьте для продакшн кода :angry:
1
|
|
|
Заблокирован
|
||
| 22.11.2011, 04:56 | ||
|
0
|
||
|
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
|
||||||
| 22.11.2011, 05:23 | ||||||
0
|
||||||
|
108 / 108 / 23
Регистрация: 21.03.2010
Сообщений: 445
|
|||
| 22.11.2011, 05:33 [ТС] | |||
|
Добавлено через 5 минут
0
|
|||
|
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
|
||||||||||||
| 22.11.2011, 05:35 | ||||||||||||
1
|
||||||||||||
|
Заблокирован
|
|
| 22.11.2011, 05:37 | |
|
taras atavin, с какими скобками? Если такими a*(b+c) то нет, не меньше. Кончай уже фантазировать, тему всё-таки дети читают, а то вдруг и правда кто-то поверит в твои спичечные оптимизации. Всё что ты писал до этого, ниодна твоя оптимизация не существует в природе!
0
|
|
|
108 / 108 / 23
Регистрация: 21.03.2010
Сообщений: 445
|
|
| 22.11.2011, 05:45 [ТС] | |
|
LosAngeles, вы голословны. покажите всё-таки, как убедится в ваших словах
0
|
|
|
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
|
||
| 22.11.2011, 05:48 | ||
|
0
|
||
|
108 / 108 / 23
Регистрация: 21.03.2010
Сообщений: 445
|
||
| 22.11.2011, 05:51 [ТС] | ||
|
И вообще, часто это звучит так:
я: Мужики, мне надо оптимизировать код. мне: Да ты дебил, его бесполезно оптимизировать! я: Да вот же, посмотри, есть разница мне: Вы профан! Нету! Добавлено через 2 минуты
0
|
||
|
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
|
|||
| 22.11.2011, 06:02 | |||
|
Добавлено через 9 минут
0
|
|||
|
108 / 108 / 23
Регистрация: 21.03.2010
Сообщений: 445
|
||
| 22.11.2011, 06:12 [ТС] | ||
|
0
|
||
|
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 22.11.2011, 06:46 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Что касается индекса и указателя. Просто [CPP]a[100] ганатированно не медленее, чем
Добавлено через 3 минуты Добавлено через 16 секунд Добавлено через 8 минут Кстати, меньшим числом опреаций можно было бы обойтись при использовании системы с большим основанием, например, сложение тех же 32-х битных операндов, но при спользовании шестнадцатеричных операций использует вместо 64-х оперций с цифрами только 16. Вопрос в том, как реализовать быстрое шестнадцатеричное сложение. Таблицей сложенгия? Она будет содержать 256 байт и требовать отдельного вычисления адреса, правда с помощью логической операции, которая может исполняться быстрее арифметической. Ещё меньше операий с цифрами при основании 256, но такая таблица весит 65536 слов, зато операций с цифрами будет всего 8. Добавлено через 11 минут Зависимости от числа разрядов не будет в единственном случае - если процессор реализует операции малой разрядности через аналог разрядности в регистр с занулением старших разрядов. Тогда нет разница 16 разрядов занулять, или 24, в любом случае будет затрачено одно и то же время, но тогда минимальноле время расходуется при сложении операндов разрядности регистр, так как эта опреция не требует зануления старших разрядов, то есть выполняется без вспомогательной предварительной операции. Но и в этом случае операции повышенной разрядности, для которых в процссоре нет готовых аппаратных реализаций, реализуются инлайновой функцией на асме и расходуют больше времени. Кстати, ты обратил внимание, что я не упомянул разрядности вроде 22-х, или 34-х бит?
1
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
108 / 108 / 23
Регистрация: 21.03.2010
Сообщений: 445
|
|||
| 22.11.2011, 06:47 [ТС] | |||
|
0
|
|||
|
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
|
||||||||||||||||||||||||||||||||||||||||||
| 22.11.2011, 07:20 | ||||||||||||||||||||||||||||||||||||||||||
|
Добавлено через 5 минут Добавлено через 33 секунды Добавлено через 1 минуту Добавлено через 7 минут
Добавлено через 6 минут А должно быть:
0
|
||||||||||||||||||||||||||||||||||||||||||
|
108 / 108 / 23
Регистрация: 21.03.2010
Сообщений: 445
|
|
| 22.11.2011, 07:23 [ТС] | |
|
0010 * 0110 = 1100. Даже не представляю, как это происходит, но фором можно записать такое используя &, + и <<
0
|
|
|
Заблокирован
|
||
| 22.11.2011, 08:28 | ||
|
Я вам говорю - любой код пишите, хоть на с++, хоть на си, хоть на бейсике. Замер производительности все равно делается уже ассемблированного кода ПОСЛЕ компиляции. Дальше тупо суммируется вес ассемблированного кода. И если есть две функции, написанные на языке высокого уровня, но делающие одно и тоже. То быстрее будит работать та, которая на данном компьютере, при компиляции одним и тем же компилятором, с одними и теми же настройками даст более легкий вес ассемблированного кода. Я конечно, не разбираюсь в ассемблере, но по моему это очивидно, не? Глупо пытаться оценивать вес высокоуровнего кода, потому что не известно точно, во что его превратит компилятор. А вот оценка уже ассемблированного кода даст абсолютный вес. И эти абсолютные веса уже можно смело сравнивать. Получается, что алгоритм замеров таков: 1. Пишутся две функции на языке высокого уровня, которые нужно сравнить по производительности. 2. Компилируются. 3. Откомпилированный код скармливается специальной утилитке, которая знает все веса ассемблированных команд. 4. Утилитка возвращает абсолютный вес этого кода. 5. Сравниваются веса. Если получится, что допустим вес одной функции 2, а другой - 1,5, значит первая работает быстрее второй в 2.0/1,5 раза. 6. Профит!
0
|
||
|
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
|
||||||||||||
| 22.11.2011, 08:32 | ||||||||||||
0
|
||||||||||||
| 22.11.2011, 08:32 | |
|
Помогаю со студенческими работами здесь
100
Доказать равенства, используя свойства операций над множествами и определения операций Доказать равенства, используя свойства операций над множествами и определения операций Сколько нужно провести операций, чтобы 13 операций подряд были успешными? Доказать равенства, используя свойства операций над множествами и определения операций Напечатать все знаки арифметических операций и операций отношения Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога
Финальные проекты на Си и на C++:
hello-sdl3-c. zip
hello-sdl3-cpp. zip
Результат:
|
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога
MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
|
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд.
Даже если у вас. . .
|
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает
монорепозиторий в котором находятся все исходники.
При создании нового решения, мы просто добавляем нужные проекты
и имеем. . .
|
|
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение:
В этой книге («Подход, основанный на вариантах использования») Ивар утверждает,
что архитектура программного обеспечения — это
структуры,. . .
|
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога
Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
|
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога
Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip
На первой гифке отладочные линии отключены, а на второй включены:. . .
|
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога
Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем.
. . .
|