-
Notifications
You must be signed in to change notification settings - Fork 91
Description
@milancurcic What's the purpose of the following code mod_mnist.f90?
#ifdef CAF
call co_sum(db(n) % array)
#endif
I'm unclear on whether it's designed to support serial builds (in which case it seems unnecessary) or designed to support compilers that don't support co_sum
, in which case I'm curious about which compilers and the motivation for supporting them. Intel, Cray, NAG, and GNU all support co_sum
.
Based on the principle of least surprise, I recommend making standard-conforming behavior the default behavior and using a macro to turn off standard behavior rather than requiring a macro to turn on standard behavior.
I also recommend wrapping the entire subroutine in the #ifdef
block and similarly wrapping any references to it. Otherwise, someone reading call db_co_sum(...)
elsewhere is going to be surprised when they realize they have to pass a special flag to get the procedure to do what its name implies. This is one of the subtleties that I was mentioning regarding the conceptual benefit of separating procedure definitions from the corresponding interface bodies. Doing so discourages hiding gotchas in the procedure definition.