For a fair comparison, the Julia function rfft() should be compared with the Octave function fft2(). Both do a 2-D transform. I don't see any significant differences between Julia (with 2 threads) and Octave.
Perhaps the discussion can be continued on github: https://github.com/JuliaLang/julia/issues/17000 On Saturday, June 18, 2016 at 7:56:28 AM UTC+2, Ethan Anderes wrote: > > In Julia, fft of a matrix is a 2-d transform. I think the corresponding > fft function in matlab just takes the 1-d fft of the columns. This might > explain part of the discrepancy. > > On Friday, June 17, 2016 at 8:24:48 PM UTC-7, Logan Williams wrote: >> >> A small improvement, but still much slower than Octave. >> >> julia> R = rand(512,512) >> >> julia> @time rfft(R); >> >> 0.012027 seconds (93 allocations: 2.012 MB) >> >> >> julia> R = rand(5000,5000); >> >> julia> @time rfft(R); >> >> 1.461964 seconds (99 allocations: 190.816 MB, 1.16% gc time) >> >> >> Unfortunately, I don't know exactly how many threads Octave uses by >> default. >> >> >> Logan >> >> On Friday, June 17, 2016 at 8:04:49 PM UTC-7, Scott Jones wrote: >>> >>> Your processor can handle 4 simultaneous threads with HyperThreading. >>> What are your results if you try setting the number of threads to 4? >>> Do you know how many threads Octave uses for FFTW on your machine? >>> >>> -Scott >>> >>> On Friday, June 17, 2016 at 3:01:45 PM UTC-4, Logan Williams wrote: >>>> >>>> Followup: setting FFTW.set_num_threads(2) (my machine only has two >>>> cores) and using rfft closes the gap somewhat, but there's still a >>>> substantial difference. >>>> >>>> julia> R = rand(5000,5000); >>>> >>>> julia> @time rfft(R); >>>> >>>> 1.736385 seconds (99 allocations: 190.816 MB, 0.95% gc time) >>>> >>>> >>>> julia> R = rand(512,512); >>>> >>>> julia> @time rfft(R); >>>> >>>> 0.018692 seconds (93 allocations: 2.012 MB) >>>> >>>> >>>> >>>> On Friday, June 17, 2016 at 11:56:44 AM UTC-7, Logan Williams wrote: >>>>> >>>>> Hi, >>>>> >>>>> I'm finding that a 2D FFT in Julia is an order of magnitude slower >>>>> than GNU Octave. Does anyone know why this is happening? >>>>> >>>>> Thanks, >>>>> Logan >>>>> >>>>> In Octave: >>>>> >>>>> >> R = rand(512,512); >>>>> >> tic; fft2(R); toc; >>>>> Elapsed time is 0.00377011 seconds. >>>>> >>>>> In Julia: >>>>> >>>>> julia> R = rand(512,512); >>>>> >>>>> julia> @time fft(R); >>>>> >>>>> 0.042149 seconds (76 allocations: 8.003 MB) >>>>> >>>>> >>>>> In Octave with non-power of 2 size: >>>>> >>>>> >>>>> >> R = rand(5000,5000); >>>>> >>>>> >> tic; fft2(R); toc; >>>>> >>>>> Elapsed time is 0.556037 seconds. >>>>> >>>>> >>>>> In Julia with non-power of 2 size: >>>>> >>>>> >>>>> julia> R = rand(5000,5000); >>>>> >>>>> julia> @time fft(R); >>>>> >>>>> 6.212666 seconds (76 allocations: 762.943 MB, 1.17% gc time) >>>>> >>>>
