Another application of dcopy subroutine

Another application of dcopy subroutine

Hello all,

I am trying to apply dcopy to my parallel codes.In that, I want to chop one big array into several small arrays which sizes are defined by the number of threads applied.
For example,

* big_array(1~100)can beseparated into4 smallarrays such as small_array1(1~25),small_array2(26~50), small_array3(51~75), small_array4(76~100).

In this case, the small_array1,2,3, and 4 will copy values in the big_array so i need to assign the range which the small_arrays will copy from the big_array.

Rough idea for this function is

dcopy1(start,end,big_array,indx,small_array1,indx)

I am wondering if you have any ideas about this. Any comments will be helpful!
Cheers,

5 posts / 0 new
Last post
For more complete information about compiler optimizations, see our Optimization Notice.

That would be the Fortran-77 approach. In Fortran 2003, you can do:

subroutine sub(A,N,...)
real(wp), dimension(N) :: A
real(wp),allocatable, dimension(:) :: A1,A2,A3
...
nby3=N/3       ! N should be an exact multiple of 3
A1=A(1:nby3); A2=A(nby3+1:2*nby3); A3=A(2*nby3+1:N)

How to go about this depends on what fate you have in store for the pieces so extracted.

moreover it would be faster then using dcopy for such cases.

Thank you for your response. It seems a good idea.
By the way, the output variables (A1,A2,A3)will bedepend on the number of threadassigned.
So,I am wondering ifIuse two dimensional arrays such as

subroutine sub(A,N,start,end,A1,numthread)

real(wp), dimension(N) :: A

real(wp),allocatable, dimension(:,:) :: A1

...

A1(start(1):end(1),1) = A(start(1):end(1));
A1(start(2):end(2),2) = A(start(2):end(2));
....
A1(start(numthread):end(numthread),numthread)=A(start(numthread):end(numthread))

end subroutine sub

Okay, then I will try it. Thanks

Leave a Comment

Please sign in to add a comment. Not a member? Join today