The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

В GCC 4.4 появится поддержка автоматического распараллеливания циклов

11.03.2009 12:19

В списке рассылки GCC опубликован план реализации автоматического распараллеливания циклов в GCC. Ранее в дерево исходных текстов GCC был интегрирован код проекта Graphite, в рамках которого была разработана технология оптимизации через обеспечение параллельного выполнения циклических операций. Разработка Graphite велась при участии компании IBM. Для обеспечения автоматического распараллеливания операций код Graphite будет комбинирован с генератором кода autopar, основанным на реализации спецификаций OpenMP, созданной в рамках проекта GOMP.

Начальная поддержка автоматического распараллеливания появится в следующем релизе - GCC 4.4. Разработка позволит значительно увеличить производительность обычных приложений на многоядерных процессорах, созданных без использования специальных библиотек распараллеливания, например, Threading Building Blocks.

  1. Главная ссылка к новости (http://www.phoronix.com/scan.p...)
  2. OpenNews: Компания Intel выпустила релиз библиотеки Threading Building Blocks 2.1
  3. OpenNews: Intel открыла многопоточную библиотеку для многоядерных CPU
Лицензия: CC-BY
Тип: К сведению
Ключевые слова: gcc, optimization
При перепечатке указание ссылки на opennet.ru обязательно
Обсуждение (25) Ajax | 1 уровень | Линейный | Раскрыть всё | RSS
  • 1.1, Аноним (-), 12:45, 11/03/2009 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Давно пора!
     
     
  • 2.13, anonymous (??), 18:22, 11/03/2009 [^] [^^] [^^^] [ответить]  
  • +/
    Теперь зависший процесс будет грузить все ядра заместо одного?


     

  • 1.2, kay (ok), 12:49, 11/03/2009 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    да, запоздали они, запоздали )
     
  • 1.3, User294 (??), 12:55, 11/03/2009 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Прикольно.Представляю себе как взлетит скорость.Правда как бы при таком масштабе изменений глюков не отхватить...
     
     
  • 2.5, Cobold (??), 13:55, 11/03/2009 [^] [^^] [^^^] [ответить]  
  • +/
    На десктопах может быть даже будет иногда заметно. На серверах вряд ли, скорее даже будет мешать - там уже давно распараллеливают другими методами, эта самодеятельность только создаст фактор непредсказуемости. Вот для числодробилок это действительно интересно. Вы часто пользуетесь числодробилками? Шутка :)
     
     
  • 3.15, User294 (??), 19:05, 11/03/2009 [^] [^^] [^^^] [ответить]  
  • +/
    >скорее даже будет мешать - там уже давно распараллеливают другими методами,
    >эта самодеятельность только создаст фактор непредсказуемости.

    А что, насильно привязать процесс к конкретному процессору (если вдруг оно реально зачем-то надо) не судьба?

    >Вот для числодробилок это действительно интересно.
    >Вы часто пользуетесь числодробилками? Шутка :)

    Знаете, (де)кодирование видео и аудио - тоже числодробилка.Шифрование всякое, etc.Не будем ускорять, да? :)

     

  • 1.4, mag (??), 13:18, 11/03/2009 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    лишь бы не криво, а так лучше поздно чем никогда)
     
  • 1.6, Аноним (6), 14:16, 11/03/2009 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    >эта самодеятельность только создаст фактор непредсказуемости.

    По-видимому эта самодеятельность будет включаться специальным ключиком в командной строке вызова компилятора. А раз так, то никто никого не будет заставлять использовать эту фичу.

     
     
  • 2.7, Cobold (??), 14:29, 11/03/2009 [^] [^^] [^^^] [ответить]  
  • +/
    Надо думать
     

  • 1.8, Аноним (8), 14:48, 11/03/2009 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Разработчики уже подумали за вас.
     
  • 1.9, Аноним (8), 16:53, 11/03/2009 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Если бы распаралеливался foreach, то можно было бы быть спокойными, а если for, то можно и огрести неприятных эффектов
     
     
  • 2.14, Cobold (??), 18:25, 11/03/2009 [^] [^^] [^^^] [ответить]  
  • +/
    >Если бы распаралеливался foreach, то можно было бы быть спокойными, а если
    >for, то можно и огрести неприятных эффектов

    Это Вы про ПХП ?

     
     
  • 3.16, . (?), 21:47, 11/03/2009 [^] [^^] [^^^] [ответить]  
  • +/
    в частности
     
  • 2.20, 18498 (?), 13:31, 12/03/2009 [^] [^^] [^^^] [ответить]  
  • +/
    >Если бы распаралеливался foreach, то можно было бы быть спокойными, а если
    >for, то можно и огрести неприятных эффектов

    Не бойся. Это компилятор будет определять включать распараллеливание или нет, глупых людей допускающих >0 false positive решений в данном вопросе не допустят

     

  • 1.10, Аноним (8), 17:26, 11/03/2009 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Как же это интересно будет сделано? На каждый цикл будет создаваться несколько процессов/нитей на разных ядрах?
     
  • 1.11, AlexusBlack (?), 17:32, 11/03/2009 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Нафиг автоматику в этом деле, руками надёжнее и интереснее
     
     
  • 2.18, User294 (??), 00:15, 12/03/2009 [^] [^^] [^^^] [ответить]  
  • +/
    >Нафиг автоматику в этом деле, руками надёжнее и интереснее

    Я вижу только одну проблему: а вагон существующего софта кто перелопатит?Вы?А, ну флаг вам в руки.Можете начать с аудио-видео кодеков и шифрования :)

     
     
  • 3.25, Styx (??), 06:45, 15/03/2009 [^] [^^] [^^^] [ответить]  
  • +/
    Железо не стоит на месте, и многие задачи, которые год назад имело смысл параллелить, сейчас спокойно обрабатываются в реальном времени на одном ядре. Скажем, на моем C2D E8500 одно ядро шифрует AES-256-CBC 100MB в секунду. Это сравнимо со скоростями дисков и сети, т.е. в большинстве случаев не является боттлнеком. Blowfish, например, еще быстрее. Про аудио кодеки вы вообще не весть к чему ляпнули - уже много лет не существует аудио кодеков, которые не укладываются в realtime. С видео тоже особых проблем нет - man mencoder | grep thread, к тому же видео оффлоудится в GPU со своей собственной параллельностью и гораздо большей эффективностью.
    Короче, это автоматическое распараллеливание - фича для ленивых программистов, которая позволит в _некоторых_ случаях ускорить _некоторые_ алгоритмы. Разумеется, со своим оверхедом. А в 'обычных приложениях' боттлнек вобщем-то и не в CPU, а в memory latency, так что серебряной пули нет :)
     
     
  • 4.26, DarkFlame (ok), 17:47, 22/04/2009 [^] [^^] [^^^] [ответить]  
  • +/
    >Железо не стоит на месте, и многие задачи, которые год назад имело
    >смысл параллелить, сейчас спокойно обрабатываются в реальном времени на одном ядре.

    Мир состоит из одних персоналок? Только из современных?

     

  • 1.12, Аноним (8), 17:50, 11/03/2009 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    А это по-умолчанию включат?
     
  • 1.17, Аноним (8), 00:09, 12/03/2009 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Лучше не надо !!! Иногда второе ядро спасает... ;-(
     
  • 1.19, Аноним (8), 00:30, 12/03/2009 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    А я тут думал, что в 4.4 сейчас заморозка кода и такие крупные изменения войдут в 4.5, к примеру ....
     
  • 1.21, pavlinux (ok), 04:36, 13/03/2009 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Меня всегда радовали методы, используемые ДЖыСиСятами для параллельных вычислений, и особенно примеры в презентациях:

    Этот цикл можно разогнать, хоть на 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  :)

     
     
  • 2.23, pavlinux (ok), 04:59, 13/03/2009 [^] [^^] [^^^] [ответить]  
  • +/
    > А если x < a < y  :)

    Упс, мы не на Алголе :)

     

  • 1.22, pavlinux (ok), 04:56, 13/03/2009 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Кстати sys_sched_setaffinity() и компания на кластерах работает?
     

     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    Спонсоры:
    MIRhosting
    Inferno Solutions
    Hosting by Ihor
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2019 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру