As an aside, most JIT runtimes actually don't compile code until after it
has been run a few thousand times and seems hot – before that they
interpret it. Julia is unusual in that it fully JIT compiles almost all
code (except for some top-level expressions which are interpreted) before
running it at all. That's technically what JIT originally meant, but not
what most systems do since they often *need* profile information from
execution in order to compile the code, whereas Julia can infer this
information in advance.

On Tue, Sep 13, 2016 at 3:09 AM, Matjaz Licer <matjaz.li...@gmail.com>
wrote:

> Makes sense, thanks :-)
>
> On 12 September 2016 at 17:17, Stefan Karpinski <ste...@karpinski.org>
> wrote:
>
>> JIT = Just In Time, i.e. the first time you use the code.
>>
>> On Mon, Sep 12, 2016 at 6:52 AM, MLicer <matjaz.li...@gmail.com> wrote:
>>
>>> Indeed it does! I thought JIT compilation takes place prior to execution
>>> of the script. Thanks so much, this makes sense now!
>>>
>>> Output:
>>> first call:   0.804573 seconds (1.18 M allocations: 53.183 MB, 1.43% gc
>>> time)
>>> repeated call:  0.000472 seconds (217 allocations: 402.938 KB)
>>>
>>> Thanks again,
>>>
>>> Cheers!
>>>
>>>
>>> On Monday, September 12, 2016 at 12:48:30 PM UTC+2, randm...@gmail.com
>>> wrote:
>>>>
>>>> The Julia code takes 0.000535 seconds for me on the second run --
>>>> during the first run, Julia has to compile the method you're timing. Have a
>>>> look at the performance tips
>>>> <http://docs.julialang.org/en/latest/manual/performance-tips/#measure-performance-with-time-and-pay-attention-to-memory-allocation>
>>>> for a more in depth explanation.
>>>>
>>>> Am Montag, 12. September 2016 11:53:01 UTC+2 schrieb MLicer:
>>>>>
>>>>> Dear all,
>>>>>
>>>>> i've written a low-pass filter in Julia and Python and the code in
>>>>> Julia seems to be much slower (*0.800 sec in Julia vs 0.000 sec in
>>>>> Python*). I *must* be coding ineffieciently, can anyone comment on
>>>>> the two codes below?
>>>>>
>>>>> *Julia:*
>>>>>
>>>>>
>>>>> <https://lh3.googleusercontent.com/-pEyZjPDcmP8/V9Z6hJdXKfI/AAAAAAAAKLc/iiefpFSzY88S333QndnbnnAnKUBQvzTkACLcB/s1600/filter_julia.png>
>>>>> using PyPlot, DSP
>>>>>
>>>>> # generate data:
>>>>> x = linspace(0,30,1e4)
>>>>> sin_noise(arr) = sin(arr) + rand(length(arr))
>>>>>
>>>>> # create filter:
>>>>> designmethod = Butterworth(5)
>>>>> ff = digitalfilter(Lowpass(0.02),designmethod)
>>>>> @time yl = filtfilt(ff, sin_noise(x))
>>>>>
>>>>> Python:
>>>>>
>>>>> from scipy import signal
>>>>> import numpy as np
>>>>> import cProfile, pstats
>>>>>
>>>>> def sin_noise(arr):
>>>>>     return np.sin(arr) + np.random.rand(len(arr))
>>>>>
>>>>> def filterSignal(b,a,x):
>>>>>     return signal.filtfilt(b, a, x, axis=-1)
>>>>>
>>>>> def main():
>>>>>     # generate data:
>>>>>     x = np.linspace(0,30,1e4)
>>>>>     y = sin_noise(x)
>>>>>     b, a = signal.butter(5, 0.02, "lowpass", analog=False)
>>>>>     ff = filterSignal(b,a,y)
>>>>>
>>>>>     cProfile.runctx('filterSignal(b,a,y)',globals(),{'b':b,'a':a,'y':y
>>>>> },filename='profileStatistics')
>>>>>
>>>>>     p = pstats.Stats('profileStatistics')
>>>>>     printFirstN = 5
>>>>>     p.sort_stats('cumtime').print_stats(printFirstN)
>>>>>
>>>>> if __name__=="__main__":
>>>>>     main()
>>>>>
>>>>>
>>>>> Thanks very much for any replies!
>>>>>
>>>>
>>
>

Reply via email to