Intel® Fortran Compiler
Build applications that can scale for the future with optimized code designed for Intel® Xeon® and compatible processors.

maximum number of nested loops

Sigolaev__Yuriy
Beginner
1,430 Views

What is the maximum number of nested loops in the 19 version of Intel Fortran?

0 Kudos
9 Replies
jimdempseyatthecove
Honored Contributor III
1,422 Views

This would be a stack size limitation. Larger stack size == more nest levels.

Note, the above is for runtime. At compile time, of a single procedure, the compiler may have an internal limit, possibly limited by its stack size and/or internal structure design for tracking tokens (variables).

If you are running into a problem, please state the particulars.

Jim Dempsey

0 Kudos
Sigolaev__Yuriy
Beginner
1,409 Views

>>At compile time, of a single procedure, the compiler may have an internal limit,

I have to use about two hundred nested loops. I'm wondering if the translator can cope with this task?

 

0 Kudos
jimdempseyatthecove
Honored Contributor III
1,405 Views

Is this in the same procedure? (same subroutine or function)

Why not simply try it?

Jim Dempsey

0 Kudos
FortranFan
Honored Contributor II
1,402 Views

Considering the high-level of nesting in your loops, have you looked into recursive algorithm(s) and evaluated whether they can help you with your computing needs?

Starting Fortran 2018, unless marked as NON_RECURSIVE or dictated by some compiler option(s) to override the standard, every procedure is recursive.  And one can thus hope a Fortran 2018-compliant compiler will be reasonably good (and striving toward being highly adept) at optimizing the program with respect to recursion, both in terms of run-time (e.g., stack usage) as well as compile-time processing.

Thus investment in recursive algorithms toward one's computing needs can prove valuable in the long-term.  

0 Kudos
Sigolaev__Yuriy
Beginner
1,395 Views

Binary tree traversal with nested loops is much more efficient than any other algorithm. Don't the developers of the translator indicate the maximum nesting of loops?

0 Kudos
Steve_Lionel
Honored Contributor III
1,385 Views

The Intel documentation, under Compiler Limits, says "DO, CASE, FORALL, WHERE, and block IF statement nesting (combined): 512"

Sigolaev__Yuriy
Beginner
1,379 Views
0 Kudos
Ron_Green
Moderator
1,370 Views

Steve beat me to it - 512 is correct.

Error Message if you exceed this:

/* 370 */

"The IF, DO, CASE, FORALL, and/or WHERE constructs are nested too deeply. The current limit is 512."

Speaking of limits, array ranks limit = 31

0 Kudos
Sigolaev__Yuriy
Beginner
1,356 Views

>>The... DO... constructs are nested too deeply. ..

I would not say this: in advanced algorithms, the initial and final values of the loop parameter are variables, and if they match, the transition to the inner loops is linear in time.

 

0 Kudos
Reply