THG.RU | \"Поиск\" Поиск \"Поиск\" | Новости | Видеокарты | Процессоры | Материнские платы | Мониторы | Аудио/видео | HDD и CD/DVD | Собери сам | Игры | Софт | Домашний ПК


Клуб экспертов THG.ru   

Вернуться   Клуб экспертов THG.ru > Общие форумы / Курилка > Оффтоп вокруг РС

Регистрация Правила форума FAQ форума Справка Пользователи Поиск Сообщения за день Все разделы прочитаны

Оффтоп вокруг РС Все о РС, что не вошло в профильные подразделы...

Ответ
 
Опции темы Опции просмотра
Старый 08.11.2011, 12:22   #1
Меню пользователя MihaNix
Старожил
 
Аватар для MihaNix
  
Строение ЦП, Оптимизация программ.

Интересна внутренняя структура процессоров и методы оптимизации программного кода под конкретные модели.

Добавлено через 4 минуты 49 секунд
Цитата:
Сообщение от vodimitriy Посмотреть сообщение
MihaNix, опять же вам такой вопрос. В документации интел, да и в разных авторитетных книгах написано, что из аппаратуры SSE добавило в процессор: 1. дополнительный набор команд 2. 128-битные регистры. Ни о каких четырёх (возможно больше) параллельно работающих АЛУ речи нет. Тогда возникают ситуации:
1) Обычное сложение четырёх переменных выполнится так: "чтение команды из памяти, декодирование команды, вычисление адреса операндов, считывание операндов, выполнение операции, запись результата" х 4 (умножаем каждое действие на 4, т.к. вычисляем 4 разные суммы скалярно);
2) Сложение четырёх переменных, если с SSE в процессоре появились и новые параллельно работающие АЛУ: "чтение команды из памяти, декодирование команды, вычисление адреса упакованных операндов, считывание упакованных операндов, выполнение сразу 4 операции параллельно, запись пакетно 4 результата";
3)Сложение четырёх переменных, если с SSE в процессоре появились только новые команды и регистры: "чтение команды из памяти, декодирование команды, вычисление адреса упакованных операндов, считывание упакованных операндов, выполнение последовательно на конвейере 4 операции, запись пакетно 4 результата".
2-ой вариант самый быстрый, но 2 и 3 вариант дают значительное ускорение относительно 1. Вопрос: 2 или 3 вариант действительно работает в процессоре?
Я не программист и много чего не знаю.
Надо маны покурить на данные процессоры. Посмотреть ассемблер на них.
Но главное проверить работоспособность на практике, замерить быстродействие.
MihaNix вне форума   Ответить с цитированием
Старый 08.11.2011, 13:05   #2
Меню пользователя vodimitriy
В процессе регистрации по e-mail
  
Вопрос был наводящим, так как вы писали, что алгоритмы на одном ядре можно распараллелить, если они хорошо ложатся на SIMD. Тогда вы должны знать и точно быть уверены, что SIMD в ЦП выполняются именно параллельно. Если вы не проверяли и не знаете как именно выполняется SIMD команда на ЦП, то строить утверждения по данному направлению не имеет смысла.
"Проверить работоспособность на практике, замерить быстродействие" - в этом случае мы сможем сказать, что SIMD команды и правда быстрее при работе с векторами, но без мелких архитектурных особенностей ЦП (а их нам точно не расскажут) разобраться что к чему будет почти невозможно.
vodimitriy вне форума   Ответить с цитированием
Старый 08.11.2011, 13:14   #3
Меню пользователя MihaNix
Старожил
 
Аватар для MihaNix
  
Сложение и умножениемассивов например:
float a[4]={5.0, 2.0, 3.0, 4.0};
float b[4]={123.4, 25.2, 54.2, 54.3};

_asm
{
movups xmm0, a;
movups xmm1, b;
addps xmm1, xmm0;
movups a, xmm1;
}
int r=0,x;
for(x=0;x<4;x++)
{

printf("%f\n",a[r]);
r++;
}
return 0;
}
Получается быстрее, чем каждое по отдельности

Добавлено через 3 минуты 32 секунды
Но это простейший пример и от архитектуры не зависит. Выполнится на всех процессорах с SSE
MihaNix вне форума   Ответить с цитированием
Старый 08.11.2011, 13:16   #4
Меню пользователя vodimitriy
В процессе регистрации по e-mail
  
Понятно, что производители ЦП добавили лишнюю аппаратуру, чтоб ускорить решение некоторых задач. А как работает эта аппаратура? Параллельно?

Кстати этот код из википедии выполнится медленнее, чем отдельные команды на С++ без ассемблерной вставки. Благодаря оптимизации компилятора.

Последний раз редактировалось Георгий, 08.11.2011 в 13:46.
vodimitriy вне форума   Ответить с цитированием
Старый 08.11.2011, 13:30   #5
Меню пользователя MihaNix
Старожил
 
Аватар для MihaNix
  
А какой код выдает компилятор на выходе?
Каким вы пользуетесь?

Добавлено через 4 минуты 59 секунд
Как правильно записать? В цикле что ли?

Добавлено через 33 секунды
На сколько медленнее выполняется?
MihaNix вне форума   Ответить с цитированием
Старый 08.11.2011, 13:35   #6
Меню пользователя vodimitriy
В процессе регистрации по e-mail
  
Эх. Быстрее в бесконечность раз Любой нормальный компилятор, если все значения для некоторых команд уже известны на этапе комиляции, выполнит их. Например, вы пишете a=5; b=6; c=a+b; e=c+j; В этом коде переменная j вводится с клавиатуры. Т.к. все остальные переменные известны, то компилятор вместо всего вышеописанного скомпилит одну команду e=11+j; (команда c=a+b; выполняться не будет). Так и в вашем случае весь код будет просчитан на этапе компиляции и программа сделает только вывод на экран. Получается с ассемблерной вставкой она будет считать, без неё не будет.
vodimitriy вне форума   Ответить с цитированием
Старый 08.11.2011, 13:40   #7
Меню пользователя MihaNix
Старожил
 
Аватар для MihaNix
  
В данном случае согласен. А если они заданы как переменные...?
MihaNix вне форума   Ответить с цитированием
Старый 08.11.2011, 13:42   #8
Меню пользователя vodimitriy
В процессе регистрации по e-mail
  
Вопрос был изначально в том, как выполняются SSE команды параллельно или нет. Вы сказали, что параллельно, но из чего следует такой вывод, не объяснили.
То, что SSE команды быстрее выполняют операции над векторами уже доказали в 80-х. Обсуждать это смысла нет.

В первом посте под цифрами 2 и 3 я объяснил за счёт чего может быть ускорение при использовании SSE команд.

Но между 2 и 3 есть серьёзные различия в аппаратной части.

Заметка модератора:
Пожалуйста избегайте даблпостинга. Если он случился - скопируйте инфрмацию из идущих подряд постов в первый в череде, а последущие удалите. <Георгий>

Последний раз редактировалось Георгий, 08.11.2011 в 13:51.
vodimitriy вне форума   Ответить с цитированием
Старый 08.11.2011, 15:54   #9
Меню пользователя MihaNix
Старожил
 
Аватар для MihaNix
  
Я понял в чем отличия.
Но дайте мне небольшую скидочку - я ведь юзер а не программист.
И мне в принципе должно быть пофигу - как оно выполняется, главное чтобы лучше и быстрее,...
Но есть конечно любопытство - этого наверно не выбить из меня
MihaNix вне форума   Ответить с цитированием
Старый 08.11.2011, 17:24   #10
Меню пользователя vodimitriy
В процессе регистрации по e-mail
  
Я немного другое имел ввиду. Вы делаете утверждение A. Приходит на форум человек, который с компами на Вы. Читает ваше утверждение и думает: "Ага, видимо он в компах хорошо разбирается, скорее всего A - это истина". Запоминает это утверждение и всем другим тоже с пеной у рта начинает доказывать, что А правильно и никак иначе. И таких людей появляется всё больше, которые сами не думают и прикрываются словами других. А если написать "Возможно А" или "Как я понимаю А" или "Если я правильно думаю, то будет А". Т.е. не писать А как утверждение, а наоборот сказать, что вы сами в нём не до конца уверены. Тогда другой человек перед тем как кричать, что А - истина, захочет это проверить, чтоб не оказаться треплом
Хорошие юзеры иногда понимают в компьютерах больше, чем плохие программисты.
Любопытство - это очень хорошо Только чем больше вы знаете, тем уважительнее к вам люди относятся и считают ваши слова более весомыми, а главное больше вам доверяют, поэтому надо быть более осторожным, когда что-то утверждаете.
vodimitriy вне форума   Ответить с цитированием
Старый 09.11.2011, 02:41   #11
Меню пользователя MihaNix
Старожил
 
Аватар для MihaNix
  
Но второе ведь верно? Сложение за один такт пройдет.

Добавлено через 55 секунд
если пересылку данных не считать.

Добавлено через 6 минут 46 секунд
Да, получается 4 такта, в идеальном случае.
MihaNix вне форума   Ответить с цитированием
Старый 15.11.2011, 06:24   #12
Меню пользователя MihaNix
Старожил
 
Аватар для MihaNix
  
Стареньакя статейка: http://habrahabr.ru/blogs/hardware/80050/
Не знаю - правда ли?
MihaNix вне форума   Ответить с цитированием
Старый 15.11.2011, 10:00   #13
Меню пользователя vodimitriy
В процессе регистрации по e-mail
  
"Но второе ведь верно? Сложение за один такт пройдет." да, всё верно, если аппаратно так и реализовано, например, два 64-битных FPU "объединяются" и выполняют операцию над 128-битным регистом.
"Стареньакя статейка: http://habrahabr.ru/blogs/hardware/80050/
Не знаю - правда ли?" статья немного противоречива. В ней написано, что компания AMD нормальный компилятор для своих процессоров не сделала, а Intel постоянно улучшает свой компилятор. Почему Intel, делая компилятор для своих процессоров, должна его подстраивать и под другие фирмы? AMD из-за своих недоработок подаёт в суд на Intel, а Intel за бесплатно должна писать хорошие компиляторы всем другим фирмам, производящим ЦП? У процессоров Intel появилась новая функция, её поддержку добавили в компилятор, у AMD появилась новая функция, так работники фирмы Intel должны подорваться и тоже начать эту функцию внедрять в компилятор? Получается AMD никому и ничего не должна - хотите делать хорошее ПО ищите компилятор сами, мы вам его делать не будем. А Intel должна сделать компиляторы для всех процессоров. Не вижу проблемы, если Intel для своих процессоров использует новые алгоритмы компиляции, учитывающие все их особенности, а для AMD более старые и более универсальные.
vodimitriy вне форума   Ответить с цитированием
Ответ


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Справочник словарей
Словари русского языка - www.gramota.ru Яndex - Словари Википедия - ru.wikipedia.org

Часовой пояс GMT +4, время: 05:18.


Powered by: vBulletin, ©2000 - 2007, Jelsoft Enterprises Limited.
Перевод: zCarot
Распространение информации возможно только с письменного разрешения администрации издания.

THG.ru ("Русский Tom's Hardware Guide") входит в международную сеть TG Publishing

РЕКЛАМА

Rambler's Top100 Рейтинг@Mail.ru