Neon Оптимизация с использованием встроенных функций

Узнав о встроенных функциях ARM NEON, я синхронизировал функцию, которую я написал, чтобы удвоить элементы в массиве. Версия, которая использовала встроенные функции, занимает больше времени, чем простая версия функции C.

Без NEON:

    void  double_elements(unsigned int *ptr, unsigned int size)
 {
        unsigned int loop;
        for( loop= 0; loop

С NEON:

 void  double_elements(unsigned int *ptr, unsigned int size)
{    
        unsigned int i;
        uint32x4_t Q0,vector128Output;
        for( i=0;i<(SIZE/4);i++)
        {
                Q0=vld1q_u32(ptr);               
                Q0=vaddq_u32(Q0,Q0);
                vst1q_u32(ptr,Q0);
                ptr+=4;

        }
        return;
}

Интересно, отнимают ли операции загрузки / сохранения между массивом и вектором больше времени, что сводит на нет преимущества параллельного сложения.

ОБНОВЛЕНИЕ: Дополнительная информация в ответ на ответ Игоря.
1. Код размещен здесь:
plain.c
plain.s
neon.c
neon.s
Из раздела (ярлыка) L7 в обоих листинговых сборках я вижу что версия neon имеет большее количество инструкций по сборке. (следовательно, требуется больше времени?)
2. Я скомпилировал с использованием -mfpu = neon на arm-gcc, без других флагов или оптимизаций. Для простой версии вообще без флагов компилятора.
3. Это была опечатка, SIZE должен был соответствовать размеру, оба одинаковые.
4,5. Пробовал на массиве из 4000 элементов. Я рассчитал время с помощью gettimeofday () до и после вызова функции. НЕОН = 230 мкс, обычный = 155 мкс.
6. Да, я распечатал элементы в каждом случае.
7. Сделал это, никаких улучшений.

5
задан itisravi 20 April 2011 в 11:15
поделиться