Para usar a Fast Fourier Transform (FFT) em dados de amostra uniforme, por exemplo, em conexão com os solucionadores de PDE, é sabido que a FFT é um algoritmo ). Quão bem a escala FFT é processada em paralelo para (isto é, muito grande)?n → ∞
Para usar a Fast Fourier Transform (FFT) em dados de amostra uniforme, por exemplo, em conexão com os solucionadores de PDE, é sabido que a FFT é um algoritmo ). Quão bem a escala FFT é processada em paralelo para (isto é, muito grande)?n → ∞
Respostas:
Isso é mais uma evidência anedótica do que uma prova demonstrada, mas parece que as implementações existentes para FFTs, como a FFTW , têm um limite para sua capacidade de dimensionamento.
Quando começamos a usar os resolvedores de espaço LAMMPS em sistemas muito grandes ( átomos), descobrimos que o dimensionamento continuava, desde que pudéssemos manter o número de processadores pequeno o suficiente para que eles pode caber em um rack. Assim que tentamos expandir ainda mais (acima dos processadores 4K, dependendo da máquina), a escala quebrou - aparentemente porque os custos de comunicação para enviar dados entre os processadores se tornaram muito grandes para manter a escala. [Recentemente, para contornar esse problema, eles introduziram a capacidade de dedicar uma certa partição da alocação do processador ao cálculo da FFT.] O ( 10 7 )
Mas a mensagem para levar para casa aqui é que a FFT deve aumentar; no entanto, às vezes existem limitações e interações inesperadas que entram em jogo quando se passa da consideração teórica do desempenho de um algoritmo para sua implementação prática em uma plataforma HPC real.
O método multipolar rápido (FMM) é e possui requisitos de comunicação muito mais baixos, portanto, fornece uma transformada de Fourier discreta e altamente escalável. Edelman, McCorquodale e Toledo (1999) O Futuro Transformar Rápido de Fourier? analise essa abordagem e conclua que o FMM seria preferível ao FFT convencional em larga escala. Observe que o FMM é apenas aproximado; portanto, as constantes são piores se você precisar de uma precisão muito alta. Agradecemos a Jack Poulson por apontar isso em uma discussão na semana passada.
No contexto das PDEs, é importante reconhecer que o valor de para uma 1D FFT necessária normalmente cresce como a ésima raiz do número total de pontos da grade, onde a dimensionalidade é mais frequentemente 3.d d
Procurar por "FFT paralelo" ou "escalabilidade pseudoespectral" no Google Scholar gera uma riqueza de informações que não estou qualificado para avaliar. Mas este parece ser um bom exemplo recente do que pode ser realizado na prática:
Abstrato:
É apresentado um esquema híbrido que utiliza MPI para paralelismo de memória distribuída e OpenMP para paralelismo de memória compartilhada. O trabalho é motivado pelo desejo de obter números Reynolds excepcionalmente altos em cálculos pseudoespectrais de turbulência de fluidos em sistemas emergentes de escala petaescala, alta contagem de núcleos e processamento massivamente paralelo. A implementação híbrida deriva e aumenta um código pseudoespectral paralelo ao MPI escalonável e bem testado. O paradigma híbrido leva a uma nova imagem para a decomposição do domínio das grades pseudoespectrais, que é útil para entender, entre outras coisas, a transposição 3D dos dados globais necessários para as transformações paralelas rápidas de Fourier, que são o componente central da rede. discretizações numéricas. Detalhes da implementação híbrida são fornecidos, e testes de desempenho ilustram a utilidade do método. É mostrado que o esquema híbrido alcança uma escalabilidade quase ideal até ~ 20.000 núcleos de computação com uma eficiência média máxima de 83%. São apresentados dados que demonstram como escolher o número ideal de processos MPI e threads OpenMP, a fim de otimizar o desempenho do código em duas plataformas diferentes.
Se você possui um número infinito de processadores, a DFT pode ser determinada em tempo.
No algoritmo ingênuo, você pode colocar cada ponto de saída em um nó separado e calcular esse ponto transformado de fourier no tempo . Qualquer algoritmo rápido deve conseguir pelo menos corresponder a essa escala.
No entanto, você também precisa coletar todos os pontos transformados de quatro camadas em uma matriz, o que leva tempo .