Intel® Fortran Compiler
Build applications that can scale for the future with optimized code designed for Intel® Xeon® and compatible processors.
Announcements
FPGA community forums and blogs on community.intel.com are migrating to the new Altera Community and are read-only. For urgent support needs during this transition, please visit the FPGA Design Resources page or contact an Altera Authorized Distributor.

Do Concurrent

David_DiLaura
Beginner
677 Views

Colleagues:

The documenation for the DO CONCURRENT statement reports that it: "Specifies that there are no data dependencies between the iterations of a DO loop."

If /Qparallel is specified (or the appropriate optimization parameter is set in VS) does this mean that the loop is always parallelized? Does the statement surpress the compiler's examination for dependencies?  There must be some other criteria, since the DO CONCURRENT I've put in place of a conventional DO is not being parallelized. There are no dependensices, explicit or implicit.

How does the compiler treat DO CONCURRENT? Is there a place where the details are set down? -- the documentation doesn't provide them.

David

0 Kudos
2 Replies
TimP
Honored Contributor III
677 Views
/Qopt-report would give a confirmation of whether you achieved parallel and vector compilation, You could add /Qguide in order to get suggestions. In case you don't care about efficiency of parallelization, /Qpar-threshold can be used to increase aggressiveness of parallelization. /Qparallel usually requires nested loops to parallelize without lowering the threshold. I haven't seen much usage of /Qparallel, as it is straightforward to use OpenMP parallel do in the case where you have made a loop eligible for DO CONCURRENT.
0 Kudos
Steven_L_Intel1
Employee
677 Views
DO CONCURRENT does not guarantee parallelization. If you enable /Qparallel, the compiler will attempt to parallelize the construct body and the use of DO CONCURRENT gives the compiler additional information that enables it to parallelize and vectorize better. As Tim says, you can use the optimization report to see what got parallelized. Internal details are not available, but you can think of it as autoparallelization with directives specifying that there are no loop-carried dependencies.
0 Kudos
Reply