Russian Qt Forum
Ноябрь 23, 2024, 04:54
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Разное
>
Говорилка
>
Расширения процессоров
Страниц: [
1
]
2
3
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: Расширения процессоров (Прочитано 20527 раз)
__Heaven__
Джедай : наставник для всех
Offline
Сообщений: 2130
Расширения процессоров
«
:
Октябрь 21, 2014, 21:21 »
Привет друзья.
Мне стала интересна одна тема, понимание которой у меня расплывчатое. Побудило интерес изучение основ языка ассемблера.
Со времён процессора i386 прошло немало времени. Появилось большое множество расширений, соответственно, инструкций.
А все ли инструкции используются при работе процессора в современных ОС (Windows/Ubuntu...). Имея старенький pentium 4 и современный xenon мы будем выполнять одну и ту же программу (в Windows, по крайней мере) по одинаковым инструкциям. Означает ли это то, что в современном процессоре, возможно, существуют более эффективные инструкции для решения поставленной задачи, но при этом не будут подставлены при компиляции (я все ещё про Windows) в виду совместимости со старыми процессорами?
Также интересует тот факт, что в Ubuntu для обозначения 32 битных программ используется приписка i386. Означает ли это то, что при установке deb пакетов функционал процессоров, появившихся намного позже i386, может быть задействован не полностью?
Как выжимать из процессора все под обеими осями?
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Расширения процессоров
«
Ответ #1 :
Октябрь 22, 2014, 09:07 »
Цитата: __Heaven__ от Октябрь 21, 2014, 21:21
Побудило интерес изучение основ языка ассемблера.
Это хороший, здоровый интерес, дружок
Да, есть более эффективные инструкции, напр simd (sse2.. avх_2). Смысл в том что одной инструкцией производятся действия сразу над 4(или 8, или 16) операндами и рез-т выдается сразу для 4. Компиляторы могут создавать код с использованием таких инструкций независимо от того поддерживаются ли они текущей машиной. Но выполняться такие приложения могут только на машине с нужным simd. То же самое для др команд (не simd). Напр в опциях intel компилятора можно установить какую модель процессора поддерживать.
Гораздо больший прирост (в разы) дает планирование приложения под simd (а не просто вкл опции). У intel есть специальный "суб-компилятор" позволяющий в runtime автоматом выбирать нужную ветку в зависимости от того на какой машине исполняется. Правда такая "сборка" у меня заняла 2 недели.
Цитата: __Heaven__ от Октябрь 21, 2014, 21:21
Также интересует тот факт, что в Ubuntu для обозначения 32 битных программ используется приписка i386. Означает ли это то, что при установке deb пакетов функционал процессоров, появившихся намного позже i386, может быть задействован не полностью?
Это означает что приложение 32-битное, и ничего более.
Записан
__Heaven__
Джедай : наставник для всех
Offline
Сообщений: 2130
Re: Расширения процессоров
«
Ответ #2 :
Октябрь 22, 2014, 13:12 »
А что с процессором случается, если он получает неизвестную инструкцию? Происходит ли проверка исполняемого файла перед запуском?
Записан
Old
Джедай : наставник для всех
Offline
Сообщений: 4350
Re: Расширения процессоров
«
Ответ #3 :
Октябрь 22, 2014, 13:33 »
Цитата: __Heaven__ от Октябрь 22, 2014, 13:12
А что с процессором случается, если он получает неизвестную инструкцию?
Сработает прерывание #13 (общая защита) и ядро убьет процесс.
Цитата: __Heaven__ от Октябрь 22, 2014, 13:12
Происходит ли проверка исполняемого файла перед запуском?
Нет.
Насчет эффективного использования возможностей процессора, тут все от платформы зависит. Например, Linux Gentoo компилирует весь устанавливаемый софт и как правило делает это для процессора конкретной машины (то есть будут использоваться возможности конкретного процессора установленного у пользователя). Другие linux дистрибутивы выбирают некий средний процессор и собирают все пакеты под него. Пользователь всегда может пересобрать нужную ему программу сам под нужный ему процессор. Например, пользователь использует числодробилки или кодирует видео, софт для этого он может собрать именно для его процессора, скорее всего будет работать быстрее.
Под вендой особо никто с этим не заморачивается и собирают все без поддержки самых последних процессоров. Некоторые, выделяют самые "тяжелые" функции в отдельные библиотеки и собирают версии под разные технологии. При старте программа проверяет возможности процессора и подгружается самая эффективная для данного процессора библиотека.
Записан
__Heaven__
Джедай : наставник для всех
Offline
Сообщений: 2130
Re: Расширения процессоров
«
Ответ #4 :
Октябрь 22, 2014, 13:51 »
А какие компиляторы под виндой могут использовать аналог gcc -march=native?
В cmd выполнил mingw32-make --help. Опций оптимизации не нашёл. Поиск в гугле тоже не помог...
Записан
m_ax
Джедай : наставник для всех
Offline
Сообщений: 2095
Re: Расширения процессоров
«
Ответ #5 :
Октябрь 22, 2014, 22:45 »
Цитата: Old от Октябрь 22, 2014, 13:33
Насчет эффективного использования возможностей процессора, тут все от платформы зависит. Например, Linux Gentoo компилирует весь устанавливаемый софт и как правило делает это для процессора конкретной машины (то есть будут использоваться возможности конкретного процессора установленного у пользователя). Другие linux дистрибутивы выбирают некий средний процессор и собирают все пакеты под него. Пользователь всегда может пересобрать нужную ему программу сам под нужный ему процессор. Например, пользователь использует числодробилки или кодирует видео, софт для этого он может собрать именно для его процессора, скорее всего будет работать быстрее.
Под вендой особо никто с этим не заморачивается и собирают все без поддержки самых последних процессоров. Некоторые, выделяют самые "тяжелые" функции в отдельные библиотеки и собирают версии под разные технологии. При старте программа проверяет возможности процессора и подгружается самая эффективная для данного процессора библиотека.
Давно заметил такую вещь: На работе комп core i7 2600, две оси: винда 7 и linux.. Один и тот же код скомпилированный под линуксом (gcc 4.8.2) отрабатывает быстрее в 4 раза чем под виндой (mingw, не помню какая там версия: идёт с Qt 5.1).. В коде используется std::thread, причём никаких дата рейсингов нет - полное 100 процентное распараллеливание.. Я, допускаю, конечно, разницу в раза полтора, но чтоб в четыре..
В общем, забил я после этого на винду и на работе) Или в чём может быть причина?
«
Последнее редактирование: Октябрь 22, 2014, 22:51 от m_ax
»
Записан
Над водой луна двурога. Сяду выпью за Ван Гога. Хорошо, что кот не пьет, Он и так меня поймет..
Arch Linux Plasma 5
Old
Джедай : наставник для всех
Offline
Сообщений: 4350
Re: Расширения процессоров
«
Ответ #6 :
Октябрь 22, 2014, 23:00 »
Не уверен, что здесь дело в компиляторах, точнее в кодогенерации. Скорее дело в планировщиках ядер linux и венды.
Записан
m_ax
Джедай : наставник для всех
Offline
Сообщений: 2095
Re: Расширения процессоров
«
Ответ #7 :
Октябрь 22, 2014, 23:04 »
Цитата: Old от Октябрь 22, 2014, 23:00
Не уверен, что здесь дело в компиляторах, точнее в кодогенерации. Скорее дело в планировщиках ядер linux и венды.
Да я вот тоже не думаю, что дело в компиляторах.. Причём в диспетчере задач (или как он там называется) все 8 потоков забиты под 100%..
Антивирусник даже специально отключал под виндой) Ну, мало ли)
«
Последнее редактирование: Октябрь 22, 2014, 23:07 от m_ax
»
Записан
Над водой луна двурога. Сяду выпью за Ван Гога. Хорошо, что кот не пьет, Он и так меня поймет..
Arch Linux Plasma 5
Bepec
Гость
Re: Расширения процессоров
«
Ответ #8 :
Октябрь 23, 2014, 00:56 »
В винде неполное использование ресурсов в силу того, что наивысший приоритет только у системных потоков и программ. (и даже поставив галочку в диспетчере "суперприоритетный процесс", мы не достигнем приоритета системы
)
В линуксе любой поток и приложение может иметь наивысший приоритет.
Даже помнится приводился пример (какой учебник или статья не помню), где запускалось N потоков с наивысшим приоритетом на винде и на линуксе.
На винде результат отличался в худшую сторону + зависание системы.
На линуксе в лучшую сторону, но зависание системы было аналогичным.
PS на деле быстрее всех плисы. Но и дороже
Записан
Old
Джедай : наставник для всех
Offline
Сообщений: 4350
Re: Расширения процессоров
«
Ответ #9 :
Октябрь 23, 2014, 05:08 »
Цитата: Bepec от Октябрь 23, 2014, 00:56
В винде неполное использование ресурсов в силу того, что наивысший приоритет только у системных потоков и программ. (и даже поставив галочку в диспетчере "суперприоритетный процесс", мы не достигнем приоритета системы
)
В линуксе любой поток и приложение может иметь наивысший приоритет.
А причем здесь приоритеты? Думаете m_ax на разных платфоомах запускает потоки с разными приоритетами и сам удивляется, почему время выполнения отличается?
Цитата: Bepec от Октябрь 23, 2014, 00:56
Даже помнится приводился пример (какой учебник или статья не помню), где запускалось N потоков с наивысшим приоритетом на винде и на линуксе.
На винде результат отличался в худшую сторону + зависание системы.
На линуксе в лучшую сторону, но зависание системы было аналогичным.
Как результат может отличаться в худшую или лучшую сторону, если в обоих случаях происходит зависание системы? Или имеется ввиду подтормаживание?
Цитата: Bepec от Октябрь 23, 2014, 00:56
PS на деле быстрее всех плисы. Но и дороже
На деле плисы с процессорами общего назначения сравнивать нельзя, в виду большой ограниченности первых.
Записан
Bepec
Гость
Re: Расширения процессоров
«
Ответ #10 :
Октябрь 23, 2014, 08:33 »
Очень просто объясняется.
1) Приоритет по умолчанию в линуксе и в винде различаются. У винды есть прослойка с системным приоритетом и только потом идут пользовательские, а у линукса прослойки нет. И у линукса приоритет получается выше.
2) Подвисание дольше, а работы выполняется медленнее. Да, я неверно выразился в предыдущем сообщении. Не зависание, а подвисание системы, которое оканчивается после выполнения программы.
3) Полностью согласен. Но специализированная аппаратура всегда быстрее аппаратуры широкого профиля
Записан
Old
Джедай : наставник для всех
Offline
Сообщений: 4350
Re: Расширения процессоров
«
Ответ #11 :
Октябрь 23, 2014, 08:42 »
Цитата: Bepec от Октябрь 23, 2014, 08:33
1) Приоритет по умолчанию в линуксе и в винде различаются. У винды есть прослойка с системным приоритетом и только потом идут пользовательские, а у линукса прослойки нет. И у линукса приоритет получается выше.
Чем они различаются?
О приоритете можно говорить только в контексте конкретного планировщика. У linux и виндовс они совершенно разные, поэтому сравнивать их приоритеты бессмысленно.
Записан
Bepec
Гость
Re: Расширения процессоров
«
Ответ #12 :
Октябрь 23, 2014, 09:59 »
Не бессмысленно. Приоритет по умолчанию, повторюсь, у линукса выше.
Записан
Old
Джедай : наставник для всех
Offline
Сообщений: 4350
Re: Расширения процессоров
«
Ответ #13 :
Октябрь 23, 2014, 10:06 »
Цитата: Bepec от Октябрь 23, 2014, 09:59
Не бессмысленно. Приоритет по умолчанию, повторюсь, у линукса выше.
А какой это "выше"? А насколько "выше"? А почему микрософт сделала у себя ниже, что бы у них программы тормозили?
Приоритет - это какое то число, которое интерпретирует планировщик как ему вздумается. У линукса, например, в ядре есть несколько разных планировщиков.
Поэтому, для проверки мы берем одинаковую программу, запускаем на одной машине под разными системами и измеряем время работы. Все остальное не важно.
Записан
__Heaven__
Джедай : наставник для всех
Offline
Сообщений: 2130
Re: Расширения процессоров
«
Ответ #14 :
Октябрь 23, 2014, 10:07 »
Цитата: m_ax от Октябрь 22, 2014, 23:04
Да я вот тоже не думаю, что дело в компиляторах.. Причём в диспетчере задач (или как он там называется) все 8 потоков забиты под 100%..
Предположу, что у вас 4 физ ядра. Быть может HyperThreading внёс как-то свою роль? (Не знаю, на каком уровне он работает.)
Записан
Страниц: [
1
]
2
3
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...