You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
while working with tuples and varargs, I found some surprising communication. My intuition would be that they are handled more or less the same, but that does not seem to be the case.
The following code has an extra GET
proc foo(args...) {
forparam i in0..#args.size {
onLocales[1]doconst s = args[i].localize(); // 1 get for localize
}
}
proc bar(args) {
forparam i in0..#args.size {
onLocales[1]doconst s = args[i].localize(); // 2 gets: 1 for localize, 1 for ????
}
}
proc callme(param useBar, args...) {
if useBar then
bar(args);
else
foo((...args));
}
use CommDiagnostics;
configconst verboseComm =false;
if verboseComm then startVerboseComm();
else {
resetCommDiagnostics();
startCommDiagnostics();
}
callme(true, "hi", "there");
if verboseComm then stopVerboseComm();
else {
stopCommDiagnostics();
printCommDiagnosticsTable();
}
if verboseComm then startVerboseComm();
else {
resetCommDiagnostics();
startCommDiagnostics();
}
callme(false, "hi", "there");
if verboseComm then stopVerboseComm();
else {
stopCommDiagnostics();
printCommDiagnosticsTable();
}
After discussing with @bradcray and @e-kayrakli, here is what we think is happening.
The varargs to foo are being stamped out at resolution foo(_e0_arg, _e1_arg), while bar still has a tuple
During RVF (remote value forwarding), the individual args for foo get forwarded, while tuple for bar does not.
In general, while this is surprising, its not too concerning. But I am capturing it here so if someone ever hits it we have a record of it.
The text was updated successfully, but these errors were encountered:
while working with tuples and varargs, I found some surprising communication. My intuition would be that they are handled more or less the same, but that does not seem to be the case.
The following code has an extra GET
After discussing with @bradcray and @e-kayrakli, here is what we think is happening.
foo
are being stamped out at resolutionfoo(_e0_arg, _e1_arg)
, whilebar
still has a tuplefoo
get forwarded, while tuple forbar
does not.In general, while this is surprising, its not too concerning. But I am capturing it here so if someone ever hits it we have a record of it.
The text was updated successfully, but these errors were encountered: