Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Поиск рулит! Сообщения за день Все разделы прочитаны
 

Вернуться   Форум Flasher.ru > Блоги > dark256

Рейтинг: 5.00. Голосов: 2.

О многоядерности.

Запись от dark256 размещена 21.03.2013 в 13:33
Обновил(-а) dark256 21.03.2013 в 17:25

На форуме неоднократно возникали вопросы о скорости компиляции в многоядерных системах.
Имеем:
Материнская плата : Asus P5B-MX
Изготовитель : ASUSTeK Computer INC. (Asus)
Поддержка MP : Да, 4 CPU(s)
Версия MPS : 1.4
Процессор : Intel Core 2 Quad Q6600
Type : Intel Core 2 Quad
Internal Specification : Intel(R) Core(TM)2 Quad CPU Q6600 @ 2.40GHz
Номер модели : Q6600
Кодовое имя : Kentsfield
Технология : 0.065µ
CPU ID : 6.F.B
Number of Physical Processors : 1

Win XP-32 SP-2

Adobe CS3 IDE

Беру здоровенную интерфейсную ФЛА с кучей графики и внешних классов.
Запускаю диспетчер задач, компилю. Примерно 15 секунд.
Нажмите на изображение для увеличения
Название: cpuLoad.jpg
Просмотров: 297
Размер:	110.0 Кб
ID:	341

Компил идет на одном камне. Восхитительно! А что у нас еще с флэшом делается?
Запсукаю в Хроме флэшку с густой графикой.

Нажмите на изображение для увеличения
Название: cpuLoadbyFP.jpg
Просмотров: 305
Размер:	195.2 Кб
ID:	343

Ерунда какая-то. Тоже практически все на одном камне.
Надо убедиться что все в порядке.
Cinema4D без GPU рэндера. Рэндерим.

Нажмите на изображение для увеличения
Название: cpuLoadbyC4D.jpg
Просмотров: 297
Размер:	256.2 Кб
ID:	342

Красная плашка - препроцессинг световых эффектов.
Потом пошла полная загрузка всех камней. А тут все нормально.

Вот и ответ на вопрос....
Флэш все ядра НЕ грузит.

Интересно бы посмотреть как компилер грузит ядра на 7-ках и 64-х разрядных системах.

В дополнение:
Загрузка ядер при компиле той же самой флэшки под Adobe CS5.5 IDE
Одно ядро.
Нажмите на изображение для увеличения
Название: loadCS55.jpg
Просмотров: 250
Размер:	89.1 Кб
ID:	344


Загрузка ядер под Photoshop CS3.0 - картинка 3000х3000х300dpi RGB, Render Lighting Effects на одном канале.
Все 4 ядра - красные маркеры на пиках.
Нажмите на изображение для увеличения
Название: loadPSCS3.jpg
Просмотров: 288
Размер:	88.1 Кб
ID:	345
Всего комментариев 19

Комментарии

Старый 21.03.2013 16:08 iNils вне форума
iNils
 
Аватар для iNils
Adobe CS3 IDE? А на более свежем софте что?
Старый 21.03.2013 16:18 Inet_PC вне форума
Inet_PC
 
Аватар для Inet_PC
IDEA позволяет параллельно компилить, но на глаз прибавка в скорости не заметна(
Старый 21.03.2013 16:55 dark256 вне форума
dark256
 
Аватар для dark256
Дополнил.
К слову сказать.... еще на Макинтошах под фотошоп был специальный патч для многоядерных систем...
Может для ИДЕ тоже что-то такое имеется?
Обновил(-а) dark256 21.03.2013 в 17:27
Старый 21.03.2013 21:40 Bgg вне форума
Bgg
 
Аватар для Bgg
Под маком все ок. Компиляция, работа во FlashCS6, в браузере: везде используются все ядра.
Старый 21.03.2013 21:44 gloomyBrain вне форума
gloomyBrain
 
Аватар для gloomyBrain
Касательно FlashPlayer - многоядерность рендеринга (который должен выдавать много-много кадров за секунду) является довольно сложной задачей. Хотя бы потому, что придется сначала поделить все данные на несколько частей а потом собрать их обратно для вывода на экран. Учитывая что FP использует алгоритм "грязных прямоугольников" для перерисовки, придется данные копировать между потоками. Ну или очень много стоять на синхронизации самих потоков. В общем, это ни разу не оптимальное решение - рендерить 30 раз в секунду в несколько потоков.
Поэтому в последних версиях плеера (начиная с 11.4) нам оставили один поток на рендеринг и (теоритически) сколько угодно на вычисления. Выглядит логично.

Что же до компиляции - то тут Adobe, на мой взгляд, пошли очень правильным путем: в последних версиях компилятора (ASC 2.0) флешка практически все время держится скомпилированной, перекомпилируется только измененная часть. То есть компилируется все практически мгновенно, да и плюс к тому заявлена поддержка true-многопоточной компиляции. FlashIDE вполне можно научить пользоваться Flex SDK для компиляции. Так что можно сказать что в последних версиях Flash IDE умеет (или будет уметь) все делать на нескольких ядрах параллельно.
Старый 21.03.2013 22:00 dark256 вне форума
dark256
 
Аватар для dark256
Крайне неохота переходить на последние версии FlashIDE....
С души воротит.... Буду искать все-таки рецептуру для ЦС3.
Старый 23.03.2013 19:45 etc вне форума
etc
 
Аватар для etc
Никогда не видел, чтобы использовалось больше одного ядра, ни под макосью, ни под виндой.
Старый 25.03.2013 14:34 -De- вне форума
-De-
 
Аватар для -De-
Скорость компиляции волнует только в FlashIDE (и то вон говорят, что incremental build с ASC 2.0 появился). Компилить в нём только ассеты и делов)
В рендере много возможностей для использования кучи ядер, Cinema4D и архитектура видеокарт на это намекает. Могу сходу предложить растеризовать разные дисплейобжекты в разных потоках.
Старый 25.03.2013 17:57 gloomyBrain вне форума
gloomyBrain
 
Аватар для gloomyBrain
Цитата:
Могу сходу предложить растеризовать разные дисплейобжекты в разных потоках
Растеризация идет снизу вверх по дисплей листу. Как можно отрендерить одну полупрозрачную плашку отдельно от другой, если они находятся друг под другом? Думаю, что никак. То есть в общем случае алгоритм распараллеливания будет довольно таки нетривиальным. Проще рендерить в один поток или использовать Stage3D
Старый 25.03.2013 21:29 -De- вне форума
-De-
 
Аватар для -De-
Параллельно рендерить в разные битмапы эти плашки, последовательно только потом блендить.
Старый 04.04.2013 17:59 ~~~ вне форума
~~~
 
Аватар для ~~~
У меня AIR-приложение собирается на двух камнях:

OSX, Idea, AIR SDK 3.7
В Идее в настройках:
Старый 06.04.2013 04:03 wvxvw вне форума
wvxvw
 
Аватар для wvxvw
Использование ресурсов зависит от многих вещей... такой тест не говорит о программе (компиляторе), а о том, что происходило врезультате.
Компилятор (старый по крайней мере) был написан как однопоточная программа, в принципе. Но можно запускать несколько инстансов одновременно, даже в рамках одной Ява машины. А дальше уже... зависит от реализации потоков, на какой стадии делается распараллеливание, на сколько аггресивно JIT будет пытаться это сам сделать (скорее всего не будет)... В реализации потоков тоже есть свои нюансы... от вендора Ява машины будет зависеть и от конкретной архитектуры на которой оно выполняется...
Но, опять же, ASC / MXMLC - это сугобо однопоточные (по задумке) приложения. Как дела обстоят в ASC2 - я не знаю. Кстати сказать, javac оракловский / сановский тоже, вобщем, однопоточный. Скалковский компилятор вроде как многопоточный. Но компилятор - это чертовски сложная программа в которой найти большие части графов не зависящие друг от друга будет очень тяжело... Возможно на тривиальных задачах, таких как чтение файлов с диска и т.п. Но задачи типа парсинга будут в итоге сплошь утыкану локами и мутексами, и в конечном счете будут все равно выполнятся в одном потоке...
Старый 06.04.2013 21:50 СлаваRa вне форума
СлаваRa
 
Аватар для СлаваRa
ASC 2.0 вроде как поддерживает многопоточную компиляцию
Старый 08.04.2013 10:46 -De- вне форума
-De-
 
Аватар для -De-
wvxvw, для сишечки и даже плюсов существуют не то что многопоточные - распределённые компиляторы. И в качестве "части графа, не зависящей от других" там используется такая сложная и абстрактная вещь, как компиляция отдельного файла =)))
Старый 09.04.2013 15:11 wvxvw вне форума
wvxvw
 
Аватар для wvxvw
К чему это было сказано? :| Есть теоретическая основа. Есть алгоритмы, которые можно улучшить за счет того, что они будут выполнятся параллельно. Есть такие - которые нельзя. Например, сколько бы у вас не было процессоров одновременно, посчитать длину связного списка нельзя быстрее, чем за O(n). А вот, например, посчитать арифметическое среднее элементов массива параллельно можно за O(log n).
Если в графе выполнения программы много связей и зависимостей (в компиляторе иx скорее всего очень много), то выгоды от выполнения ее параллельно будет мало. С другой стороны, применение фильтров к картинкам - тут раздолье для применения параллельных вычислений (т.как можно выделить по кернелу на пиксел, например). Операции над матрицами - тоже хорошо распараллеливаются. Парсинг текста? - не распараллеливается почти никак, т.как это последоватльный процесс.
Т.е. я не думаю, что в компиляторе можно найти много мест, где параллельное выполнение принесло бы существенную выгоду. Выше тут были примеры, где независимые модули компилировались параллельно - в таком случае, да, есть смысл. А компилировать один модуль (один экземпляр компилятора запущен одновременно)? - я бы не стал пытаться распараллелить, т.как никаких перспектив.
Старый 09.04.2013 17:06 -De- вне форума
-De-
 
Аватар для -De-
К тому, что многопоточные компиляторы есть и используются в языках намного сложнее as3. И скейлинг у них очень эффективный.
Старый 10.04.2013 12:34 wvxvw вне форума
wvxvw
 
Аватар для wvxvw
Ну так все, что можно сделать легко параллельно - считать файл. Но т.как И/О все равно медленный и в большинстве случаев последовательный, то это ничего не даст. Для того, чтобы распарсить код (на токены) - знать о других файлах не нужно, но это занимает 0.001% от всего времени, которое тратится на компиляцию, все остальное выполнять параллельно не особо получится.
Если уж вы беретесь сравнивать время потраченоe на компиляцию проектов соизмеримых по объему кода, то Си компиляторы существенно медленнее, чем AS. Например, билдить проект 10-15 минут, это нормально, большие проекты могут и по несколько часов занимать.
Старый 11.04.2013 00:37 etc вне форума
etc
 
Аватар для etc
Я думал тема всё-таки не о том, использует ли компилятор все ядра али нет.
Старый 11.04.2013 01:26 -De- вне форума
-De-
 
Аватар для -De-
В С/С++ компиляция каждого с/срр файла в obj может идти совершенно параллельно, ну вот кроме может И/О, чтения с винта. Линковка obj в бинарник затем уже идёт последовательно, но она занимает намного меньше времени. И явно для флэш ситуация схожа, т.к. если для флэш нет смысла в каких-то промежуточных результатах компиляции, то как тогда работает incremental build? Явно ж при нём для изменённых файлов (и только для них) происходит компиляция в промежуточное что-то и оно затем всё собирается в swf.
 

 


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


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.