The OpenNET Project / Index page

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

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"Intel® C++ Compiler 10.1 for Linux"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [Проследить за развитием треда]

"Intel® C++ Compiler 10.1 for Linux"  
Сообщение от researcher2 (ok) on 01-Дек-07, 15:11 
Прошу помощи и совета!

Простая программа на C - два вложенных цикла, формируется матрица NxN из синусов и косинусов. Всё просто, но мне надо проводить вычисления с long double, соответственно
использую sinl() и cosl()

Программа компилировалась g++ и icpc, для двух случаев double и long double.

     |  double    long double
-----|-----------------------------
g++  |  11сек       12 сек
icpc |   3сек       23 сек

Наблюдается резкое падение скорости для long double в случае использования icpc.

При компиляции icpc использовались ключи  -fast -march=core2 и библиотека mathimf.

Подскажите пожалуйста, где ошибка? Как уменьшить 23 сек.

С уважением
Дмитрий

Высказать мнение | Ответить | Правка | Cообщить модератору

 Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "Intel® C++ Compiler 10.1 for Linux"  
Сообщение от Аноним on 03-Дек-07, 23:21 
>Наблюдается резкое падение скорости для long double в случае использования icpc.
>Подскажите пожалуйста, где ошибка?

Ошибки нет. Это на самом деле сильно медленнее, так устроенны процессоры.
>Как уменьшить 23 сек.

Отказатся от long double

В gcc наверняка long double = double

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

2. "Intel® C++ Compiler 10.1 for Linux"  
Сообщение от Аноним on 04-Дек-07, 22:28 
>В gcc наверняка long double = double

Это не так, но ситуация неочевидна. Похоже, зависит это от конкретного FPU.
У меня на 2 машинах i386/amd64 с одинаковым gcc (gcc version 4.2.1 20070719  [FreeBSD]):

i386 (pentium4): sizeof(long double) = 12, на деле используется 15 бит мантисса, но 52 бит экспонента (как в обычном double). Младшие 12 бит экспоненты - нули.
amd64 (core2duo): sizeof(long double) = 16, на деле используется 15 бит мантисса и 64 бит экспонента, как положено.

Скорости лень считать.

В любом случае, если нужно что-то точнее double, имеет смысл использовать готовые библиотеки для вычислений с произвольной точностью.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ] [Рекомендовать для помещения в FAQ]




Спонсоры:
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

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