Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: производительность NIOS II ядра в сравнении
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Системы на ПЛИС - System on a Programmable Chip (SoPC)
DASM
Собрал 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
Kuzmi4
2 DASM
а вы можете сказать что именно вы сравнивали ? Время выполнения ?
vadimuzzz
Цитата(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);
DASM
И тем не менее добавка FP инструкций ускорила выполнение...
vadimuzzz
Цитата(DASM @ Mar 3 2010, 17:37) *
И тем не менее добавка FP инструкций ускорила выполнение...

это уже к libc вопросы. хотя интересно было бы глянуть промежуточный ассемблер
Builder
Цитата(vadimuzzz @ Mar 3 2010, 15:36) *
это уже к libc вопросы. хотя интересно было бы глянуть промежуточный ассемблер
Во-во, ответы на такие вопросы обычно находятся при изучении ассемблера,
в сумме с анализом аппаатных особенностей платформы (кэши там, память внешняя).
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.