On Tuesday, 2 September 2014 03:00:10 UTC-4, Jason Merrill wrote:
>
> On Monday, September 1, 2014 2:33:31 PM UTC-7, Alex Townsend wrote:
>>
>> I have written a package FastGauss.jl available here:
>>
>> https://github.com/ajt60gaibb/FastGauss.jl
>>
>
>> I am a Julia beginner (only been learning for 2 weeks) so I am assuming
>> the code can be
>> improved in a million and one ways. Please tell me if I've done something
>> that Julia does
>> not like. I am not sure if it is appropriate to make this an official
>> package.
>>
>
> One thing to look out for is making sure your functions have consistent
> return types. E.g. in
> https://github.com/ajt60gaibb/FastGauss.jl/blob/91e2ac656b856876563d5aacf7b5a405e068b3da/src/GaussLobatto.jl#L4
>
> you have
>
Thanks! I tried to get the return types consistent, but obviously missed a
few. I've been trying to use @code_typed to tell me this
information, but reading the output is a little difficult (at the moment).
>
> if ( n == 1 )
> error("Lobatto undefined for n = 1.")
> elseif ( n == 2 )
> x = ([-1.0,1.0],[1.0,1.0])
> elseif ( n == 3 )
> x = ([-1, 0, 1], [1.0, 4.0, 1.0]/3)
> # ...
>
> In the n==2 case, you're returning a tuple of two float vectors, but in
> the n==3 case, you're returning a tuple with one Int vector and one float
> vector.
>
> This issue crops up in a few other places, including sometimes returning a
> number and other times returning a vector.
>
> Another thing you might want to consider is devectorizing compound
> operations on vectors to avoid allocating containers to store intermediate
> results (either using https://github.com/lindahua/Devectorize.jl or
> manually). To pick one random place where this might be relevant:
> https://github.com/ajt60gaibb/FastGauss.jl/blob/5e3a8a2f9a7e327622bdd43f69bb712afcb16743/src/GaussJacobi.jl#L36
>
Good point. This makes a _huge_ difference in speed. Thank you. I had heard
that devectorize was a good thing in Julia, but I'm from MATLAB where it's
the opposite. I'll go through the code and update.
>
> I'm not 100% sure whether this will be relevant to your API, but many high
> performance Julia libs expose mutating versions of functions (marked with
> an ! at the end) that normally return arrays, allowing the caller to
> instead pass in a preallocated array for the result to be stored in that
> could potentially be reused from call to call.
>
OK. I'll have a closer look at some commands with the ! suffix.
>
> If a quadrature rule may in some cases be used only once, it might be nice
> if there were a way to apply the quadrature method to a function on the fly
> without ever generating the entire node and weight vector.
>
Thank you very much Jason.