В списке рассылки GCC опубликован (http://gcc.gnu.org/ml/gcc/2009-03/msg00239.html) план реализации автоматического распараллеливания циклов в GCC. Ранее в дерево исходных текстов GCC был интегрирован код проекта Graphite (http://gcc.gnu.org/wiki/Graphite), в рамках которого была разработана технология оптимизации через обеспечение параллельного выполнения циклических операций. Разработка Graphite велась при участии компании IBM. Для обеспечения автоматического распараллеливания операций код Graphite будет комбинирован с генератором кода autopar (http://autopar.sourceforge.net/), основанным на реализации спецификаций OpenMP (http://en.wikipedia.org/wiki/OpenMP), созданной в рамках проекта GOMP (http://gcc.gnu.org/projects/gomp/).
Начальная поддержка автоматического распараллеливания появится в следующем релизе - GCC 4.4. Разработка позволит значительно увеличить производительность обычных приложений на многоядерных процессорах, созданных без использования специальных библиотек расп...URL: http://www.phoronix.com/scan.php?page=news_item&px=NzEzNA
Новость: http://www.opennet.me/opennews/art.shtml?num=20697
Давно пора!
Теперь зависший процесс будет грузить все ядра заместо одного?
да, запоздали они, запоздали )
Прикольно.Представляю себе как взлетит скорость.Правда как бы при таком масштабе изменений глюков не отхватить...
На десктопах может быть даже будет иногда заметно. На серверах вряд ли, скорее даже будет мешать - там уже давно распараллеливают другими методами, эта самодеятельность только создаст фактор непредсказуемости. Вот для числодробилок это действительно интересно. Вы часто пользуетесь числодробилками? Шутка :)
>скорее даже будет мешать - там уже давно распараллеливают другими методами,
>эта самодеятельность только создаст фактор непредсказуемости.А что, насильно привязать процесс к конкретному процессору (если вдруг оно реально зачем-то надо) не судьба?
>Вот для числодробилок это действительно интересно.
>Вы часто пользуетесь числодробилками? Шутка :)Знаете, (де)кодирование видео и аудио - тоже числодробилка.Шифрование всякое, etc.Не будем ускорять, да? :)
лишь бы не криво, а так лучше поздно чем никогда)
>эта самодеятельность только создаст фактор непредсказуемости.По-видимому эта самодеятельность будет включаться специальным ключиком в командной строке вызова компилятора. А раз так, то никто никого не будет заставлять использовать эту фичу.
Надо думать
Разработчики уже подумали за вас.
Если бы распаралеливался foreach, то можно было бы быть спокойными, а если for, то можно и огрести неприятных эффектов
>Если бы распаралеливался foreach, то можно было бы быть спокойными, а если
>for, то можно и огрести неприятных эффектовЭто Вы про ПХП ?
в частности
>Если бы распаралеливался foreach, то можно было бы быть спокойными, а если
>for, то можно и огрести неприятных эффектовНе бойся. Это компилятор будет определять включать распараллеливание или нет, глупых людей допускающих >0 false positive решений в данном вопросе не допустят
Как же это интересно будет сделано? На каждый цикл будет создаваться несколько процессов/нитей на разных ядрах?
Нафиг автоматику в этом деле, руками надёжнее и интереснее
>Нафиг автоматику в этом деле, руками надёжнее и интереснееЯ вижу только одну проблему: а вагон существующего софта кто перелопатит?Вы?А, ну флаг вам в руки.Можете начать с аудио-видео кодеков и шифрования :)
Железо не стоит на месте, и многие задачи, которые год назад имело смысл параллелить, сейчас спокойно обрабатываются в реальном времени на одном ядре. Скажем, на моем C2D E8500 одно ядро шифрует AES-256-CBC 100MB в секунду. Это сравнимо со скоростями дисков и сети, т.е. в большинстве случаев не является боттлнеком. Blowfish, например, еще быстрее. Про аудио кодеки вы вообще не весть к чему ляпнули - уже много лет не существует аудио кодеков, которые не укладываются в realtime. С видео тоже особых проблем нет - man mencoder | grep thread, к тому же видео оффлоудится в GPU со своей собственной параллельностью и гораздо большей эффективностью.
Короче, это автоматическое распараллеливание - фича для ленивых программистов, которая позволит в _некоторых_ случаях ускорить _некоторые_ алгоритмы. Разумеется, со своим оверхедом. А в `обычных приложениях' боттлнек вобщем-то и не в CPU, а в memory latency, так что серебряной пули нет :)
>Железо не стоит на месте, и многие задачи, которые год назад имело
>смысл параллелить, сейчас спокойно обрабатываются в реальном времени на одном ядре.Мир состоит из одних персоналок? Только из современных?
А это по-умолчанию включат?
Лучше не надо !!! Иногда второе ядро спасает... ;-(
А я тут думал, что в 4.4 сейчас заморозка кода и такие крупные изменения войдут в 4.5, к примеру ....
Меня всегда радовали методы, используемые ДЖыСиСятами для параллельных вычислений, и особенно примеры в презентациях:Этот цикл можно разогнать, хоть на 5 процессоров.
for ( i = 0; i < 5; i++)
S[i] = i;---------------
Ну и тут, на 5 основных, каждый из которых так же по пять...
for ( i=0; i<5; i++ )
for (j=0; j < 5; j++ )
S[i][j] = S[i][j]+i*j;Типа так (нулевой пропускаю)
k=1
for ( i = 0; j = k ; i < 5; i++ )
S[i][j] = S[i][j]*k; ;--------
k=2
for ( i = 0; j = k ; i < 5; i++ )
S[i][j] = S[i][j]*k;ну и так далее
k=Z
for ( i = 0; j = Z ; i < 5; i++ )
S[i][j] = S[i][j]*k;-------
Я это к чему вообще!?
Да к тому, что все результаты этих циклов известны заранее.
И 50% из них легко реализуются на указателях
остальные на 49% на препроцессоре, с генерацией БОЛЬШОЙ int ARRAY[65535][65535]
И 1% код для анализа, в котором страшно распараллеливать, - либо глюкнет, либо запутаешься.
Более интересные вещи, это генерация функций, которые буду в последствии,
уже в моей программе, сами распараллеливать, в зависимости от аргументов.Тут можно распараллелить максимум на 4, минимум 0.
if ( a < 5 )
S[i] = a;
if ( a > 25 )
S[i] = a-25;
if ( a < 5 || (S[i] - a) > 8 )
S[i-a] = 8-a;
if ( a > S[i] )
S[i] = a-25;Можно, загнать в бинарник 4 функции, которые раздельно отработают. Нафига!?
Мне нужно, что б само параллелилось на 4 CPU, когда 6 < a < 8, на 2 СPU, когда 5 < a < 25Вы скажите, ну тогда впиши эти условия в начале! Ладно! А если x < a < y :)
> А если x < a < y :)Упс, мы не на Алголе :)
Кстати sys_sched_setaffinity() и компания на кластерах работает?