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(...)) :)
| |
|
|
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.
Ну наконец-то. Бурные аплодисменты, переходящие в овацию.
| |
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 [^] [^^] [^^^] [ответить]
| +/– |
я не пойму одного зачем нужно говорить компилятору что оптимизировать ???
разве самим нельзя писать так как будет делать компилятор ????
зачем разворачивать цикл ??? и зачем его ваще создали чтоб потом его разворачивать
| |
|
|