с restricted-указателями там нормально (см последние версии), с int complex -- ХЗ (хотя зачем они для сборки ядра? -- вопрос риторический). ну а вообще, в интелевом компиляторе есть много такого, чего нет в gcc (правда фичи евонные более полезны при сборке числодробилок, чем при сборке ядра). Короче, вам про Ерему, а вы... Интереснее было б узнать результаты тестов.
что значит "нормально" для restricted-указателей? я имел ввиду соответствие стандарту ANSI -- цитата из юзер мануал для icc 7.0: "The -restrict option enables the recognition of the restrict keyword as defined by the ANSI standard. By qualifying a pointer with the restrict keyword, the user asserts that an object accessed via the pointer is only accessed via that pointer in the given scope. It is the user s responsibility to use the restrict keyword only when this assertion is true. In these cases, the use of restrict will have no effect on program correctness, but may allow better optimization."
а про фичи -- у компилятора могут быть только две фичи -- хорошее соответствие стандартам и хорошая оптимизация. все остальное -- от лукавого :) Линуховая версия интел-компилера поддерживает большинство расширений от гцц. ну а на счет оптимизации, ицц генерит хороший код при использовании SSE/SSE2 и (!) умеет _автоматически_ векторизовать код.
Да, чуть не забыл -- OpenMP (автоматическое (почти) распараллеливание)!!! вот фича, всем фичам фича!!
сорри, про Атлон забыл. Вообще говоря, Ваш вопрос некорректен -- это супернаглость требовать от _интелевого_ компилятора поддержки процов-конкурентов.
а вообще, я не пытался сказать, что ицц рвет гцц как Тузик грелку", я просто сказал, что для числодробилок на х86/IA64 ицц -- очень неплохой компилер. Так что сорри, если ненароком обидел фанов ГЦЦ :)
> OpenMP (автоматическое (почти) распараллеливание)!!! вот фича, всем фичам фича!!
Для Athlon64 забудьте.
> хорошее соответствие стандартам
Что значит "хорошее"? Соответствие либо есть, либо нет. Есть еще и расширения. В стандарте, например, нет __real__ , а в Intel оно есть. А вот int complex как?
1. про "самую известную" -- не забыл, я ее просто не знаю. это какая?
2. и, кстати, кто требует юзать только интеловские процы?
3. и про поддержку НТ в компиляторе -- ничего в этом крамольного нет и бросаться словами "сами поняли чё сказали" не надо. НТ это не SMP и при распараллеливании программы компилер должен это учитывать.
Все это уход от конкретных вопросов. Пока я вижу только фразы с рекламной страницы Intel, которую я читал перед загрузкой icc и icl. Вы мне примеры на HT приведите.
> Помнится Линус говорил недавно: "А не использовать ли нам для сборки ядра еще какой-нить компилятор кроме ГЦЦ?" Вот, похоже БСДшники его и послушали.
Интересно, а какой компайлер будут использовать для IBM T-Rex? Саныч уже ославился с Hercules, теперь жду очередных ляпов про что-нить типа USS.
"за примерчиком в студию" сами сходите на intel.com. там в разделе для девелоперов есть статьи именно на тему оптимального распараллеливания на НТ (на вскидку по памяти -- вместо простого распараллеливания счетного процесса на две нити юзается следующий подход -- счетная нить одна, а вторая бежит рядом и закачивает в кэш данные, которые понадобятся основному процессу для дальнейшей обработки).
ну а про "Покажите Ваши практические познания в icc". давайте не будем. это уже пздеш. я на ваши вопросы ответил? ответил. про "самую главную" фичу спросил -- спросил, вы не ответили. а уж экзаменовать меня -- уж простите...
The parallelization methods used by Intel's compiler designers are quite interesting. The compiler starts by analyzing the data, pointer and code dependencies, and builds an internal table that shows where there are static or dynamic dependencies. Once these dependencies are identified, the compiler restructures the source code, isolating independent sections of code from each other. In some cases, if the dependencies are static, it also changes the code to substitute independent elements, for example replacing constant variables with literal constants. To pick another example, an if/then statement might be converted into a simpler "max" or "min" operation, eliminating a branch. Finally, the rearranged code is compiled into separate threads.
А separate threads, я так понимаю, могут исполнятся параллельно.
" Auto-Parallelization: The Intel C++ Compiler 7.1 includes an Auto-parallelization feature for automatic threading of loops. This feature provides developers with an easy way to take advantage of parallelism to improve application performance on multiprocessor systems. This option detects parallel loops capable of being executed safely in parallel and automatically generates multithreaded code for these loops. Automatic parallelization relieves the user from having to deal with the low-level details of iteration partitioning, data sharing, thread scheduling and synchronizations. It also provides the benefit of the performance available from multiprocessor systems, and systems that support HyperThreading technology. " http://www.intel.com/software/products/compilers/clin/clinux.htm
Э нет, коллеги, так дело не пойдет. Вы мне ДОКАЖИТЕ это на примере конкретного кода, а не copy-paste рекламные материалы уважаемой фирмы Intel. Вы мне код дайте, а я проверю Ваши результаты.
Вы не уходите, пожалуйста, от вопроса. ТО, что можно пересобрать большую часть кода при помощи icc, очевидно. А как пересобрать библиотеки самого icc? Я Вас спрашиваю - icc native *BSD или нет?
> Э нет, коллеги, так дело не пойдет. Вы мне ДОКАЖИТЕ это на примере конкретного кода, а не copy-paste рекламные материалы уважаемой фирмы Intel. Вы мне код дайте, а я проверю Ваши результаты.
Да что ты к людЯм прикопался. Напиши сам что-то типа
for(int i=0;i < 10000;i++)
a[i] = b[i]*c[i] + d[i];
и посмотри, чего нагенерит gcc, а чего icc. Сам и увидишь. А уж если и директивы OMP знаешь, так вообще классно. А то умник нашелся, нигилист хренов.
ISO C99 supports complex floating data types, and as an extension GCC supports them in C89 mode and in C++, and supports complex integer data types which are not part of ISO C99. You can declare complex types using the keyword _Complex. As an extension, the older GNU keyword __complex__ is also supported
теперь уж точно -- на все твои вопросы ответил :)))
Если я уберу libcxa.so.3 будет ли у меня работать скомпилированная интелом программа? ( вычисляющая sin(1), например). Сколько icc тянет, да все, небось в исходных кодах! :)