Fast Fourier Transform

...
  • #1641 - внедрил Фурье в экспериментальное ядро, заодно опробовал передачу параметров через стек в нестандартных syscall-вызовах.

    Производительность выросла еще процентов на 5-10, для больших массивов - в разы, но это конечно запрещенный прием - внутри syscall действует режим cli.

    Для массивов 256, 1К и 4К точек эффективная производительность Sempron140 (2.7GHz) достигла 1Гфлопс. Похоже, это уже предел.

    Посмотрите кому интересно - в следующих версиях я это безобразие уберу, ему в ядре не место.
    Евангелие от Иоанна: стих 1

    Code: Select all

    ; В начале было Слово:
    B32:        mov     ax, os_stack       ; Selector for os
    [/size]
  • А как насчет применения MMX и SSE(1,2,3)?
  • Mario
    Лет 8 назад я попробовал первые 2 шага преобразования переписать под инструкции 3DNow! первых Атлонов (про SSE тогда еще почти никто не слышал).
    Прирост скорости был довольно значительный (почти в 3 раза).

    Но Step3 я так и не смог довести - там очень сложные вычисления, а распараллеливать их вручную - вообще свихнешся.
    Кроме того, оказалось что "короткая" 32-битная арифметика для наших задач не подходит - из-за вычислительных погрешностей возникали грубые ошибки в обработке экспериментальных данных. На 64 битах всё считалось гладко.

    С другой стороны, для аудио- и видеоприложений 32бит вполне достаточно. Если у кого есть желание - могу кинуть 3DNow!-код в личку.

    На полноценном SSE3 ускорение будет больше чем в 2 раза, однозначно. Но, насколько я знаю, для этого нужно сначала войти в х64-режим.
    Еще круче было бы задействовать ресурсы второго (третьего, четвертого...) процессора.
    : Кстати, кто-нибудь знает, может ли одно ядро CPU работать в 64-битном режиме, если вторая голова крутится на 32 битах?

    Но самое крутое, конечно, это "портировать" задачу на GPU...
    Евангелие от Иоанна: стих 1

    Code: Select all

    ; В начале было Слово:
    B32:        mov     ax, os_stack       ; Selector for os
    [/size]
  • art_zh

    Оффтопик.
    Могут. Инициализация примерно так и проходит.

    Зачем х64 для SSE3 ? SSE2/3 считает с двойной точностью.
    movapd, mulpd, addpd, minpd и т.п.
  • Serge
    SSE:Угу, теперь вижу. Будет очень интересно попробовать.

    : офигеть! так это можно крутить ядро (включая диспетчер задач и менеджер памяти) в х32, а приложения - в х64 ?
  • Можно, но в пределах 4 Гб адресов.
  • Можно и выше - главное чтобы таблицы страниц лежали ниже 4Г.
  • Мало поможет. Тем более что таблицы страниц там разные. И 32х ядро не может получить доступ к данным выше 4 Гб без ремапа, геморрой одним словом.
  • Serge
    (выпрыгивая из оффтопика прямиком в сабж) Только открыл SSE-букварь и вижу:
    AMD64 Programmer's Manual том 4 wrote:"Длинный" 64-битный режим предоставляет SSE-программам четыре существенных преимущества:
    1) доступ к восьми дополнительным XMM регистрам;
    2) доступ к восьми дополнительным 64-битным РОНам;
    3) 64-битное виртуальное адресное пространство, и
    4) RIP-адресацию.
    Не знаю, будет ли двухголовая "Колибри32 + SSE_64" большим геморроем, чем просто "Колибри64"
    Но сейчас все равно не до этого.
  • Стопроцентно будет. Для х64 нужны свои обработчики прерываний/исключений и переключатель контекстов. Но такой гибридный вариант интересен для числодробилок. На загрузочном ядре работает х32, а на остальных ядрах задачи х64 в пакетном режиме + минимальный гипервизор для обслуживания ввода-вывода. Это конечно совсем не SMP, но намного проще и понятней чем CPU+GPU. Мне даже интересно стало.
  • бывают же такие совпадения:

    12 октября Вилле добавил Фурье-серсис в ядро MeOS64

    Code: Select all

    SYSTEM CALL 150
    From version 0.94, an 'Audio Processing' system call was introduced in Menuet 64. The following functions are available, and may be expanded later:
       1. Complex to complex inplace FFT (Radix-4 decimation in time)
       2. Sample format and wave format converter
       3. FFT convolution kernel (equalizer)
       4. SINC resampling kernel
    
    вместе с БПФ в ядро забили SSE-упаковку данных и свертку функций (convolution).
    невероятно, но факт: спектр-эквалайзинг и сшивка фреймов тоже будут выполняться ядром (?)
    Евангелие от Иоанна: стих 1

    Code: Select all

    ; В начале было Слово:
    B32:        mov     ax, os_stack       ; Selector for os
    [/size]
  • Мне так кажется он по прежнему идет путем, которым шло первоначальное развитие Linux. От которого уже отказались в сторону модульности.
  • Там и 3D есть, чего мелочиться.
  • Залил на SVN.
    programs/other/fft
  • Who is online

    Users browsing this forum: No registered users and 3 guests