Russian Qt Forum
Ноябрь 23, 2024, 00:26 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1] 2 3   Вниз
  Печать  
Автор Тема: Расширения процессоров  (Прочитано 20500 раз)
__Heaven__
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2130



Просмотр профиля
« : Октябрь 21, 2014, 21:21 »

Привет друзья.
Мне стала интересна одна тема, понимание которой у меня расплывчатое. Побудило интерес изучение основ языка ассемблера.
Со времён процессора i386 прошло немало времени. Появилось большое множество расширений, соответственно, инструкций.
А все ли инструкции используются при работе процессора в современных ОС (Windows/Ubuntu...). Имея старенький pentium 4 и современный xenon мы будем выполнять одну и ту же программу (в Windows, по крайней мере) по одинаковым инструкциям. Означает ли это то, что в современном процессоре, возможно, существуют более эффективные инструкции для решения поставленной задачи, но при этом не будут подставлены при компиляции (я все ещё про Windows) в виду совместимости со старыми процессорами?
Также интересует тот факт, что в Ubuntu для обозначения 32 битных программ используется приписка i386. Означает ли это то, что при установке deb пакетов функционал процессоров, появившихся намного позже i386, может быть задействован не полностью?

Как выжимать из процессора все под обеими осями?
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #1 : Октябрь 22, 2014, 09:07 »

Побудило интерес изучение основ языка ассемблера.
Это хороший, здоровый интерес, дружок Улыбающийся Да, есть более эффективные инструкции, напр simd (sse2.. avх_2). Смысл в том что одной инструкцией производятся действия сразу над 4(или 8, или 16) операндами и рез-т выдается сразу для 4. Компиляторы могут создавать код с использованием таких инструкций независимо от того поддерживаются ли они текущей машиной. Но выполняться такие приложения могут только на машине с нужным simd. То же самое для др команд (не simd). Напр в опциях intel компилятора можно установить какую модель процессора поддерживать.

Гораздо больший прирост (в разы) дает планирование приложения под simd (а не просто вкл опции). У intel есть специальный "суб-компилятор" позволяющий в runtime автоматом выбирать нужную ветку в зависимости от того на какой машине исполняется. Правда такая "сборка" у меня заняла 2 недели.

Также интересует тот факт, что в Ubuntu для обозначения 32 битных программ используется приписка i386. Означает ли это то, что при установке deb пакетов функционал процессоров, появившихся намного позже i386, может быть задействован не полностью?
Это означает что приложение 32-битное, и ничего более.
Записан
__Heaven__
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2130



Просмотр профиля
« Ответ #2 : Октябрь 22, 2014, 13:12 »

А что с процессором случается, если он получает неизвестную инструкцию? Происходит ли проверка исполняемого файла перед запуском?
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #3 : Октябрь 22, 2014, 13:33 »

А что с процессором случается, если он получает неизвестную инструкцию?
Сработает прерывание #13 (общая защита) и ядро убьет процесс.

Происходит ли проверка исполняемого файла перед запуском?
Нет.

Насчет эффективного использования возможностей процессора, тут все от платформы зависит. Например, Linux Gentoo компилирует весь устанавливаемый софт и как правило делает это для процессора конкретной машины (то есть будут использоваться возможности конкретного процессора установленного у пользователя). Другие linux дистрибутивы выбирают некий средний процессор и собирают все пакеты под него. Пользователь всегда может пересобрать нужную ему программу сам под нужный ему процессор. Например, пользователь использует числодробилки или кодирует видео, софт для этого он может собрать именно для его процессора, скорее всего будет работать быстрее.
Под вендой особо никто с этим не заморачивается и собирают все без поддержки самых последних процессоров. Некоторые, выделяют самые "тяжелые" функции в отдельные библиотеки и собирают версии под разные технологии. При старте программа проверяет возможности процессора и подгружается самая эффективная для данного процессора библиотека.

Записан
__Heaven__
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2130



Просмотр профиля
« Ответ #4 : Октябрь 22, 2014, 13:51 »

А какие компиляторы под виндой могут использовать аналог gcc -march=native?
В cmd выполнил mingw32-make --help. Опций оптимизации не нашёл. Поиск в гугле тоже не помог...
Записан
m_ax
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2095



Просмотр профиля
« Ответ #5 : Октябрь 22, 2014, 22:45 »

Насчет эффективного использования возможностей процессора, тут все от платформы зависит. Например, 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 Offline

Сообщений: 4350



Просмотр профиля
« Ответ #6 : Октябрь 22, 2014, 23:00 »

Не уверен, что здесь дело в компиляторах, точнее в кодогенерации. Скорее дело в планировщиках ядер linux и венды.
Записан
m_ax
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2095



Просмотр профиля
« Ответ #7 : Октябрь 22, 2014, 23:04 »

Не уверен, что здесь дело в компиляторах, точнее в кодогенерации. Скорее дело в планировщиках ядер linux и венды.
Да я вот тоже не думаю, что дело в компиляторах..  Причём в диспетчере задач (или как он там называется) все 8 потоков забиты под 100%..  

Антивирусник даже специально отключал под виндой) Ну, мало ли)
« Последнее редактирование: Октябрь 22, 2014, 23:07 от m_ax » Записан

Над водой луна двурога. Сяду выпью за Ван Гога. Хорошо, что кот не пьет, Он и так меня поймет..

Arch Linux Plasma 5
Bepec
Гость
« Ответ #8 : Октябрь 23, 2014, 00:56 »

В винде неполное использование ресурсов в силу того, что наивысший приоритет только у системных потоков и программ. (и даже поставив галочку в диспетчере "суперприоритетный процесс", мы не достигнем приоритета системы Улыбающийся )
В линуксе любой поток и приложение может иметь наивысший приоритет.

Даже помнится приводился пример (какой учебник или статья не помню), где запускалось N потоков с наивысшим приоритетом на винде и на линуксе.

На винде результат отличался в худшую сторону + зависание системы.
На линуксе в лучшую сторону, но зависание системы было аналогичным.

PS на деле быстрее всех плисы. Но и дороже Веселый
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #9 : Октябрь 23, 2014, 05:08 »

В винде неполное использование ресурсов в силу того, что наивысший приоритет только у системных потоков и программ. (и даже поставив галочку в диспетчере "суперприоритетный процесс", мы не достигнем приоритета системы Улыбающийся )
В линуксе любой поток и приложение может иметь наивысший приоритет.
А причем здесь приоритеты? Думаете m_ax на разных платфоомах запускает потоки с разными приоритетами и сам удивляется, почему время выполнения отличается?

Даже помнится приводился пример (какой учебник или статья не помню), где запускалось N потоков с наивысшим приоритетом на винде и на линуксе.

На винде результат отличался в худшую сторону + зависание системы.
На линуксе в лучшую сторону, но зависание системы было аналогичным.
Как результат может отличаться в худшую или лучшую сторону, если в обоих случаях происходит зависание системы? Или имеется ввиду подтормаживание?


PS на деле быстрее всех плисы. Но и дороже Веселый
На деле плисы с процессорами общего назначения сравнивать нельзя, в виду большой ограниченности первых.
Записан
Bepec
Гость
« Ответ #10 : Октябрь 23, 2014, 08:33 »

Очень просто объясняется.

1) Приоритет по умолчанию в линуксе и в винде различаются. У винды есть прослойка с системным приоритетом и только потом идут пользовательские, а у линукса прослойки нет. И у линукса приоритет получается выше.

2) Подвисание дольше, а работы выполняется медленнее. Да, я неверно выразился в предыдущем сообщении. Не зависание, а подвисание системы, которое оканчивается после выполнения программы.

3) Полностью согласен. Но специализированная аппаратура всегда быстрее аппаратуры широкого профиля Веселый


Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #11 : Октябрь 23, 2014, 08:42 »

1) Приоритет по умолчанию в линуксе и в винде различаются. У винды есть прослойка с системным приоритетом и только потом идут пользовательские, а у линукса прослойки нет. И у линукса приоритет получается выше.
Чем они различаются? Улыбающийся О приоритете можно говорить только в контексте конкретного планировщика. У linux и виндовс они совершенно разные, поэтому сравнивать их приоритеты бессмысленно.

Записан
Bepec
Гость
« Ответ #12 : Октябрь 23, 2014, 09:59 »

Не бессмысленно. Приоритет по умолчанию, повторюсь, у линукса выше.
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #13 : Октябрь 23, 2014, 10:06 »

Не бессмысленно. Приоритет по умолчанию, повторюсь, у линукса выше.
А какой это "выше"? А насколько "выше"? А почему микрософт сделала у себя ниже, что бы у них программы тормозили? Улыбающийся

Приоритет - это какое то число, которое интерпретирует планировщик как ему вздумается. У линукса, например, в ядре есть несколько разных планировщиков.

Поэтому, для проверки мы берем одинаковую программу, запускаем на одной машине под разными системами и измеряем время работы. Все остальное не важно.
Записан
__Heaven__
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2130



Просмотр профиля
« Ответ #14 : Октябрь 23, 2014, 10:07 »

Да я вот тоже не думаю, что дело в компиляторах..  Причём в диспетчере задач (или как он там называется) все 8 потоков забиты под 100%..  
Предположу, что у вас 4 физ ядра. Быть может HyperThreading внёс как-то свою роль? (Не знаю, на каком уровне он работает.)
Записан
Страниц: [1] 2 3   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.055 секунд. Запросов: 22.