Комментарии участников:
Потому-что конец, повысить качество можно тремя способами: увеличив частоту, увеличив параллелизм на уровне инструкций и кардинально снизив задержки доступа к памяти.
Частоту уже не увеличить, так-как зависимость частоты к тепловыделению практически линейная.
Обычные программы на C, C++, java на уровне инструкций больше чем 5-7 инструкций за такт не параллеляться. Никак.
Революций в оперативной памяти не предвидится, всё идёт по экстенсивному развитию ddr2, ddr3, ddr4 — скорость передачи большими блоками растёт, но задержки доступа к блокам не уменьшаются, а даже увеличиваются.
Частоту уже не увеличить, так-как зависимость частоты к тепловыделению практически линейная.
Обычные программы на C, C++, java на уровне инструкций больше чем 5-7 инструкций за такт не параллеляться. Никак.
Революций в оперативной памяти не предвидится, всё идёт по экстенсивному развитию ddr2, ddr3, ddr4 — скорость передачи большими блоками растёт, но задержки доступа к блокам не уменьшаются, а даже увеличиваются.
Обычные программы на C, C+, java на уровне инструкций больше чем 5-7 инструкций за такт не параллеляться. Никак.Можно про pure C поподробней, а то чет мне не ясен механизм распараллеливания и что из себя представляет множество обычных программ.
Параллелизм на уровне инструкций, процессоры же суперскалярные, например core2 имеет 5 вычислительных блоков могущих работать одновременно.
То-есть если процессор встретит 5 команд идущих подряд, исходные данные которых не зависят от результата предыдущих команд, то он исполнит их одновременно.
То-есть если процессор встретит 5 команд идущих подряд, исходные данные которых не зависят от результата предыдущих команд, то он исполнит их одновременно.
апример core2 имеет 5 вычислительных блоков могущих работать одновременно.
5 взаимозаменяемых блоков?
если процессор встретит 5 команд идущих подряд, исходные данные которых не зависят от результата предыдущих команд
Ты на ассемблере писал когда-нить? Приведи пример таких пяти команд.
Даже на уровне компилятора распараллеливание неоптимизированного сишного кода я могу представить с трудом, а уж тем более на уровне машинного кода.
В плане оптимизации неоптимизированного кода круче всех ARM со своими условными операциями, позволяющими уменьшить количество ветвлений, но тут опять же все компилятор делает.
вообще-то, кроме параллелизма на уровне команд выскоуровневого языка, сам процессор умеет делать "предсказания" дальнейших машинных опреций
не уверен правда что он сможет эти операции развести по блокам.
а на счет примера
присвоение одной матрице другой.
не уверен правда что он сможет эти операции развести по блокам.
а на счет примера
5 команд идущих подряд, исходные данные которых не зависят от результата предыдущих команд
присвоение одной матрице другой.
присвоение одной матрице другой.Вы имели ввиду копирование куска памяти? :) Имхо неудачным пример.
Вообще операции с матрицами делаются библиотечными функциями SIMD-инструкциями, что тоже редко содержит 5 подряд идущих команд.
"Пользователи покупают мегагерцы" — сказала Интел и выпустила Pentium 4 (который впоследствии оказался тупиковым).
"Пользователи покупают ядра" — сказала Интел…
"Пользователи покупают ядра" — сказала Интел…
Да уж, позвольте поволноваться. Ведь, все в ажуре только благодаря тому что смогли вовремя отказаться от P4 :)