Can we have a local variable name same as a global variable name and refer
to them using something like scope resolution operator like in C.

I am thinking of doing something like this

size=5000000;
function f()
  global size;

  <Now I want to set local size = global size and use that for the
remaining code>

  a=fill(3,size);
  b=fill(0,size);
  @elapsed for i=1:size
    b[i]=a[i]
  end
end

ᐧ

Regards,
Kapil Agarwal

On Sat, Nov 1, 2014 at 1:16 PM, Stefan Karpinski <ste...@karpinski.org>
wrote:

> No, it's the non-constant globals although JIT compilation is also an
> issue.
>
> On Sat, Nov 1, 2014 at 1:15 PM, Kapil <kapil6...@gmail.com> wrote:
>
>> okay, I think this is because julia will first compile the code and so
>> the performance is slow, subsequent runs would give improved performance
>> ᐧ
>>
>> Regards,
>> Kapil Agarwal
>>
>> On Sat, Nov 1, 2014 at 1:10 PM, Kapil <kapil6...@gmail.com> wrote:
>>
>>> The updated code is available at
>>> https://github.com/kapiliitr/JuliaBenchmarks/blob/master/streamp.jl
>>>
>>> I am getting a performance slightly less than C for multiple processes,
>>> but for single process, performance is much less (though better than
>>> previous values)
>>>
>>> Just a very basic implementation of one of the benchmarks is:
>>>
>>> julia> size=5000000;
>>> julia> a=fill(3,size);
>>> julia> b=fill(0,size);
>>> julia> @time for i=1:size
>>>               b[i]=a[i]
>>>           end
>>>
>>> The output is
>>> elapsed time: 0.537257426 seconds (159983648 bytes allocated, 3.16% gc
>>> time)
>>>
>>> In C, the same code takes 0.012210 seconds.
>>>
>>> ᐧ
>>>
>>> Regards,
>>> Kapil Agarwal
>>>
>>> On Sat, Nov 1, 2014 at 12:36 PM, Jason Merrill <jwmerr...@gmail.com>
>>> wrote:
>>>
>>>> On Saturday, November 1, 2014 9:35:03 AM UTC-7, Jason Merrill wrote:
>>>>>
>>>>> On Saturday, November 1, 2014 9:15:43 AM UTC-7, Kapil Agarwal wrote:
>>>>>>
>>>>>> I need those variables as globals as otherwise I will have to pass
>>>>>> them from one function to another all the time.
>>>>>>
>>>>>
>>>>> It's generally better long-term design to pass the relevant state
>>>>> around than to have it be global. One thing that helps is to define a type
>>>>> that encapsulates the relevant state, so that you only have to pass one
>>>>> thing around between functions instead of many. E.g. if I have
>>>>>
>>>>> f(a, b, c, d)
>>>>>     mutatea!(a)
>>>>>     mutateb!(b)
>>>>>     mutatec!(c)
>>>>>     mutated!(d)
>>>>>     return g(a,b,c,d)
>>>>> end
>>>>>
>>>>
>>>> Sorry, this wasn't quite real Julia syntax. Should have written
>>>> `function` before `f(a, b, c, d)` here and below.
>>>>
>>>>
>>>>> and suppose that g calls another function that also depends on a, b,
>>>>> c, and d, and so on, it can get kind of tedious to pass all the arguments
>>>>> separately.
>>>>>
>>>>> But you can do
>>>>>
>>>>> type algorithmState
>>>>>     a::Ta
>>>>>     b::Tb
>>>>>     c::Tc
>>>>>     d::Td
>>>>> end
>>>>>
>>>>> (where the Ta, Tb, Tc, and Td should be replaced by appropriate
>>>>> concrete types).
>>>>>
>>>>> Then you can do
>>>>>
>>>>> f(x::algorithmState)
>>>>>     mutateState!(x)
>>>>>     g(x)
>>>>> end
>>>>>
>>>>>
>>>>
>>>
>>
>

Reply via email to