Детский лепет

spx-vnx
Сообщений: 236
Зарегистрирован: 14 авг 2011, 21:00

Детский лепет

Сообщение spx-vnx » 15 авг 2011, 11:22

master писал(а):Source of the post тогда уж так
b=!(--a);
Эта конструкция изменит значение операнда, следовательно, она не эквивалентна операции b = (a == 1);

k1ng1232 писал(а):Source of the post на счет оптимальности- все равно есть оптимизатор(какой то лучше какой то чуть хуже),вот например я знаю что компилятор от Intel себя очень хорошо проявляет в области оптимизации кода для различных расчетов
что касается префиксного и постфиксного операторов инкремента - тут компилятор бессилен. Он не имеет права заменить один оператор другим и копия объекта всё-равно будет сохраняться, на это будут тратиться ресурсы.

Wild Bill писал(а):Source of the post Конечно, но недаром до сих пор пишут вставки на ассемблере в код. Я не обладаю такими знаниями, оптимизатор всегда сработает лучше меня, но есть же люди, которые пишут, но только для конкретных платформ или с условной компиляцией, когда для каждой платформы компилируется своя часть кода. Чаще всего это не прикладники, а специалисты по численным методам, по написанию программ.
ассемблерные вставки - очень плохая практика. Уж лучше линковатьк проге отдельный набор процедур, написанных на асме. Ассемблерные вставки поддерживают не все компиляторы, не на всех платформах и т.д.
Последний раз редактировалось spx-vnx 28 ноя 2019, 19:55, всего редактировалось 1 раз.
Причина: test

Dragon27
Сообщений: 4395
Зарегистрирован: 10 фев 2010, 21:00

Детский лепет

Сообщение Dragon27 » 15 авг 2011, 12:08

spx-vnx писал(а):Source of the post Он не имеет права заменить один оператор другим и копия объекта всё-равно будет сохраняться, на это будут тратиться ресурсы.

Ну оптимизирующий компилятор может и убрать создание временного объекта (для простых базовых типов переменных), если видит, что можно.
Вроде как.
Последний раз редактировалось Dragon27 28 ноя 2019, 19:55, всего редактировалось 1 раз.
Причина: test

spx-vnx
Сообщений: 236
Зарегистрирован: 14 авг 2011, 21:00

Детский лепет

Сообщение spx-vnx » 15 авг 2011, 13:15

Dragon27 писал(а):Source of the post Ну оптимизирующий компилятор может и убрать создание временного объекта (для простых базовых типов переменных), если видит, что можно.
Вроде как.
не всегда
Последний раз редактировалось spx-vnx 28 ноя 2019, 19:55, всего редактировалось 1 раз.
Причина: test

Dragon27
Сообщений: 4395
Зарегистрирован: 10 фев 2010, 21:00

Детский лепет

Сообщение Dragon27 » 15 авг 2011, 20:18

spx-vnx писал(а):Source of the post не всегда

Не всегда, значит иногда, разницы-то?
Последний раз редактировалось Dragon27 28 ноя 2019, 19:55, всего редактировалось 1 раз.
Причина: test

Аватар пользователя
Wild Bill
Сообщений: 4820
Зарегистрирован: 26 июл 2009, 21:00

Детский лепет

Сообщение Wild Bill » 16 авг 2011, 09:58

spx-vnx писал(а):Source of the post ассемблерные вставки - очень плохая практика. Уж лучше линковатьк проге отдельный набор процедур, написанных на асме. Ассемблерные вставки поддерживают не все компиляторы, не на всех платформах и т.д.
Это стандартная практика при составлении программ по численным методам, например, линейной алгебре. Оптимизируется именно небольшой участок программы, поэтому нет смысла тратить ресурс ещё и на вызов процедуры и выход из неё. Сам так не пишу, так как последний освоенный ассемблер был для IBM/360.
Последний раз редактировалось Wild Bill 28 ноя 2019, 19:55, всего редактировалось 1 раз.
Причина: test

spx-vnx
Сообщений: 236
Зарегистрирован: 14 авг 2011, 21:00

Детский лепет

Сообщение spx-vnx » 16 авг 2011, 11:08

Wild Bill писал(а):Source of the post Это стандартная практика при составлении программ по численным методам, например, линейной алгебре.
Очень плохая - теряется портируемость, мультиплатформенность, код привязывается к конкретному компилятору. Спрос на такую библиотеку сразу падает: сливаю я библиотеку, хочу встроить в свой проект - под VS не компилится. Ладно, если там мелочь какую-нибудь подправить нужно, а если ассемблерные вставки перепиливать - это уже гемор.

Wild Bill писал(а):Source of the post Оптимизируется именно небольшой участок программы, поэтому нет смысла тратить ресурс ещё и на вызов процедуры и выход из неё.
В большинстве случаев компилятор сгенерирует лучший код, чем программист. Там много нюансов: режимы работы конвейера, кеша и пр. Некоторую последовательность команд проц может обработать за один такт, некоторую не может проглотить и за 10 тактов. По скорости x86 проги вообще очень сложно оптимизировать. Что же касается вызова - можно и библиотеку из инлайн функций линковать, и фасткол функции писать.. В большинстве случаев именно так и делается. Пример тому - библиотеки mmx инструкций, входящие в состав Visual Studio. Функции линкуются как инлайновые.

Во многих современных компиляторах C++, н-р VS x64, ассемблерные вставки вообще запрещены.
Последний раз редактировалось spx-vnx 28 ноя 2019, 19:55, всего редактировалось 1 раз.
Причина: test

Аватар пользователя
Wild Bill
Сообщений: 4820
Зарегистрирован: 26 июл 2009, 21:00

Детский лепет

Сообщение Wild Bill » 16 авг 2011, 12:19

spx-vnx писал(а):Source of the post ...теряется портируемость, мультиплатформенность, код привязывается к конкретному компилятору. Спрос на такую библиотеку сразу падает...
Для мультиплатформенности используется условная компиляция, где условием являются платформы. Именно таким образом построена популярная библиотека NAG.
spx-vnx писал(а):Source of the post В большинстве случаев компилятор сгенерирует лучший код, чем программист
Это верно, но есть умельцы.
spx-vnx писал(а):Source of the post По скорости x86 проги вообще очень сложно оптимизировать.
Уже давно используют многоядерные 64-разрядные процессоры, скорость вполне: ставим два Xeon'a по 8 ядер на материнку, вот и мини-суперкомпьютер.
spx-vnx писал(а):Source of the post н-р VS x64
Это компилятор под Линух не работает.
Последний раз редактировалось Wild Bill 28 ноя 2019, 19:55, всего редактировалось 1 раз.
Причина: test

spx-vnx
Сообщений: 236
Зарегистрирован: 14 авг 2011, 21:00

Детский лепет

Сообщение spx-vnx » 16 авг 2011, 13:03

Wild Bill писал(а):Source of the post Для мультиплатформенности используется условная компиляция, где условием являются платформы. Именно таким образом построена популярная библиотека NAG.
Под каждый компилятор? Под каждую платформу? Их сотни.

Wild Bill писал(а):Source of the post Это верно, но есть умельцы.
Как правило, они сидят в Intel или AMD и досконально знают особенности проца под который пишут. И занимаются написанием специализированных библиотек.

Wild Bill писал(а):Source of the post Уже давно используют многоядерные 64-разрядные процессоры, скорость вполне: ставим два Xeon'a по 8 ядер на материнку, вот и мини-суперкомпьютер.
В x86-64 ещё больше особенностей - чёрт ногу сломит.

Wild Bill писал(а):Source of the post Это компилятор под Линух не работает.
Я к тому, что нет универсальности. Visual Studio x64 асм вставки не поддерживает, Visual Studio x32 поддерживает, но в своём формате, у gcc тоже свой формат... В общем - неблагодарное занятие писать под каждый компилятор свой код.

Dragon27 писал(а):Source of the post Не всегда, значит иногда, разницы-то?
Разница в том, что может и не оптимизировать. Стоит, например, к конструкторе/деструкторе глобальный счётчик объектов или производитя выделение памяти или что-нибудь ещё - компилятор уже выкинуть этот код не сможет. Во многих случаях именно так и будет происходить.
Последний раз редактировалось spx-vnx 28 ноя 2019, 19:55, всего редактировалось 1 раз.
Причина: test

Аватар пользователя
Wild Bill
Сообщений: 4820
Зарегистрирован: 26 июл 2009, 21:00

Детский лепет

Сообщение Wild Bill » 16 авг 2011, 14:31

spx-vnx писал(а):Source of the post Под каждый компилятор? Под каждую платформу? Их сотни.
Зачем? Есть основные платформы и компиляторы, которые используются для научных расчётов, зайдите на сайт разработчиков библиотеки IMSL, посмотрите сколько там версий. (Кстати, одна и та же программа, скомпилированная под Windows и под Linux на Windows выполняется процентов на 15 медленнее.)
Последний раз редактировалось Wild Bill 28 ноя 2019, 19:55, всего редактировалось 1 раз.
Причина: test

spx-vnx
Сообщений: 236
Зарегистрирован: 14 авг 2011, 21:00

Детский лепет

Сообщение spx-vnx » 16 авг 2011, 15:11

Wild Bill писал(а):Source of the post Зачем? Есть основные платформы и компиляторы, которые используются для научных расчётов, зайдите на сайт разработчиков библиотеки IMSL, посмотрите сколько там версий
Понимаете, прикладные задачи могут быть разными. Мне вот, например, для реализации систем управления зачастую требуются библиотеки численных методов. Эти системы управления, как правило, работают на ARM'ах, AVR'ах. Тут важна и производительность и портируемость.

Wild Bill писал(а):Source of the post Кстати, одна и та же программа, скомпилированная под Windows и под Linux на Windows выполняется процентов на 15 медленнее
Честно говоря, очень сомнительно.
Последний раз редактировалось spx-vnx 28 ноя 2019, 19:55, всего редактировалось 1 раз.
Причина: test


Вернуться в «Computer Science»

Кто сейчас на форуме

Количество пользователей, которые сейчас просматривают этот форум: нет зарегистрированных пользователей и 5 гостей