- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
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,
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,
Link Copied
4 Replies
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
That would be the Fortran-77 approach. In Fortran 2003, you can do:
[fortran]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) [/fortran]How to go about this depends on what fate you have in store for the pieces so extracted.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
moreover it would be faster then using dcopy for such cases.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
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
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
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Okay, then I will try it. Thanks
Reply
Topic Options
- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Bookmark
- Subscribe
- Printer Friendly Page