Intel® oneAPI Math Kernel Library
Ask questions and share information with other developers who use Intel® Math Kernel Library.
Announcements
This community is designed for sharing of public information. Please do not share Intel or third-party confidential information here.
6565 Discussions

## Another application of dcopy subroutine

Beginner
138 Views
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)

Cheers,

4 Replies
Black Belt
138 Views
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.
Moderator
138 Views
moreover it would be faster then using dcopy for such cases.
Beginner
138 Views
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

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));
....