![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| cardinal |
|
|||
![]() Инженер ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 6003 Регистрация: 26.3.2002 Где: Германия Репутация: 2 Всего: 99 |
собственно хотелось бы с более простыми операциями типа сдвига...
-------------------- Немецкая оппозиция потребовала упростить натурализацию иммигрантов В моем блоге: Разные истории из жизни в Германии "Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино". А. и Б. Стругацкие |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
если делите (берете остаток) на константу, то компилятор сам сделает то что нужно..
Это сообщение отредактировал(а) mes - 29.11.2010, 22:57 |
|||
|
||||
| cardinal |
|
|||
![]() Инженер ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 6003 Регистрация: 26.3.2002 Где: Германия Репутация: 2 Всего: 99 |
А я ему не доверяю и поэтому все оптимизации выыключены.
-------------------- Немецкая оппозиция потребовала упростить натурализацию иммигрантов В моем блоге: Разные истории из жизни в Германии "Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино". А. и Б. Стругацкие |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
и зря.. Добавлено через 1 минуту и 50 секунд и с чего вобще такое желание оптимизировать это деление ? Вы уверены, что это (самое) узкое место ? |
|||
|
||||
| sQu1rr |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 597 Регистрация: 11.11.2008 Где: london Репутация: 3 Всего: 13 |
Добавлено через 1 минуту и 42 секунды Это я не как способ ( он к 10 не подходит ) - а как подтверждение нецелесообразности использование оптимизации того, с чем либо компилятор справиться, либо не существенно для скорости выполнения |
|||
|
||||
| cardinal |
|
|||
![]() Инженер ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 6003 Регистрация: 26.3.2002 Где: Германия Репутация: 2 Всего: 99 |
Вы люди избалованные Intel, AMD... а есть еще и другие процессоры, для которых ВСЕ существенно, каждая строка кода. Компилятор в таких случаях может наваять чего угодно и поэтому оптимизацию принято отключать, а писать сразу эффективный код. То есть пока вы мне ничем не помогли.
-------------------- Немецкая оппозиция потребовала упростить натурализацию иммигрантов В моем блоге: Разные истории из жизни в Германии "Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино". А. и Б. Стругацкие |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
||||
|
||||
| sQu1rr |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 597 Регистрация: 11.11.2008 Где: london Репутация: 3 Всего: 13 |
В VC++ возвращает тип параметров |
|||
|
||||
| cardinal |
|
|||
![]() Инженер ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 6003 Регистрация: 26.3.2002 Где: Германия Репутация: 2 Всего: 99 |
Ассемблером зовется... Тогда переформулирую вопрос: как мне наиболее эффективно на ассемблере написать функцию "остаток от деления на 10"? Только не надо меня посылать теперь в другой подфорум... sQu1rr, мне нужна не функция, а ее реализация!!! Причем простую я и сам знаю. -------------------- Немецкая оппозиция потребовала упростить натурализацию иммигрантов В моем блоге: Разные истории из жизни в Германии "Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино". А. и Б. Стругацкие |
|||
|
||||
| Леопольд |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 943 Регистрация: 17.6.2009 Репутация: 10 Всего: 13 |
Всё зависит от ассемблера.
cardinal, сомневаюсь что с помощью бинарных операций можно это сделать быстрее чем это сделает сам процессор (который, возможно, сам всё к этому сведёт), 10 ведь не степень двойки. Это сообщение отредактировал(а) Леопольд - 30.11.2010, 08:21 -------------------- вопросов больше чем ответов |
|||
|
||||
| azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 81 Всего: 211 |
Есть такое, сталкивался, оптимизировал деление на 2 и разница довольно существенная (с учетом того, что процессор был 70 мегагерцовый)
где m - magic number ~ 2^32 / делитель (10 в нашем случае) алгоритм взял из книги "алгоритмические трюки для программистов". Рекомендую, незаменимая вещь в работе такого рода. к сожалению для алгоритма требуется 64-х битный int (если делится 32-х битный int). стоит протестировать скорость работы, но вообще умножение намного быстрее деления. можно еще попробовать оптимизировать умножение.. Это сообщение отредактировал(а) azesmcar - 30.11.2010, 09:36 |
|||
|
||||
| Леопольд |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 943 Регистрация: 17.6.2009 Репутация: 10 Всего: 13 |
Или второй (32-битный) регистр, куда пишется переполнение. В нем как раз будет результат: (n * m) >> 32
Это сообщение отредактировал(а) Леопольд - 30.11.2010, 08:54 -------------------- вопросов больше чем ответов |
|||
|
||||
| azesmcar |
|
||||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 81 Всего: 211 |
Немного поигрался с отладчиком.
Этот код сгенерировала Visual Studio 2010 с настройками оптимизации, как и просил, на ассемблере Используется аналогичный алгоритм.
еще один способ
http://www.hackersdelight.org/divcMore.pdf из той же книги. Это сообщение отредактировал(а) azesmcar - 30.11.2010, 09:50 |
||||
|
|||||
| cardinal |
|
|||
![]() Инженер ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 6003 Регистрация: 26.3.2002 Где: Германия Репутация: 2 Всего: 99 |
Во, вот это уже то, что нужно! Спасибо, azesmcar!
-------------------- Немецкая оппозиция потребовала упростить натурализацию иммигрантов В моем блоге: Разные истории из жизни в Германии "Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино". А. и Б. Стругацкие |
|||
|
||||
| MrYuran |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 2 Регистрация: 19.11.2010 Репутация: нет Всего: нет |
А в результате окажется, что у процессора есть аппаратный умножитель, который за 1 такт может расщёлкать все ваши /%10
Ассемблер нужно уметь читать, но писать на нём не надо! |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |