f90charm: Change API for broadcasts to chare arrays 72/4272/6
authorEvan Ramos <evan@hpccharm.com>
Mon, 18 Jun 2018 17:36:57 +0000 (12:36 -0500)
committerEvan Ramos <evan@hpccharm.com>
Tue, 24 Jul 2018 15:53:57 +0000 (10:53 -0500)
Previously, passing -1 to the first index of a direct send will cause a
broadcast. Now, issue a call to ChareName_Broadcast_MethodName.

Change-Id: I44dc3b7c36ca067a7411b7393dc128aeed950b70

doc/f90charm/manual.tex
examples/charm++/f90charm/ldbDemo/ldbDemof.f90
examples/charm++/f90charm/ldbRedDemo/ldbRedDemof.f90
src/xlat-i/xi-Entry.C

index 0c76b2634763a79cc85f7a75c7f569d0909b6e19..d3c659f4de4bc832d83b03f452ed4216a8d7dde8 100644 (file)
@@ -111,7 +111,9 @@ if it is 1D array:
 
   This subroutine will send a message to the array element with the index
 as myIndex. Similarly for arrays with higher dimensions, replace myIndex by
-corresponding number of array indices.
+corresponding number of array indices. Broadcasts are supported as well:
+
+  \verb+<ChareName>_Broadcast_<EntryName>(charePtr, data1, data2 ... )+
 
 There are several others things you need to know.
 
index 1c89b0c110a802e491c9522d8c40de1127cccf8c..712274350646b979c96b48342c7a72d3d9d60617 100644 (file)
             call CkPrintf("ALL done in %F seconds.\n$$", t1-objPtr%obj%t0)
             call CkExit()
           ELSE
-             ! broadcast using "-1"
-            call BalanceMe_Invoke_nextStep(objPtr%aid, -1);
+            call BalanceMe_Broadcast_nextStep(objPtr%aid);
           ENDIF
         ENDIF
       END SUBROUTINE
index 9fa11b8ff24f213a553172c3989c3e1e0a1d69ff..72bac25f6ac49ab4340f50889c2277c961483d6f 100644 (file)
           call CkPrintf("ALL done in %F seconds.\n$$", t1-objPtr%obj%t0)
           call CkExit()
         ELSE
-           ! broadcast using "-1"
-          call BalanceMe_Invoke_nextStep(objPtr%aid, -1);
+          call BalanceMe_Broadcast_nextStep(objPtr%aid);
         ENDIF
       END SUBROUTINE
 
index c447837606cab85fc96f188da70a7edfac46411e..4b0026eb6a95b8d68eb07aa750d7c5d668482464 100644 (file)
@@ -2645,21 +2645,36 @@ void Entry::genDefs(XStr& str) {
     str << "  CkArrayID *aid = (CkArrayID *)*aindex;\n";
     str << "\n";
     str << "  " << container->proxyName() << " h(*aid);\n";
-    str << "  if (*index1 == -1) \n";
-    str << "    h." << name << "(";
-    if (!param->isVoid()) param->printValue(str);
-    str << ");\n";
-    str << "  else\n";
     if (dim == (const char*)"1D")
-      str << "    h[*index1]." << name << "(";
+      str << "  h[*index1]." << name << "(";
     else if (dim == (const char*)"2D")
-      str << "    h[CkArrayIndex2D(*index1, *index2)]." << name << "(";
+      str << "  h[CkArrayIndex2D(*index1, *index2)]." << name << "(";
     else if (dim == (const char*)"3D")
-      str << "    h[CkArrayIndex3D(*index1, *index2, *index3)]." << name << "(";
+      str << "  h[CkArrayIndex3D(*index1, *index2, *index3)]." << name << "(";
     if (!param->isVoid()) param->printValue(str);
     str << ");\n";
     str << "}\n";
 
+    if (container->isArray()) {
+      str << "extern \"C\" ";
+      str << "void ";
+      str << fortranify(container->baseName(), "_Broadcast_", name);
+      str << "(void** aindex";
+      if (!param->isVoid()) {
+        str << ", ";
+        param->printAddress(str);
+      }
+      str << ")\n";
+      str << "{\n";
+      str << "  CkArrayID *aid = (CkArrayID *)*aindex;\n";
+      str << "\n";
+      str << "  " << container->proxyName() << " h(*aid);\n";
+        str << "  h." << name << "(";
+      if (!param->isVoid()) param->printValue(str);
+      str << ");\n";
+      str << "}\n";
+    }
+
     if (isReductionTarget()) {
       str << "extern \"C\" ";
       str << "int ";