The OpenNET Project / Index page

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

Релиз набора компиляторов GCC 4.4.3 и планы подготовки GCC 4.5

21.01.2010 23:33

Вышел корректирующий релиз набора компиляторов GCC 4.4.3, в котором проведена работа по исправлению ошибок, регрессивных изменений и проблем с совместимостью.

Дополнительно опубликован статус подготовки будущей версии GCC 4.5. Сообщается о наличии 18 нерешенных первичных регрессий (в декабре их было 26), после устранения которых будет выпущен кандидат в релизы.

Некоторые новшества будущей версии GCC 4.5:

  • Задействована математическая библиотека MPC для более точных вычислений на этапе компиляции;
  • В состав войдет новый оптимизатор на этапе компоновки;
  • Будет реализована экспериментальная поддержка некоторых возможностей стандарта C++0x;
  • Продолжится интеграция наработок проекта Graphite с реализацией поддержки автоматического распараллеливания операций.


  1. Главная ссылка к новости (http://gcc.gnu.org/...)
  2. OpenNews: Линус Торвальдс о борьбе с оптимизатором GCC
  3. OpenNews: Релиз набора компиляторов GCC 4.4.0
  4. OpenNews: В GCC 4.4 появится поддержка автоматического распараллеливания циклов
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/25107-gcc
Ключевые слова: gcc
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (27) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.1, pavlinux (ok), 02:24, 22/01/2010 [ответить] [﹢﹢﹢] [ · · · ]  
  • –2 +/
    Да, Графит чудная штука, она умудряется из цикла

    for ( i = 0 ; i < 4; i++)
          A[i] = i + 100;

    сделать  

    {
    #pragma cpu(0)
          A[0] = 0 + 100;
    #pragma cpu_end
    #pragma cpu(1)
          A[1] = 1 + 100;
    #pragma cpu_end
    #pragma cpu(2)
          A[2] = 2 + 100;
    #pragma cpu_end
    #pragma cpu(3)
          A[3] = 3 + 100;
    #pragma cpu_end
    }

    На 4 горшках :)

    Естественно, никакой паралеллизации вот в таких циклах и не предвидеться:

    for (i = 0; i < strlen(strcmp(a_str,  b_str)); i++) {

             A[ strlen(a_str) + i] = 2*strlen(b_str) + i/2;

    }

     
     
  • 2.3, Sw00p aka Jerom (?), 10:31, 22/01/2010 [^] [^^] [^^^] [ответить]  
  • +1 +/
    >>Естественно, никакой паралеллизации вот в таких циклах и не предвидеться:
    >>for (i = 0; i < strlen(strcmp(a_str,  b_str)); i++) {
    >>         A[ strlen(a_str) + i] = 2*strlen(b_str) + i/2;
    >>}

    конечно не будет если там всего одна итерация strlen(strcmp(a_str,  b_str)) == 1
    намудрили

     
     
  • 3.5, dq0s4y71 (??), 11:52, 22/01/2010 [^] [^^] [^^^] [ответить]  
  • +1 +/
    А что, GCC уже настолько умён, что при оптимизации учитывает результаты вызовов библиотечных функций?
     
     
  • 4.7, Sw00p aka Jerom (?), 12:59, 22/01/2010 [^] [^^] [^^^] [ответить]  
  • +/
    темболее не будет оптимизировать этот кусок кода
    а написать проверку на такого рода оптимизации не составляет труда

    вывод по крайней мере функции сравнения строк предсказуем либо 0 либо 1
    и результат стрлен в таком случае тоже определён == 1

     
     
  • 5.9, Аноним (-), 13:06, 22/01/2010 [^] [^^] [^^^] [ответить]  
  • +/
    >вывод по крайней мере функции сравнения строк предсказуем либо 0 либо 1

    там три значения (-1, 0, 1) man strcmp
    It returns an integer less than, equal to, or greater than zero

    >и результат стрлен в таком случае тоже определён == 1

    Вы реально считаете что strlen(1) вернёт 1 ? без комментариев :)

     
     
  • 6.10, Sw00p aka Jerom (?), 13:25, 22/01/2010 [^] [^^] [^^^] [ответить]  
  • +/
    -1, 0, 1  ---- предсказуем ????

    >>Вы реально считаете что strlen(1) вернёт 1 ? без комментариев :)

    warning: passing argument 1 of ‘strlen’ makes pointer from integer without a cast

     
  • 6.11, dq0s4y71 (??), 13:51, 22/01/2010 [^] [^^] [^^^] [ответить]  
  • +/
    >там три значения (-1, 0, 1) man strcmp

    Там не три значения. Вы же сами цитируете:

    >It returns an integer less than, equal to, or greater than zero

    strcmp() обычно возвращает разность кодов двух первых несовпадающих символов. Но тем непредсказуемее будет результат вызова strlen(strcmp(...)) :)

     
     
  • 7.13, Sw00p aka Jerom (?), 14:14, 22/01/2010 [^] [^^] [^^^] [ответить]  
  • +/
    речь идёт о С

    strlen(strcmp(...))

    стрлен ждёт строку  и не кастит интеджер в стринг

     
     
  • 8.17, dq0s4y71 (??), 15:43, 22/01/2010 [^] [^^] [^^^] [ответить]  
  • +/
    А я о чем, по-вашему, говорю С этим-то я как раз и не спорю ... текст свёрнут, показать
     
  • 8.19, pavlinux (ok), 15:50, 22/01/2010 [^] [^^] [^^^] [ответить]  
  • +/
    Ещё как кастит warning passing argument 1 of strlen makes pointer from intege... текст свёрнут, показать
     
     
  • 9.21, dq0s4y71 (??), 16:53, 22/01/2010 [^] [^^] [^^^] [ответить]  
  • +/
    Ну и где же кастит Это пятница, наверное ... текст свёрнут, показать
     
     
  • 10.27, pavlinux (ok), 20:30, 22/01/2010 [^] [^^] [^^^] [ответить]  
  • +/
    А сегодня пятница Ейп ... текст свёрнут, показать
     
  • 4.14, pavlinux (ok), 15:37, 22/01/2010 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > А что, GCC уже настолько умён, что при оптимизации учитывает
    > результаты вызовов библиотечных функций?

    Хотелось бы :)

     
  • 2.8, Аноним (-), 13:04, 22/01/2010 [^] [^^] [^^^] [ответить]  
  • +/
    > strlen(strcmp(a_str,  b_str))

    strlen от несуществующего адреса вернут Вам SIGSEGV

     
     
  • 3.15, pavlinux (ok), 15:38, 22/01/2010 [^] [^^] [^^^] [ответить]  
  • +/
    >> strlen(strcmp(a_str,  b_str))
    >
    >strlen от несуществующего адреса вернут Вам SIGSEGV

    Да чё вы пристали к strlen(strcmp()), это пример.


     

  • 1.2, Евгений (??), 04:31, 22/01/2010 [ответить] [﹢﹢﹢] [ · · · ]  
  • +2 +/
    >[оверквотинг удален]
    >#pragma cpu(0)
    >      A[0] = 0 + 100;
    >#pragma cpu_end
    >#pragma cpu(1)
    >      A[1] = 1 + 100;
    >#pragma cpu_end
    >#pragma cpu(2)
    >      A[2] = 2 + 100;
    >#pragma cpu_end
    >...

    Что ж бум надеятся что умный компилятор потом соберет этот цикл в кучу.

    Кстати, а не намудрили ли в в своем примере?
    Применять strlen к результату strcmp, больно странно :)
    for (i = 0; i < strlen(strcmp(a_str,  b_str)); i++) {
                     ^^^^^^^^^^^^^^^^

     
     
  • 2.16, pavlinux (ok), 15:41, 22/01/2010 [^] [^^] [^^^] [ответить]  
  • +/
    >Что ж бум надеятся что умный компилятор потом соберет этот цикл в
    >кучу.

    Зачем в кучу, наоборот разгонит по процам...  
    >
    >Кстати, а не намудрили ли в в своем примере?
    >Применять strlen к результату strcmp, больно странно :)

    Наоборот, вообще не мудрил, первые из дампа мозга головы написал :)


     

  • 1.4, pazke (?), 11:01, 22/01/2010 [ответить] [﹢﹢﹢] [ · · · ]  
  • +4 +/
    > If a header named in a #include directive is not found, the compiler exits immediately. This avoids a cascade of errors arising from declarations expected to be found in that header being missing.

    Ну наконец-то. Бурные аплодисменты, переходящие в овацию.

     
     
  • 2.6, аноним (?), 12:22, 22/01/2010 [^] [^^] [^^^] [ответить]  
  • +/
    Гыгы. +1
     
  • 2.18, koblin (ok), 15:48, 22/01/2010 [^] [^^] [^^^] [ответить]  
  • +/
    о да =))
     
  • 2.25, User294 (ok), 19:31, 22/01/2010 [^] [^^] [^^^] [ответить]  
  • +/
    Давно пора, блин!
     

  • 1.12, Аноним (-), 13:57, 22/01/2010 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    В версии 4.4.3 исправили баги при -O3, в частности глючность с -ftree-vectorize?
     
     
  • 2.20, pavlinux (ok), 16:42, 22/01/2010 [^] [^^] [^^^] [ответить]  
  • +/
    >В версии 4.4.3 исправили баги при -O3, в частности глючность с -ftree-vectorize?
    >

    А как она проявлялась?

     
     
  • 3.24, Аноним (-), 17:45, 22/01/2010 [^] [^^] [^^^] [ответить]  
  • +/
    При -O3 GCC при прочих оптимизациях приминяет -ftree-vectorize, на версиях gcc 4.4.x некоторые программы вылетали с ошибками из-за -ftree-vectorize. В багзилле даже баг висел.
     

  • 1.22, pavlinux (ok), 16:58, 22/01/2010 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    УРА !!!!

    > A new optimize attribute was added to allow programmers to change the
    > optimization level and particular optimization options for an individual
    > function. You can also change the optimization options via the GCC optimize
    > pragma for functions defined after the pragma.

    ...
      memmove(X, DATA, sizeof(DATA));

    #pragma GCC optimize O3
       for (x = 2 + space, i = 3; i--; x += X[i] + space) {
            Y[i].x = x;
            Z[i].x = x+i;
       }
    #pragma GCC reset_options
    ...

    или строго "for functions" ?

     
     
  • 2.26, User294 (ok), 19:37, 22/01/2010 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Ух ты, круто. А то если всю прогу компилить с -O3 бывают чудесатые глюки. А вот сильно некоторую небольшую функцию можно и протестить на глючность не проблема, в отличие от.
     
  • 2.29, Sw00p aka Jerom (?), 10:24, 23/01/2010 [^] [^^] [^^^] [ответить]  
  • +/
    я не пойму одного зачем нужно говорить компилятору что оптимизировать ???

    разве самим нельзя писать так как будет делать компилятор ????

    зачем разворачивать цикл ??? и зачем его ваще создали чтоб потом его разворачивать

     

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



    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

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