Is there a version of copy!() that uses @parallel? My x and x_next are 
usually huge.


On Thursday, 2 October 2014 18:32:32 UTC-4, Roy Wang wrote:
>
> Hey John,
>
> Ah geez, copy!() was only 2 lines lower than copy() in abstractarray.jl. 
> Thanks!
>
>
> On Thursday, 2 October 2014 18:25:22 UTC-4, John Myles White wrote:
>>
>> Why not use copy!
>>
>>   -- John
>>
>> On Oct 2, 2014, at 3:24 PM, Roy Wang <[email protected]> wrote:
>>
>>
>> This kind of routine is what I'm talking about...
>>
>> # copy assignment for vectors
>> function copyassignment!(a::Vector,b::Vector)
>>     @assert length(a) == length(b)
>>     for n=1:length(a)
>>         a[n]=b[n];
>>     end
>> end
>>
>> My questions:
>> 1) Is there a standard function that does this?
>> 2) Is there a better way to do this so it'll handle any type of 
>> multi-dimensional array of integers and floats without performance penalty?
>>
>>
>> On Thursday, 2 October 2014 18:09:16 UTC-4, Roy Wang wrote:
>>>
>>> I often need a "copy assignment" type of operation to an existing 
>>> destination array of the exact same element type and size. Let's only talk 
>>> about arrays of concrete types, like a multi-dimensional array of floats. 
>>> This is useful when I write optimization solvers, and I need to store 
>>> vectors or matrices from the previous step. I usually pre-allocate a pair 
>>> of arrays of the same type and size, *x* and *x_next*, then do:
>>>
>>> *x_next = x;*
>>>  
>>> at the end of each iteration of my solver.
>>>
>>> At first, I thought using *copy()* (shallow copy) on them is fine to 
>>> make sure they are separate entities, since floating point numbers and 
>>> integers are concrete types in Julia. While I verified this is true (at 
>>> least on arrays of Float64s), I looked at (around line 202 at the time of 
>>> this post), and *copy()* seems to call *copy!( similar(a), a)*. To my 
>>> understanding, this allocates a new destination array, fills it with the 
>>> corresponding values from the source array, then assigns the pointer of 
>>> this new destination array to *x_next*, and the garbage collector 
>>> removes the old array that *x_next* was pointing to. This is a lot of 
>>> work when I just want to traverse through *x_next*, and assign it the 
>>> corresponding values from* x*. Please correct me if my understanding is 
>>> wrong!
>>>
>>> This is a really common operation. I'd appreciate it if someone can 
>>> advise me whether there is already an existing method for doing this (or a 
>>> better solution) before I write my own.
>>>
>>> Cheers,
>>>
>>> Roy
>>>
>>
>>

Reply via email to