рдЦреЗрд▓ рдЬреАрд╡рди рдФрд░ рдлреВрд░рд┐рдпрд░ рд░реВрдкрд╛рдВрддрд░рдг

рдХрдИ рд▓реЛрдЧреЛрдВ рдиреЗ рдорд╣рд╛рди рдФрд░ рднрдпрд╛рдирдХ рддреЗрдЬ рдлреВрд░рд┐рдпрд░ рдЯреНрд░рд╛рдВрд╕рдлреЙрд░реНрдо (рдПрдлрдПрдлрдЯреА) рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реБрдирд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдЬреЗрдкреАрдИрдЬреА / рдПрдордкреАрдИрдЬреА рд╕рдВрдкреАрдбрд╝рди рдФрд░ рдзреНрд╡рдирд┐ рдХреА рдЖрд╡реГрддреНрддрд┐ рдЕрдкрдШрдЯрди (рддреБрд▓реНрдпрдХрд╛рд░рдХ, рдЖрджрд┐) рдХреЗ рдЕрдкрд╡рд╛рдж рдХреЗ рд╕рд╛рде рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЕрдХреНрд╕рд░ рдПрдХ рдЕрд╕реНрдкрд╖реНрдЯ рдкреНрд░рд╢реНрди рдмрдирд╛ рд░рд╣рддрд╛ рд╣реИред ред

рд╣рд╛рд▓ рд╣реА рдореЗрдВ, рдореБрдЭреЗ рдХреЙрдирд╡реЗ рдХреЗ рд▓рд╛рдЗрдл рдЧреЗрдо рдХрд╛ рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдорд┐рд▓рд╛, рдЬреЛ рддреЗрдЬреА рд╕реЗ рдлреВрд░рд┐рдпрд░ рдЯреНрд░рд╛рдВрд╕рдлреЙрд░реНрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ - рдФрд░ рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЖрдкрдХреЛ рдмрд╣реБрдд рд╣реА рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рд╕реНрдерд╛рдиреЛрдВ рдореЗрдВ рдЗрд╕ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреА рдкреНрд░рдпреЛрдЬреНрдпрддрд╛ рдХреЛ рд╕рдордЭрдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИред

рдирд┐рдпрдо

рдЖрдЗрдП рд╣рдо рдХреНрд▓рд╛рд╕рд┐рдХ "рдЬреАрд╡рди" рдХреЗ рдирд┐рдпрдореЛрдВ рдХреЛ рдпрд╛рдж рдХрд░рддреЗ рд╣реИрдВ - рд╡рд░реНрдЧ рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдПрдХ рд╡рд░реНрдЧ рдкрд░, рдПрдХ рдЬреАрд╡рд┐рдд рдХреЛрд╢рд┐рдХрд╛ рдорд░ рдЬрд╛рддреА рд╣реИ рдЕрдЧрд░ рдЗрд╕рдореЗрдВ 3 рдпрд╛ рдЙрд╕рд╕реЗ рдХрдо 2 рдкрдбрд╝реЛрд╕реА рд╣реЛрддреЗ рд╣реИрдВ, рдФрд░ рдЕрдЧрд░ рдПрдХ рдЦрд╛рд▓реА рд╕реЗрд▓ рдореЗрдВ рдареАрдХ 3 рдкрдбрд╝реЛрд╕реА рд╣реЛрддреЗ рд╣реИрдВ - рддреЛ рдпрд╣ рдкреИрджрд╛ рд╣реЛрддрд╛ рд╣реИред рддрджрдиреБрд╕рд╛рд░, рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЗ рдкреНрд░рднрд╛рд╡реА рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП, рд╕реЗрд▓ рдХреЗ рдЖрд╕рдкрд╛рд╕ рдкрдбрд╝реЛрд╕рд┐рдпреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдЬрд▓реНрджреА рд╕реЗ рдЧрд┐рдирдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред

рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХрд╛ рдПрдХ рдкреВрд░рд╛ рд╕рдореВрд╣ рд╣реИ (рдореЗрд░реЗ рдЬреЗрдПрд╕ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕рд╣рд┐рдд)ред рд▓реЗрдХрд┐рди рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдПрдХ рдЧрдгрд┐рддреАрдп рд╕рдорд╛рдзрд╛рди рд╣реИ рдЬреЛ рдШрдиреЗ рднрд░реЗ рд╣реБрдП рдЦреЗрддреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрдЪреНрдЫреА рдЧрддрд┐ рджреЗ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдЬрд▓реНрджреА рд╕реЗ рдирд┐рдпрдореЛрдВ рдХреА рдмрдврд╝рддреА рдЬрдЯрд┐рд▓рддрд╛ рдФрд░ рд╕рдВрдХреНрд╖реЗрдкрдг рдХреЗ рдХреНрд╖реЗрддреНрд░ / рдорд╛рддреНрд░рд╛ рдХреЗ рд╕рд╛рде рдЕрдВрддрд░рд╛рд▓ рдореЗрдВ рдЪрд▓рд╛ рдЬрд╛рддрд╛ рд╣реИ - рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕реНрдореВрдерд▓рд╛рдЗрдлрд╝-рдЬреИрд╕реЗ ( 1 , 2 ), рдФрд░ 3 рдбреА рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдореЗрдВред

рдПрдлрдПрдлрдЯреА рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди

рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХрд╛ рд╡рд┐рдЪрд╛рд░ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:
  1. рд╣рдо рдпреЛрдЧ рдореИрдЯреНрд░рд┐рдХреНрд╕ (рдлрд┐рд▓реНрдЯрд░) рдмрдирд╛рддреЗ рд╣реИрдВ, рдЬрд╣рд╛рдВ 1 рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдореЗрдВ рд╣реЛрддреЗ рд╣реИрдВ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рд░рд╛рд╢рд┐ рд╣рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ (8 рдЗрдХрд╛рдЗрдпрд╛рдВ, рд╢реЗрд╖ рд╢реВрдиреНрдп)ред рд╣рдо рдореИрдЯреНрд░рд┐рдХреНрд╕ рдкрд░ рдПрдХ рд╕реАрдзрд╛ рдлреВрд░рд┐рдпрд░ рд░реВрдкрд╛рдВрддрд░рдг рдХрд░рддреЗ рд╣реИрдВ (рдЗрд╕реЗ рдХреЗрд╡рд▓ 1 рдмрд╛рд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ)ред
  2. рд╣рдо рдПрдХ рд╕реАрдзрд╛ рдлреВрд░рд┐рдпрд░ рд░реВрдкрд╛рдВрддрд░рдг рдЦреЗрд▓ рдореИрджрд╛рди рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЗ рд╕рд╛рде рдПрдХ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдкрд░ рдХрд░рддреЗ рд╣реИрдВред
  3. рд╣рдо рдкрд░рд┐рдгрд╛рдо рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рддрддреНрд╡ рдХреЛ рдкреИрд░рд╛рдЧреНрд░рд╛рдл 1 рд╕реЗ "рд╕рдВрдХреНрд╖реЗрдк" рдХреЗ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреЗ рд╕рдВрдЧрдд рддрддреНрд╡ рд╕реЗ рдЧреБрдгрд╛ рдХрд░рддреЗ рд╣реИрдВред
  4. рд╣рдо рдЙрд▓рдЯрд╛ рдлреВрд░рд┐рдпрд░ рд░реВрдкрд╛рдВрддрд░рдг рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рд╕реЗрд▓ рдХреЗ рд▓рд┐рдП рдкрдбрд╝реЛрд╕рд┐рдпреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рдпреЛрдЧ рдХреЗ рд╕рд╛рде рдПрдХ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рд╣рдореЗрдВ рдЪрд╛рд╣рд┐рдПред
рдЗрд╕ рдкреВрд░реА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдХрдирд╡рд┐рдХреНрд╢рди рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред

C ++ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди
//Author: Mark VandeWettering http://brainwagon.org/2012/10/11/crazy-programming-experiment-of-the-evening/ #include <stdio.h> #include <stdlib.h> #include <math.h> #include <complex.h> #include <unistd.h> #include <fftw3.h> #define SIZE (512) #define SHIFT (18) fftw_complex *filter ; fftw_complex *state ; fftw_complex *tmp ; fftw_complex *sum ; int main(int argc, char *argv[]) { fftw_plan fwd, rev, flt ; fftw_complex *ip, *jp ; int x, y, g ; srand48(getpid()) ; filter = (fftw_complex *) fftw_malloc(SIZE * SIZE * sizeof(fftw_complex)) ; state = (fftw_complex *) fftw_malloc(SIZE * SIZE * sizeof(fftw_complex)) ; tmp = (fftw_complex *) fftw_malloc(SIZE * SIZE * sizeof(fftw_complex)) ; sum = (fftw_complex *) fftw_malloc(SIZE * SIZE * sizeof(fftw_complex)) ; flt = fftw_plan_dft_2d(SIZE, SIZE, filter, filter, FFTW_FORWARD, FFTW_ESTIMATE) ; fwd = fftw_plan_dft_2d(SIZE, SIZE, state, tmp, FFTW_FORWARD, FFTW_ESTIMATE) ; rev = fftw_plan_dft_2d(SIZE, SIZE, tmp, sum, FFTW_BACKWARD, FFTW_ESTIMATE) ; /* initialize the state */ for (y=0, ip=state; y<SIZE; y++) { for (x=0; x<SIZE; x++, ip++) { *ip = (fftw_complex) (lrand48() % 2) ; } } /* initialize and compute the filter */ for (y=0, ip=filter; y<SIZE; y++, ip++) { for (x=0; x<SIZE; x++) { *ip = 0. ; } } #define IDX(x, y) (((x + SIZE) % SIZE) + ((y+SIZE) % SIZE) * SIZE) filter[IDX(-1, -1)] = 1. ; filter[IDX( 0, -1)] = 1. ; filter[IDX( 1, -1)] = 1. ; filter[IDX(-1, 0)] = 1. ; filter[IDX( 1, 0)] = 1. ; filter[IDX(-1, 1)] = 1. ; filter[IDX( 0, 1)] = 1. ; filter[IDX( 1, 1)] = 1. ; fftw_execute(flt) ; for (g = 0; g < 1000; g++) { fprintf(stderr, "generation %03d\r", g) ; fftw_execute(fwd) ; /* convolve */ for (y=0, ip=tmp, jp=filter; y<SIZE; y++) { for (x=0; x<SIZE; x++, ip++, jp++) { *ip *= *jp ; } } /* go back to the sums */ fftw_execute(rev) ; for (y=0, ip=state, jp=sum; y<SIZE; y++) { for (x=0; x<SIZE; x++, ip++, jp++) { int s = (int) round(creal(*ip)) ; int t = ((int) round(creal(*jp))) >> SHIFT ; if (s) *ip = (t == 2 || t == 3) ; else *ip = (t == 3) ; } } /* that's it! dump the frame! */ char fname[80] ; sprintf(fname, "frame.%04d.pgm", g) ; FILE *fp = fopen(fname, "wb") ; fprintf(fp, "P5\n%d %d\n%d\n", SIZE, SIZE, 255) ; for (y=0, ip=state; y<SIZE; y++) { for (x=0; x<SIZE; x++, ip++) { int s = ((int) creal(*ip)) ; fputc(255*s, fp) ; } } fclose(fp) ; } fprintf(stderr, "\n") ; return 0 ; } 

рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ FFTW рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЬреАрд╕реА рдореЗрдВ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдВрдЬреА:
gcc life.cpp -lfftw3 -lm -lstdc ++
рд╡рд┐рдЬреБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ рдХреЛ рдЬрдЯрд┐рд▓ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдореЗрдВ рдмрджрд▓рд╛рд╡ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рд░рдирдЯрд╛рдЗрдо рдкрд░ рдЫрд╡рд┐рдпрд╛рдВ:
рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдлрд╝рд┐рд▓реНрдЯрд░ рдореИрдЯреНрд░рд┐рдХреНрд╕ (рдореВрд▓ рдКрдкрд░реА рдмрд╛рдПрдВ рдХреЛрдиреЗ рд╣реИ, рдлрд╝реАрд▓реНрдб "рд▓реВрдкреНрдб" рд╣реИ):

рдкреНрд░рддреНрдпрдХреНрд╖ FFT рдХреЗ рдмрд╛рдж рдлрд┐рд▓реНрдЯрд░ рдХрд╛ рдЕрд╕рд▓реА рд╣рд┐рд╕реНрд╕рд╛:

рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдХреНрд╖реЗрддреНрд░ 1 рдЧреНрд▓рд╛рдЗрдбрд░ рд╣реИ:

рд╕реНрд░реЛрдд рдХреНрд╖реЗрддреНрд░ рдХрд╛ FFT, рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдФрд░ рдХрд╛рд▓реНрдкрдирд┐рдХ рднрд╛рдЧ:

рдлрд╝рд┐рд▓реНрдЯрд░ рдореИрдЯреНрд░рд┐рдХреНрд╕ рджреНрд╡рд╛рд░рд╛ рдЧреБрдгрд╛ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж:

рдЙрд▓рдЯрд╛ рдПрдлрдПрдлрдЯреА рдХреЗ рдмрд╛рдж, рд╣рдореЗрдВ рд░рд╛рд╢рд┐ рдорд┐рд▓рддреА рд╣реИ:


рдкрд░рд┐рдгрд╛рдо рдХрд╛рдлреА рдЕрдкреЗрдХреНрд╖рд┐рдд рд╣реИ:


рдлрд╝реАрд▓реНрдб рдХрд╛ "рд▓реВрдкрд┐рдВрдЧ" рдПрдлрдПрдлрдЯреА рдХреЗ рдХрд╛рд░рдг рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИред

рдПрдлрдПрдлрдЯреА рдмрдиреНрд╕


рдПрдХ "рднреЛрд▓реА" рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд╕рд╛рде рдЧрддрд┐ рдХреА рддреБрд▓рдирд╛ рдХрд░реЗрдВ

рдПрдлрдПрдлрдЯреАрдбрдмреНрд▓реНрдпреВ рдХреЛ рдПрдХрд▓ рдкрд░рд┐рд╢реБрджреНрдзрддрд╛ рдореЛрдб рдореЗрдВ рдЗрдХрдЯреНрдард╛ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ (-рдиреЗрдмрд▓-рдлреНрд▓реЛрдЯ, рд▓рдЧрднрдЧ 1.5 рдЧреБрдирд╛ рдХреА рдЧрддрд┐ рдореЗрдВ рд╡реГрджреНрдзрд┐ рджреЗрддрд╛ рд╣реИ)ред рдкреНрд░реЛрд╕реЗрд╕рд░ - Core2Duo E8600ред gcc 4.7.2 -O3
рдПрдХ рднреЛрд▓реА рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рд╕реНрд░реЛрдд рдХреЛрдб
 for (int i=8; i<1000; i++) { delta[i][0] = (lrand48() % 21)-10; delta[i][1] = (lrand48() % 21)-10; } #define NUMDELTA 18 for(int frame=0;frame<10;frame++) { double start = ticks(); for (y=0; y<SIZE; y++) for (x=0; x<SIZE; x++) { int sum=0; for(int i=0;i<NUMDELTA;i++) sum+=array[readpage][(SIZE+y+delta[i][0]) % SIZE][(SIZE+x+delta[i][1]) % SIZE]; if(array[readpage][y][x]) array[1-readpage][y][x] = (sum>3 || sum<2)?0:1;else array[1-readpage][y][x] = (sum==3)?1:0; } readpage = 1-readpage; printf("NaiveDelta: %10.10f\n", ticks()-start); } 
рдкрд░реАрдХреНрд╖рдг рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рдирдХрд┐рддрдиреЗ рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдХреЛ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдлрдПрдлрдЯреА рдФрд░ рднреЛрд▓реЗ рдПрд╣рд╕рд╛рд╕ рдХреА рдЧрддрд┐ рд╣реИ
1 рдХреЛрд░, 512x51229
2 рдХреЛрд░, 512x51218
1 рдХреЛрд░, 4096x409688
2 рдХреЛрд░, 4096x409665
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рд╕реНрдкрд░реНрд╢реЛрдиреНрдореБрдЦ рджрд╡рд╛рдПрдВ рднреА рдПрдлрдПрдлрдЯреА рдХреЗ рдЦрд┐рд▓рд╛рдл рд╣реИрдВ - рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдЖрдкрдХреЛ рд╕реИрдХрдбрд╝реЛрдВ рдФрд░ рд╣рдЬрд╛рд░реЛрдВ рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдХреЛ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ - рддреЛ рдПрдлрдПрдлрдЯреА рдЬреАрдд рдЬрд╛рдПрдЧрд╛ред

рдЕрдкрдбреЗрдЯ:
рдЬреИрд╕рд╛ рдХрд┐ рдпрд╣ рдирд┐рдХрд▓рд╛, FFTW, FFTW_ESTIMATE рдзреНрд╡рдЬ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддреЗ рд╕рдордп, рдЗрд╖реНрдЯрддрдо FFT рдЧрдгрдирд╛ рдпреЛрдЬрдирд╛рдУрдВ рд╕реЗ рджреВрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред FFTW_MEASURE рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддреЗ рд╕рдордп, рдЧрддрд┐ рдореЗрдВ рдХрд╛рдлреА рд╡реГрджреНрдзрд┐ рд╣реБрдИ рд╣реИ, рдФрд░ рд╕реНрдерд┐рддрд┐ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЕрдзрд┐рдХ рдЦреБрд╢ рд╣реИ (рдЬрдм 18 рд╕реЗ рдХрдо рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдХрд╛ рдпреЛрдЧ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рднреЛрд▓реА рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЕрдЪрд╛рдирдХ 3 рдЧреБрдирд╛ рддреЗрдЬ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣рд╛рдВ рд╕рдм рдХреБрдЫ 18 рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ):
рдкрд░реАрдХреНрд╖рдг рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рдирдПрдлрдПрдлрдЯреА рдФрд░ рднреЛрд▓реЗ рдПрд╣рд╕рд╛рд╕ рдХреА рдЧрддрд┐ рдХреЛ рд╕рдВрдХреНрд╖реЗрдк рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рддрдиреА рдХреЛрд╢рд┐рдХрд╛рдПрдВ рд╣реИрдВ
1 рдХреЛрд░, 512x51218
2 рдХреЛрд░, 512x51218
1 рдХреЛрд░, 4096x409628
2 рдХреЛрд░, 4096x409619


рд╡реЗ рдЬреЛ рднреА рдХрд╣рддреЗ рд╣реИрдВ, рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдореЗрдВ рдЧрдгрд┐рдд рдХрднреА-рдХрднреА рд╕рдмрд╕реЗ рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рд╕реНрдерд╛рдиреЛрдВ рдореЗрдВ рдХрд╛рдо рдЖ рд╕рдХрддрд╛ рд╣реИред
рдФрд░ FFT рдХрд╛ рдмрд▓ рдЖрдкрдХреЗ рд╕рд╛рде рд╣реЛ рд╕рдХрддрд╛ рд╣реИ!

Source: https://habr.com/ru/post/In180135/


All Articles