Вышел (http://gcc.gnu.org/ml/gcc/2010-01/msg00397.html) корректирующий релиз набора компиляторов GCC 4.4.3 (http://gcc.gnu.org/gcc-4.4/), в котором проведена работа по исправлению (http://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&...) ошибок, регрессивных изменений и проблем с совместимостью.
Дополнительно опубликован (http://gcc.gnu.org/ml/gcc/2010-01/msg00398.html) статус подготовки будущей версии GCC 4.5 (http://gcc.gnu.org/gcc-4.5/). Сообщается о наличии 18 нерешенных первичных регрессий (в декабре их было 26), после устранения которых будет выпущен кандидат в релизы.Некоторые новшества (http://gcc.gnu.org/gcc-4.5/changes.html) будущей версии GCC 4.5:
- Задействована математическая библиотека MPC (http://www.multiprecision.org/) для более точных вычислений на этапе компиляции;
- В состав войдет новый оптимизатор на этапе компоновки;
- Будет реализована экспериментальная поддержка некоторых возможностей стандарта C++0...URL: http://gcc.gnu.org/
Новость: http://www.opennet.me/opennews/art.shtml?num=25107
Да, Графит чудная штука, она умудряется из цикла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;
}
>>Естественно, никакой паралеллизации вот в таких циклах и не предвидеться:
>>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
намудрили
А что, GCC уже настолько умён, что при оптимизации учитывает результаты вызовов библиотечных функций?
темболее не будет оптимизировать этот кусок кода
а написать проверку на такого рода оптимизации не составляет трудавывод по крайней мере функции сравнения строк предсказуем либо 0 либо 1
и результат стрлен в таком случае тоже определён == 1
>вывод по крайней мере функции сравнения строк предсказуем либо 0 либо 1там три значения (-1, 0, 1) man strcmp
It returns an integer less than, equal to, or greater than zero>и результат стрлен в таком случае тоже определён == 1
Вы реально считаете что strlen(1) вернёт 1 ? без комментариев :)
-1, 0, 1 ---- предсказуем ????>>Вы реально считаете что strlen(1) вернёт 1 ? без комментариев :)
warning: passing argument 1 of ‘strlen’ makes pointer from integer without a cast
>там три значения (-1, 0, 1) man strcmpТам не три значения. Вы же сами цитируете:
>It returns an integer less than, equal to, or greater than zero
strcmp() обычно возвращает разность кодов двух первых несовпадающих символов. Но тем непредсказуемее будет результат вызова strlen(strcmp(...)) :)
речь идёт о Сstrlen(strcmp(...))
стрлен ждёт строку и не кастит интеджер в стринг
>речь идёт о СА я о чем, по-вашему, говорю? :)
>
>strlen(strcmp(...))
>
>стрлен ждёт строку и не кастит интеджер в стрингС этим-то я как раз и не спорю.
>речь идёт о С
>
>strlen(strcmp(...))
>
>стрлен ждёт строку и не кастит интеджер в стрингЕщё как кастит
warning: passing argument 1 of 'strlen' makes pointer from integer without a cast
/usr/include/string.h:397: note: expected 'const char *' but argument is of type 'int'
>Ещё как каститНу и где же кастит?
>warning: passing argument 1 of 'strlen' makes pointer from integer without a cast
Это пятница, наверное. :)
А сегодня пятница?!Ейп ...
> А что, GCC уже настолько умён, что при оптимизации учитывает
> результаты вызовов библиотечных функций?Хотелось бы :)
> strlen(strcmp(a_str, b_str))strlen от несуществующего адреса вернут Вам SIGSEGV
>> strlen(strcmp(a_str, b_str))
>
>strlen от несуществующего адреса вернут Вам SIGSEGVДа чё вы пристали к strlen(strcmp()), это пример.
>[оверквотинг удален]
>#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++) {
^^^^^^^^^^^^^^^^
>Что ж бум надеятся что умный компилятор потом соберет этот цикл в
>кучу.Зачем в кучу, наоборот разгонит по процам...
>
>Кстати, а не намудрили ли в в своем примере?
>Применять strlen к результату strcmp, больно странно :)Наоборот, вообще не мудрил, первые из дампа мозга головы написал :)
> 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.Ну наконец-то. Бурные аплодисменты, переходящие в овацию.
Гыгы. +1
о да =))
Давно пора, блин!
В версии 4.4.3 исправили баги при -O3, в частности глючность с -ftree-vectorize?
>В версии 4.4.3 исправили баги при -O3, в частности глючность с -ftree-vectorize?
>А как она проявлялась?
При -O3 GCC при прочих оптимизациях приминяет -ftree-vectorize, на версиях gcc 4.4.x некоторые программы вылетали с ошибками из-за -ftree-vectorize. В багзилле даже баг висел.
УРА !!!!> 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" ?
Ух ты, круто. А то если всю прогу компилить с -O3 бывают чудесатые глюки. А вот сильно некоторую небольшую функцию можно и протестить на глючность не проблема, в отличие от.
я не пойму одного зачем нужно говорить компилятору что оптимизировать ???разве самим нельзя писать так как будет делать компилятор ????
зачем разворачивать цикл ??? и зачем его ваще создали чтоб потом его разворачивать