All of the globals setup in bench1 are non-const, which means the top-level benchmarking code is pretty slow, but if N is small, this won't matter much. If N is large, it's worth either wrapping the setup in a function body or making all these variables const.
On Mon, Sep 12, 2016 at 8:37 AM, Neal Becker <ndbeck...@gmail.com> wrote: > Steven G. Johnson wrote: > > > > > > > > > On Monday, September 12, 2016 at 7:59:33 AM UTC-4, DNF wrote: > >> > >> function(p::pnseq)(n,T=Int64) > >> > >>> > > Note that the real problem with this function declaration is that the > type > > T is known only at runtime, not at compile-time. It would be better > to > > do > > > > function (p::pnseq){T}(n, ::Type{T}=Int64) > > Thanks! This change made a big difference. Now PnSeq is only using a small > amount of time, as I expected it should. I prefer this syntax to the > alternative you suggest below as it seems more logical to me. > > > > > since making the type a parameter like this exposes it as a compile-time > > constant. Although it would be even more natural to not have to pass the > > type explicitly at all, but rather to get it from the type of n, e.g. > > > > > > function (p::pnseq){T<:Integer}(n::T) > > > > I have no idea whether this particular thing is performance-critical, > > however. I also see lots and lots of functions that allocate arrays, as > > opposed to scalar functions that are composed and called on a single > > array, which makes me think that you are thinking in terms of numpy-style > > vectorized code, which doesn't take full advantage of Julia. > > > > > > It would be much easier to give pereformance tips if you could boil it > > down to a single self-contained function that you want to make faster, > > rather than requiring us to read through four or five different > submodules > > and > > lots of little one-line functions and types. (There's nothing wrong with > > having lots of functions and types in Julia, it is just that this forces > > us to comprehend a lot more code in order to make useful suggestions.) > > Nyquist and CoefFromFunc are normally only used at startup, so they are > unimportant to optimize. > > The real work is PnSeq, Constellation, and the FIRFilters (which I didn't > write - they are in DSP.jl). I agree that the style is to operate on and > return a large vector. > > I guess what you're suggesting is that PnSeq should return a single scalar, > Constellation should map scalar->scalar. But FIRFilter I think needs to be > a vector->vector, so I will take advantage of simd? > >