What is the maximum number of nested loops in the 19 version of Intel Fortran?
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
>>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?
Is this in the same procedure? (same subroutine or function)
Why not simply try it?
Jim Dempsey
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.
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?
The Intel documentation, under Compiler Limits, says "DO, CASE, FORALL, WHERE, and block IF statement nesting (combined): 512"
Thanks Steve.
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
>>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.
For more complete information about compiler optimizations, see our Optimization Notice.