![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| kamre |
|
||||||||||||||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 330 Регистрация: 24.3.2006 Репутация: 1 Всего: 13 |
Вообщем, имеется программа на fortran 90, интенсивно использующая вычисления с комплексными числами. Подумываю переписать ее на C++ и развивать дальше. Программа работает долго, поэтому очень важным критерием является скорость получаемого бинарного кода. Решил сравнить скорость работы с комплексными числами на C++ и на Fortran90, чтобы понять, не упадет ли производительность.
Вот код на Fortran 90:
А вот эквивалентная программа на C++, использующая тип std::complex<double>, который является аналогом complex(8) из Fortran 90:
Компиляторы используются следующие:
и
Компилирую вот так:
и так:
На моем ноутбуке (Processor (CPU): Intel® Celeron® M CPU 430 @ 1.73GHz) получаются вот такие результаты: для c++:
для fortran:
На рабочем компьютере пока еще не тестировал (хотя там только win2k, msvc-2005 и ifort 9.1), но все равно 4.966/3.742 ~= 1.33, т.е. c++ медленнее на 33%. Не слишком ли это много для такой простой программки? Программа на фортране сейчас считает по несколько часов, так что не хотелось бы ухудшить производительность на треть при переходе на c++. |
||||||||||||||||
|
|||||||||||||||||
| Daevaorn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2155 Регистрация: 29.11.2004 Где: Москва Репутация: 51 Всего: 70 |
А компилятором С++ от Intel почему не протестировали? А то получаютсяне не очень равные условия. Хотя то что фортран быстрее вполне ожидаемо.
|
|||
|
||||
| kamre |
|
||||||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 330 Регистрация: 24.3.2006 Репутация: 1 Всего: 13 |
А почему ожидаемо? Потому что в fortran тип комплексных чисел на уровне компилятора, а в c++ на уровне библиотеки stl? На самом деле потестировал. Но результаты совсем плохие получились.
Комипилировал так:
Вот такие результаты:
Честно говоря, никогда не разбирался с компилятором для c++ от Intel. Возможно не правильно компилирую...Глянул man, там куча опций для различных оптимизаций... А с ним должны свои реализации stl идти или нет? |
||||||||
|
|||||||||
| Ln78 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 274 Регистрация: 25.11.2006 Репутация: 13 Всего: 15 |
Когда-то я тоже такое сравнение проводил, только использовал для фортрана транслятор то ли от MS (вроде именно его), то ли Compaq. Для С++ использовал VS7.0 и C++Builder6.0, сравнивал как стандартный класс complex, так и свой собственный, ещё давно написанный (я, вообще, "изобретатель велосипедов"). Борландовский оказался хуже всех. Для VS обнаружил какую-то непонятную особенность: операция деления комплексных чисел выполнялась на порядок медленнее, например, умножения. Собственная реализация оказалась неуступающей фортрановской, её и оставил для дальнейшего использования, цель сравнения была как раз выяснить, не пора ли её выбросить. Но это было лет 5 назад, сейчас этими задачами не занимаюсь, так что, возможно, сведения устарели.
|
|||
|
||||
| Daevaorn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2155 Регистрация: 29.11.2004 Где: Москва Репутация: 51 Всего: 70 |
||||
|
||||
| kamre |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 330 Регистрация: 24.3.2006 Репутация: 1 Всего: 13 |
В смысле сколько? В первом же посте есть время для Intel Fortran. А это я просто ту самую c++ программку скомпилировал компилятором Intel c++. |
|||
|
||||
| nickless |
|
|||
![]() Гентозавр ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2976 Регистрация: 29.8.2005 Где: Germany Репутация: 19 Всего: 181 |
kamre, может стоит поискать специализированную либу для математических вычислений, а не переписывать кучу кода на С++? Библиотеки скорее всего неплохо оптомизированы, может ассемблером или тем же фортраном
Я правда такими либами ни разу не пользовался, могу только предложить соответствующий раздел портажей Gentoo, в Suse все эти либы скорее всего тоже есть. -------------------- ![]() Real men don't use backups, they post their stuff on a public ftp server and let the rest of the world make copies - Linus Torvalds |
|||
|
||||
| kamre |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 330 Регистрация: 24.3.2006 Репутация: 1 Всего: 13 |
nickless, пока "куча кода" на фортране не такая уж и большая, и вполне обозримая. В ней не используются никакие сторонние библиотеки. Просто если развивать этот код дальше, то мне кажется, что переход на c++ может дать некоторые преимущества. Но если при таком переходе сильно просядет производительность откомпилированной программы (раза в 1.5 и более), то это не очень оправданный переход. Подскажите, какие-нибудь интересные сравнения в интернете на тему производительности кода на Fortran 90 и на С++. Пока у меня в гугле что-то старенькое все находится и не очень по теме. |
|||
|
||||
| kamre |
|
||||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 330 Регистрация: 24.3.2006 Репутация: 1 Всего: 13 |
Сравнил на работе.
Процессор: Intel® Pentium® 4 CPU 3.00GHz. Вот такие результаты вышли:
Это сообщение отредактировал(а) kamre - 22.10.2007, 14:24 |
||||||
|
|||||||
| SergeCpp |
|
|||
![]() ![]() ![]() Профиль Группа: Участник Сообщений: 955 Регистрация: 8.8.2005 Где: At Home Репутация: 15 Всего: 124 |
Technical Report on C++ Performance
(Note this document from Bjarne Stroustrup's Home Page) PDF, 189 pages, 1.2 megs The aim of this report is: • to give the reader a model of time and space overheads implied by use of various C++ language and library features, • to debunk widespread myths about performance problems, • to present techniques for use of C++ in applications where performance matters, and • to present techniques for implementing C++ Standard language and library facilities to yield efficient code. As far as run-time and space performance is concerned, if you can afford to use C for an application, you can afford to use C++ in a style that uses C++’s facilities appropriately for that application. This report first discusses areas where performance issues matter, such as various forms of embedded systems programming and high-performance numerical computation. After that, the main body of the report considers the basic cost of using language and library facilities, techniques for writing efficient code, and the special needs of embedded systems programming. Complex Arithmetic: In the Intersection of C and C++
The Standard Librarian: Complex Numbers Это сообщение отредактировал(а) SergeCpp - 22.10.2007, 16:01 |
|||
|
||||
| SergeCpp |
|
|||
![]() ![]() ![]() Профиль Группа: Участник Сообщений: 955 Регистрация: 8.8.2005 Где: At Home Репутация: 15 Всего: 124 |
Template metaprogramming
Blitz++
Blitz++ examples, also look at FFT implementation |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |