реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> производительность NIOS II ядра в сравнении
DASM
сообщение Mar 3 2010, 07:37
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 3 644
Регистрация: 28-05-05
Пользователь №: 5 493



Собрал NIOS II под Cyclon III, сравнил производительности на той же тактовой с AVR32. Сравнение по банальному вычислению числа PI
Код
    double pi = 4;
    for (int i = 1;  i < 10000000; i++)
    {
        if (i % 2) // нечет
            pi -= 4. / (i * 2 + 1);
        else
            pi += 4. / (i * 2 + 1);
    }
    printf ("PI = %16.16f\r\n", pi);

Итог - NIOS II в сборке fast без hard div уступил AVR32 втрое. (c hard div - тоже самое), и только с включенный floatipng point hardware достиг той же производительности. С чем это может быть связано ? Я, признаться, ожидал лучших результатов (AVR32 FPU не имеет)
PS - использована внутрення память.
PPS попробовал отказаться от плавучки - просто перестановка элементов массива. Тут NIOS II fast слил в 1.5 раза раза, компиляция с ключом -O2
Go to the top of the page
 
+Quote Post
Kuzmi4
сообщение Mar 3 2010, 08:36
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 3 304
Регистрация: 13-02-07
Из: 55°55′5″ 37°52′16″
Пользователь №: 25 329



2 DASM
а вы можете сказать что именно вы сравнивали ? Время выполнения ?
Go to the top of the page
 
+Quote Post
vadimuzzz
сообщение Mar 3 2010, 10:16
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 2 291
Регистрация: 21-07-05
Пользователь №: 6 988



Цитата(DASM @ Mar 3 2010, 13:37) *
Итог - NIOS II в сборке fast без hard div уступил AVR32 втрое. (c hard div - тоже самое), и только с включенный floatipng point hardware достиг той же производительности. С чем это может быть связано ? Я, признаться, ожидал лучших результатов (AVR32 FPU не имеет)
PS - использована внутрення память.
PPS попробовал отказаться от плавучки - просто перестановка элементов массива. Тут NIOS II fast слил в 1.5 раза раза, компиляция с ключом -O2

внимательней читайте маны:
Цитата
Precison: Double - not implemented. Double precision operations are implemented in software.

так что это сравнение разных версий и флагов gcc. также по умолчанию вещественные константы полагаются double.
Код
y = x * 4.67;// Double precision. Does NOT use floating point custom instructions.
y = x * 4.67f;
// Single precision. Does use floating point custom instructions.

что-то вроде этого:
Код
float pi;
if (i % 2) // нечет
    pi -= 4.0f / (float)((i << 1) + 1);
else
    pi += 4.0f / (float)((i << 1) + 1);
Go to the top of the page
 
+Quote Post
DASM
сообщение Mar 3 2010, 11:37
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 3 644
Регистрация: 28-05-05
Пользователь №: 5 493



И тем не менее добавка FP инструкций ускорила выполнение...
Go to the top of the page
 
+Quote Post
vadimuzzz
сообщение Mar 3 2010, 13:36
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 2 291
Регистрация: 21-07-05
Пользователь №: 6 988



Цитата(DASM @ Mar 3 2010, 17:37) *
И тем не менее добавка FP инструкций ускорила выполнение...

это уже к libc вопросы. хотя интересно было бы глянуть промежуточный ассемблер
Go to the top of the page
 
+Quote Post
Builder
сообщение Mar 3 2010, 19:32
Сообщение #6


iBuilder©
****

Группа: Свой
Сообщений: 519
Регистрация: 14-07-04
Из: Минск
Пользователь №: 322



Цитата(vadimuzzz @ Mar 3 2010, 15:36) *
это уже к libc вопросы. хотя интересно было бы глянуть промежуточный ассемблер
Во-во, ответы на такие вопросы обычно находятся при изучении ассемблера,
в сумме с анализом аппаатных особенностей платформы (кэши там, память внешняя).
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th June 2025 - 10:12
Рейтинг@Mail.ru


Страница сгенерированна за 0.40547 секунд с 7
ELECTRONIX ©2004-2016