[Swift-commit] r8454 - in SwiftApps: . cetustukey subjobs

ketan at ci.uchicago.edu ketan at ci.uchicago.edu
Tue May 5 11:12:11 CDT 2015


Author: ketan
Date: 2015-05-05 11:12:11 -0500 (Tue, 05 May 2015)
New Revision: 8454

Added:
   SwiftApps/cetustukey/
   SwiftApps/cetustukey/README.txt
   SwiftApps/cetustukey/avg
   SwiftApps/cetustukey/cetustukey.png
   SwiftApps/cetustukey/cetustukeytut.html
   SwiftApps/cetustukey/ct.conf
   SwiftApps/cetustukey/docbuild
   SwiftApps/cetustukey/local.conf
   SwiftApps/cetustukey/pi
   SwiftApps/cetustukey/pi.c
   SwiftApps/cetustukey/pi.swift
   SwiftApps/cetustukey/runct
   SwiftApps/cetustukey/runlocal
   SwiftApps/cetustukey/runpi
Modified:
   SwiftApps/subjobs/bg.sh
Log:
cetus tukey

Added: SwiftApps/cetustukey/README.txt
===================================================================
--- SwiftApps/cetustukey/README.txt	                        (rev 0)
+++ SwiftApps/cetustukey/README.txt	2015-05-05 16:12:11 UTC (rev 8454)
@@ -0,0 +1,89 @@
+Running Swift on Cetus and Tukey
+=================================
+
+Introduction
+------------
+
+This tutorial will walk you through running Swift applications over ALCF Cetus and Tukey systems. The motivation behind this tutorial is to enable use-cases on ALCF systems which need systems such as Mira and Cetus for the analysis and processing phase of their application and systems such as Tukey for postprocessing and visualization phase. The tutorial describes a technique to run both these phases across the two (or more) systems in a seamless manner (that is, without user intervention for authentication purposes). 
+
+Copy Tarball
+-------------
+
+Copy the tarball to your home area on Cetus:
+
+----
+cp ~ketan/public/cetustukeytut.tgz $HOME
+----
+
+followed by:
+
+----
+tar -zxf cetustukeytut.tgz
+----
+
+Create Tunnel
+-------------
+
+Open a new terminal and log into Cetus. Create an ssh tunnel between Cetus and Tukey:
+
+----
+cetus$ ssh -L 52000:127.0.0.1:52000 tukey.alcf.anl.gov -N -f
+----
+
+Start Service
+--------------
+
+Open a new terminal and log into Tukey. Start the coaster service on Tukey:
+
+----
+tukey$ /home/ketan/swift-k/dist/swift-svn/bin/coaster-service -p 52000 -nosec
+----
+
+Systems Interaction
+--------------------
+The following figure gives an overview of systems interactions in the setup:
+
+image:cetustukey.png[]
+
+Swift Application
+------------------
+The Swift application included in this package computes the value of pi using montecarlo method. An MPI based C code computes the value of pi. This code is invoked multiple times in parallel. Each invocation writes the value it computed in an output file. A next application, implemented as a shell script that computes the average of the values found in the collection of output files generated in previous runs. The Swift source code for the applications is as below:
+
+[source,C]
+----
+include::pi.swift[]
+----
+
+Configuration
+--------------
+
+The run is controlled by a configuration file called ct.conf which is as follows:
+
+[source,json]
+----
+include::ct.conf[]
+----
+
+Run Swift
+----------
+
+Run Swift on Cetus:
+
+----
+cetus$ cd $HOME/cetustukeytut
+cetus$ ./runct
+----
+
+Results
+-------
+
+On successful completion, the answer, an approximation of pi should be in the produced file +ans.txt+:
+
+----
+cetus$ cat ans.txt
+----
+
+Upcoming Features
+------------------
+. Extend to other systems.
+. Show use of gridftp and/or Globus.org for file transfer.

Added: SwiftApps/cetustukey/avg
===================================================================
--- SwiftApps/cetustukey/avg	                        (rev 0)
+++ SwiftApps/cetustukey/avg	2015-05-05 16:12:11 UTC (rev 8454)
@@ -0,0 +1,16 @@
+#!/bin/bash
+
+#set -x
+
+ans=0.0
+count=0.00000000000000001
+
+for i in $@
+do
+ val=$(grep 'pi =' $i | awk 'END{print $3}')
+ ans=$(echo "scale=20; $val + $ans" | bc)
+ count=$(echo "scale=20; $count + 1" | bc)
+done
+
+echo "scale=20; $ans / $count" | bc
+


Property changes on: SwiftApps/cetustukey/avg
___________________________________________________________________
Added: svn:executable
   + *

Added: SwiftApps/cetustukey/cetustukey.png
===================================================================
(Binary files differ)


Property changes on: SwiftApps/cetustukey/cetustukey.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: SwiftApps/cetustukey/cetustukeytut.html
===================================================================
--- SwiftApps/cetustukey/cetustukeytut.html	                        (rev 0)
+++ SwiftApps/cetustukey/cetustukeytut.html	2015-05-05 16:12:11 UTC (rev 8454)
@@ -0,0 +1,945 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
+    "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
+<head>
+<meta http-equiv="Content-Type" content="application/xhtml+xml; charset=UTF-8" />
+<meta name="generator" content="AsciiDoc 8.6.9" />
+<title>Running Swift on Cetus and Tukey</title>
+<style type="text/css">
+/* Shared CSS for AsciiDoc xhtml11 and html5 backends */
+
+/* Default font. */
+body {
+  font-family: Georgia,serif;
+}
+
+/* Title font. */
+h1, h2, h3, h4, h5, h6,
+div.title, caption.title,
+thead, p.table.header,
+#toctitle,
+#author, #revnumber, #revdate, #revremark,
+#footer {
+  font-family: Arial,Helvetica,sans-serif;
+}
+
+body {
+  margin: 1em 5% 1em 5%;
+}
+
+a {
+  color: blue;
+  text-decoration: underline;
+}
+a:visited {
+  color: fuchsia;
+}
+
+em {
+  font-style: italic;
+  color: navy;
+}
+
+strong {
+  font-weight: bold;
+  color: #083194;
+}
+
+h1, h2, h3, h4, h5, h6 {
+  color: #527bbd;
+  margin-top: 1.2em;
+  margin-bottom: 0.5em;
+  line-height: 1.3;
+}
+
+h1, h2, h3 {
+  border-bottom: 2px solid silver;
+}
+h2 {
+  padding-top: 0.5em;
+}
+h3 {
+  float: left;
+}
+h3 + * {
+  clear: left;
+}
+h5 {
+  font-size: 1.0em;
+}
+
+div.sectionbody {
+  margin-left: 0;
+}
+
+hr {
+  border: 1px solid silver;
+}
+
+p {
+  margin-top: 0.5em;
+  margin-bottom: 0.5em;
+}
+
+ul, ol, li > p {
+  margin-top: 0;
+}
+ul > li     { color: #aaa; }
+ul > li > * { color: black; }
+
+.monospaced, code, pre {
+  font-family: "Courier New", Courier, monospace;
+  font-size: inherit;
+  color: navy;
+  padding: 0;
+  margin: 0;
+}
+pre {
+  white-space: pre-wrap;
+}
+
+#author {
+  color: #527bbd;
+  font-weight: bold;
+  font-size: 1.1em;
+}
+#email {
+}
+#revnumber, #revdate, #revremark {
+}
+
+#footer {
+  font-size: small;
+  border-top: 2px solid silver;
+  padding-top: 0.5em;
+  margin-top: 4.0em;
+}
+#footer-text {
+  float: left;
+  padding-bottom: 0.5em;
+}
+#footer-badges {
+  float: right;
+  padding-bottom: 0.5em;
+}
+
+#preamble {
+  margin-top: 1.5em;
+  margin-bottom: 1.5em;
+}
+div.imageblock, div.exampleblock, div.verseblock,
+div.quoteblock, div.literalblock, div.listingblock, div.sidebarblock,
+div.admonitionblock {
+  margin-top: 1.0em;
+  margin-bottom: 1.5em;
+}
+div.admonitionblock {
+  margin-top: 2.0em;
+  margin-bottom: 2.0em;
+  margin-right: 10%;
+  color: #606060;
+}
+
+div.content { /* Block element content. */
+  padding: 0;
+}
+
+/* Block element titles. */
+div.title, caption.title {
+  color: #527bbd;
+  font-weight: bold;
+  text-align: left;
+  margin-top: 1.0em;
+  margin-bottom: 0.5em;
+}
+div.title + * {
+  margin-top: 0;
+}
+
+td div.title:first-child {
+  margin-top: 0.0em;
+}
+div.content div.title:first-child {
+  margin-top: 0.0em;
+}
+div.content + div.title {
+  margin-top: 0.0em;
+}
+
+div.sidebarblock > div.content {
+  background: #ffffee;
+  border: 1px solid #dddddd;
+  border-left: 4px solid #f0f0f0;
+  padding: 0.5em;
+}
+
+div.listingblock > div.content {
+  border: 1px solid #dddddd;
+  border-left: 5px solid #f0f0f0;
+  background: #f8f8f8;
+  padding: 0.5em;
+}
+
+div.quoteblock, div.verseblock {
+  padding-left: 1.0em;
+  margin-left: 1.0em;
+  margin-right: 10%;
+  border-left: 5px solid #f0f0f0;
+  color: #888;
+}
+
+div.quoteblock > div.attribution {
+  padding-top: 0.5em;
+  text-align: right;
+}
+
+div.verseblock > pre.content {
+  font-family: inherit;
+  font-size: inherit;
+}
+div.verseblock > div.attribution {
+  padding-top: 0.75em;
+  text-align: left;
+}
+/* DEPRECATED: Pre version 8.2.7 verse style literal block. */
+div.verseblock + div.attribution {
+  text-align: left;
+}
+
+div.admonitionblock .icon {
+  vertical-align: top;
+  font-size: 1.1em;
+  font-weight: bold;
+  text-decoration: underline;
+  color: #527bbd;
+  padding-right: 0.5em;
+}
+div.admonitionblock td.content {
+  padding-left: 0.5em;
+  border-left: 3px solid #dddddd;
+}
+
+div.exampleblock > div.content {
+  border-left: 3px solid #dddddd;
+  padding-left: 0.5em;
+}
+
+div.imageblock div.content { padding-left: 0; }
+span.image img { border-style: none; vertical-align: text-bottom; }
+a.image:visited { color: white; }
+
+dl {
+  margin-top: 0.8em;
+  margin-bottom: 0.8em;
+}
+dt {
+  margin-top: 0.5em;
+  margin-bottom: 0;
+  font-style: normal;
+  color: navy;
+}
+dd > *:first-child {
+  margin-top: 0.1em;
+}
+
+ul, ol {
+    list-style-position: outside;
+}
+ol.arabic {
+  list-style-type: decimal;
+}
+ol.loweralpha {
+  list-style-type: lower-alpha;
+}
+ol.upperalpha {
+  list-style-type: upper-alpha;
+}
+ol.lowerroman {
+  list-style-type: lower-roman;
+}
+ol.upperroman {
+  list-style-type: upper-roman;
+}
+
+div.compact ul, div.compact ol,
+div.compact p, div.compact p,
+div.compact div, div.compact div {
+  margin-top: 0.1em;
+  margin-bottom: 0.1em;
+}
+
+tfoot {
+  font-weight: bold;
+}
+td > div.verse {
+  white-space: pre;
+}
+
+div.hdlist {
+  margin-top: 0.8em;
+  margin-bottom: 0.8em;
+}
+div.hdlist tr {
+  padding-bottom: 15px;
+}
+dt.hdlist1.strong, td.hdlist1.strong {
+  font-weight: bold;
+}
+td.hdlist1 {
+  vertical-align: top;
+  font-style: normal;
+  padding-right: 0.8em;
+  color: navy;
+}
+td.hdlist2 {
+  vertical-align: top;
+}
+div.hdlist.compact tr {
+  margin: 0;
+  padding-bottom: 0;
+}
+
+.comment {
+  background: yellow;
+}
+
+.footnote, .footnoteref {
+  font-size: 0.8em;
+}
+
+span.footnote, span.footnoteref {
+  vertical-align: super;
+}
+
+#footnotes {
+  margin: 20px 0 20px 0;
+  padding: 7px 0 0 0;
+}
+
+#footnotes div.footnote {
+  margin: 0 0 5px 0;
+}
+
+#footnotes hr {
+  border: none;
+  border-top: 1px solid silver;
+  height: 1px;
+  text-align: left;
+  margin-left: 0;
+  width: 20%;
+  min-width: 100px;
+}
+
+div.colist td {
+  padding-right: 0.5em;
+  padding-bottom: 0.3em;
+  vertical-align: top;
+}
+div.colist td img {
+  margin-top: 0.3em;
+}
+
+ at media print {
+  #footer-badges { display: none; }
+}
+
+#toc {
+  margin-bottom: 2.5em;
+}
+
+#toctitle {
+  color: #527bbd;
+  font-size: 1.1em;
+  font-weight: bold;
+  margin-top: 1.0em;
+  margin-bottom: 0.1em;
+}
+
+div.toclevel0, div.toclevel1, div.toclevel2, div.toclevel3, div.toclevel4 {
+  margin-top: 0;
+  margin-bottom: 0;
+}
+div.toclevel2 {
+  margin-left: 2em;
+  font-size: 0.9em;
+}
+div.toclevel3 {
+  margin-left: 4em;
+  font-size: 0.9em;
+}
+div.toclevel4 {
+  margin-left: 6em;
+  font-size: 0.9em;
+}
+
+span.aqua { color: aqua; }
+span.black { color: black; }
+span.blue { color: blue; }
+span.fuchsia { color: fuchsia; }
+span.gray { color: gray; }
+span.green { color: green; }
+span.lime { color: lime; }
+span.maroon { color: maroon; }
+span.navy { color: navy; }
+span.olive { color: olive; }
+span.purple { color: purple; }
+span.red { color: red; }
+span.silver { color: silver; }
+span.teal { color: teal; }
+span.white { color: white; }
+span.yellow { color: yellow; }
+
+span.aqua-background { background: aqua; }
+span.black-background { background: black; }
+span.blue-background { background: blue; }
+span.fuchsia-background { background: fuchsia; }
+span.gray-background { background: gray; }
+span.green-background { background: green; }
+span.lime-background { background: lime; }
+span.maroon-background { background: maroon; }
+span.navy-background { background: navy; }
+span.olive-background { background: olive; }
+span.purple-background { background: purple; }
+span.red-background { background: red; }
+span.silver-background { background: silver; }
+span.teal-background { background: teal; }
+span.white-background { background: white; }
+span.yellow-background { background: yellow; }
+
+span.big { font-size: 2em; }
+span.small { font-size: 0.6em; }
+
+span.underline { text-decoration: underline; }
+span.overline { text-decoration: overline; }
+span.line-through { text-decoration: line-through; }
+
+div.unbreakable { page-break-inside: avoid; }
+
+
+/*
+ * xhtml11 specific
+ *
+ * */
+
+div.tableblock {
+  margin-top: 1.0em;
+  margin-bottom: 1.5em;
+}
+div.tableblock > table {
+  border: 3px solid #527bbd;
+}
+thead, p.table.header {
+  font-weight: bold;
+  color: #527bbd;
+}
+p.table {
+  margin-top: 0;
+}
+/* Because the table frame attribute is overriden by CSS in most browsers. */
+div.tableblock > table[frame="void"] {
+  border-style: none;
+}
+div.tableblock > table[frame="hsides"] {
+  border-left-style: none;
+  border-right-style: none;
+}
+div.tableblock > table[frame="vsides"] {
+  border-top-style: none;
+  border-bottom-style: none;
+}
+
+
+/*
+ * html5 specific
+ *
+ * */
+
+table.tableblock {
+  margin-top: 1.0em;
+  margin-bottom: 1.5em;
+}
+thead, p.tableblock.header {
+  font-weight: bold;
+  color: #527bbd;
+}
+p.tableblock {
+  margin-top: 0;
+}
+table.tableblock {
+  border-width: 3px;
+  border-spacing: 0px;
+  border-style: solid;
+  border-color: #527bbd;
+  border-collapse: collapse;
+}
+th.tableblock, td.tableblock {
+  border-width: 1px;
+  padding: 4px;
+  border-style: solid;
+  border-color: #527bbd;
+}
+
+table.tableblock.frame-topbot {
+  border-left-style: hidden;
+  border-right-style: hidden;
+}
+table.tableblock.frame-sides {
+  border-top-style: hidden;
+  border-bottom-style: hidden;
+}
+table.tableblock.frame-none {
+  border-style: hidden;
+}
+
+th.tableblock.halign-left, td.tableblock.halign-left {
+  text-align: left;
+}
+th.tableblock.halign-center, td.tableblock.halign-center {
+  text-align: center;
+}
+th.tableblock.halign-right, td.tableblock.halign-right {
+  text-align: right;
+}
+
+th.tableblock.valign-top, td.tableblock.valign-top {
+  vertical-align: top;
+}
+th.tableblock.valign-middle, td.tableblock.valign-middle {
+  vertical-align: middle;
+}
+th.tableblock.valign-bottom, td.tableblock.valign-bottom {
+  vertical-align: bottom;
+}
+
+
+/*
+ * manpage specific
+ *
+ * */
+
+body.manpage h1 {
+  padding-top: 0.5em;
+  padding-bottom: 0.5em;
+  border-top: 2px solid silver;
+  border-bottom: 2px solid silver;
+}
+body.manpage h2 {
+  border-style: none;
+}
+body.manpage div.sectionbody {
+  margin-left: 3em;
+}
+
+ at media print {
+  body.manpage div#toc { display: none; }
+}
+
+
+</style>
+<script type="text/javascript">
+/*<![CDATA[*/
+var asciidoc = {  // Namespace.
+
+/////////////////////////////////////////////////////////////////////
+// Table Of Contents generator
+/////////////////////////////////////////////////////////////////////
+
+/* Author: Mihai Bazon, September 2002
+ * http://students.infoiasi.ro/~mishoo
+ *
+ * Table Of Content generator
+ * Version: 0.4
+ *
+ * Feel free to use this script under the terms of the GNU General Public
+ * License, as long as you do not remove or alter this notice.
+ */
+
+ /* modified by Troy D. Hanson, September 2006. License: GPL */
+ /* modified by Stuart Rackham, 2006, 2009. License: GPL */
+
+// toclevels = 1..4.
+toc: function (toclevels) {
+
+  function getText(el) {
+    var text = "";
+    for (var i = el.firstChild; i != null; i = i.nextSibling) {
+      if (i.nodeType == 3 /* Node.TEXT_NODE */) // IE doesn't speak constants.
+        text += i.data;
+      else if (i.firstChild != null)
+        text += getText(i);
+    }
+    return text;
+  }
+
+  function TocEntry(el, text, toclevel) {
+    this.element = el;
+    this.text = text;
+    this.toclevel = toclevel;
+  }
+
+  function tocEntries(el, toclevels) {
+    var result = new Array;
+    var re = new RegExp('[hH]([1-'+(toclevels+1)+'])');
+    // Function that scans the DOM tree for header elements (the DOM2
+    // nodeIterator API would be a better technique but not supported by all
+    // browsers).
+    var iterate = function (el) {
+      for (var i = el.firstChild; i != null; i = i.nextSibling) {
+        if (i.nodeType == 1 /* Node.ELEMENT_NODE */) {
+          var mo = re.exec(i.tagName);
+          if (mo && (i.getAttribute("class") || i.getAttribute("className")) != "float") {
+            result[result.length] = new TocEntry(i, getText(i), mo[1]-1);
+          }
+          iterate(i);
+        }
+      }
+    }
+    iterate(el);
+    return result;
+  }
+
+  var toc = document.getElementById("toc");
+  if (!toc) {
+    return;
+  }
+
+  // Delete existing TOC entries in case we're reloading the TOC.
+  var tocEntriesToRemove = [];
+  var i;
+  for (i = 0; i < toc.childNodes.length; i++) {
+    var entry = toc.childNodes[i];
+    if (entry.nodeName.toLowerCase() == 'div'
+     && entry.getAttribute("class")
+     && entry.getAttribute("class").match(/^toclevel/))
+      tocEntriesToRemove.push(entry);
+  }
+  for (i = 0; i < tocEntriesToRemove.length; i++) {
+    toc.removeChild(tocEntriesToRemove[i]);
+  }
+
+  // Rebuild TOC entries.
+  var entries = tocEntries(document.getElementById("content"), toclevels);
+  for (var i = 0; i < entries.length; ++i) {
+    var entry = entries[i];
+    if (entry.element.id == "")
+      entry.element.id = "_toc_" + i;
+    var a = document.createElement("a");
+    a.href = "#" + entry.element.id;
+    a.appendChild(document.createTextNode(entry.text));
+    var div = document.createElement("div");
+    div.appendChild(a);
+    div.className = "toclevel" + entry.toclevel;
+    toc.appendChild(div);
+  }
+  if (entries.length == 0)
+    toc.parentNode.removeChild(toc);
+},
+
+
+/////////////////////////////////////////////////////////////////////
+// Footnotes generator
+/////////////////////////////////////////////////////////////////////
+
+/* Based on footnote generation code from:
+ * http://www.brandspankingnew.net/archive/2005/07/format_footnote.html
+ */
+
+footnotes: function () {
+  // Delete existing footnote entries in case we're reloading the footnodes.
+  var i;
+  var noteholder = document.getElementById("footnotes");
+  if (!noteholder) {
+    return;
+  }
+  var entriesToRemove = [];
+  for (i = 0; i < noteholder.childNodes.length; i++) {
+    var entry = noteholder.childNodes[i];
+    if (entry.nodeName.toLowerCase() == 'div' && entry.getAttribute("class") == "footnote")
+      entriesToRemove.push(entry);
+  }
+  for (i = 0; i < entriesToRemove.length; i++) {
+    noteholder.removeChild(entriesToRemove[i]);
+  }
+
+  // Rebuild footnote entries.
+  var cont = document.getElementById("content");
+  var spans = cont.getElementsByTagName("span");
+  var refs = {};
+  var n = 0;
+  for (i=0; i<spans.length; i++) {
+    if (spans[i].className == "footnote") {
+      n++;
+      var note = spans[i].getAttribute("data-note");
+      if (!note) {
+        // Use [\s\S] in place of . so multi-line matches work.
+        // Because JavaScript has no s (dotall) regex flag.
+        note = spans[i].innerHTML.match(/\s*\[([\s\S]*)]\s*/)[1];
+        spans[i].innerHTML =
+          "[<a id='_footnoteref_" + n + "' href='#_footnote_" + n +
+          "' title='View footnote' class='footnote'>" + n + "</a>]";
+        spans[i].setAttribute("data-note", note);
+      }
+      noteholder.innerHTML +=
+        "<div class='footnote' id='_footnote_" + n + "'>" +
+        "<a href='#_footnoteref_" + n + "' title='Return to text'>" +
+        n + "</a>. " + note + "</div>";
+      var id =spans[i].getAttribute("id");
+      if (id != null) refs["#"+id] = n;
+    }
+  }
+  if (n == 0)
+    noteholder.parentNode.removeChild(noteholder);
+  else {
+    // Process footnoterefs.
+    for (i=0; i<spans.length; i++) {
+      if (spans[i].className == "footnoteref") {
+        var href = spans[i].getElementsByTagName("a")[0].getAttribute("href");
+        href = href.match(/#.*/)[0];  // Because IE return full URL.
+        n = refs[href];
+        spans[i].innerHTML =
+          "[<a href='#_footnote_" + n +
+          "' title='View footnote' class='footnote'>" + n + "</a>]";
+      }
+    }
+  }
+},
+
+install: function(toclevels) {
+  var timerId;
+
+  function reinstall() {
+    asciidoc.footnotes();
+    if (toclevels) {
+      asciidoc.toc(toclevels);
+    }
+  }
+
+  function reinstallAndRemoveTimer() {
+    clearInterval(timerId);
+    reinstall();
+  }
+
+  timerId = setInterval(reinstall, 500);
+  if (document.addEventListener)
+    document.addEventListener("DOMContentLoaded", reinstallAndRemoveTimer, false);
+  else
+    window.onload = reinstallAndRemoveTimer;
+}
+
+}
+asciidoc.install(2);
+/*]]>*/
+</script>
+</head>
+<body class="article" style="max-width:750px">
+<div id="header">
+<h1>Running Swift on Cetus and Tukey</h1>
+<div id="toc">
+  <div id="toctitle">Table of Contents</div>
+  <noscript><p><b>JavaScript must be enabled in your browser to display the table of contents.</b></p></noscript>
+</div>
+</div>
+<div id="content">
+<div class="sect1">
+<h2 id="_introduction">1. Introduction</h2>
+<div class="sectionbody">
+<div class="paragraph"><p>This tutorial will walk you through running Swift applications over ALCF Cetus and Tukey systems. The motivation behind this tutorial is to enable use-cases on ALCF systems which need systems such as Mira and Cetus for the analysis and processing phase of their application and systems such as Tukey for postprocessing and visualization phase. The tutorial describes a technique to run both these phases across the two (or more) systems in a seamless manner (that is, without user intervention for authentication purposes).</p></div>
+</div>
+</div>
+<div class="sect1">
+<h2 id="_copy_tarball">2. Copy Tarball</h2>
+<div class="sectionbody">
+<div class="paragraph"><p>Copy the tarball to your home area on Cetus:</p></div>
+<div class="listingblock">
+<div class="content">
+<pre><code>cp ~ketan/public/cetustukeytut.tgz $HOME</code></pre>
+</div></div>
+<div class="paragraph"><p>followed by:</p></div>
+<div class="listingblock">
+<div class="content">
+<pre><code>tar -zxf cetustukeytut.tgz</code></pre>
+</div></div>
+</div>
+</div>
+<div class="sect1">
+<h2 id="_create_tunnel">3. Create Tunnel</h2>
+<div class="sectionbody">
+<div class="paragraph"><p>Open a new terminal and log into Cetus. Create an ssh tunnel between Cetus and Tukey:</p></div>
+<div class="listingblock">
+<div class="content">
+<pre><code>cetus$ ssh -L 52000:127.0.0.1:52000 tukey.alcf.anl.gov -N -f</code></pre>
+</div></div>
+</div>
+</div>
+<div class="sect1">
+<h2 id="_start_service">4. Start Service</h2>
+<div class="sectionbody">
+<div class="paragraph"><p>Open a new terminal and log into Tukey. Start the coaster service on Tukey:</p></div>
+<div class="listingblock">
+<div class="content">
+<pre><code>tukey$ /home/ketan/swift-k/dist/swift-svn/bin/coaster-service -p 52000 -nosec</code></pre>
+</div></div>
+</div>
+</div>
+<div class="sect1">
+<h2 id="_systems_interaction">5. Systems Interaction</h2>
+<div class="sectionbody">
+<div class="paragraph"><p>The following figure gives an overview of systems interactions in the setup:</p></div>
+<div class="paragraph"><p><span class="image">
+<img src="cetustukey.png" alt="cetustukey.png" />
+</span></p></div>
+</div>
+</div>
+<div class="sect1">
+<h2 id="_swift_application">6. Swift Application</h2>
+<div class="sectionbody">
+<div class="paragraph"><p>The Swift application included in this package computes the value of pi using montecarlo method. An MPI based C code computes the value of pi. This code is invoked multiple times in parallel. Each invocation writes the value it computed in an output file. A next application, implemented as a shell script that computes the average of the values found in the collection of output files generated in previous runs. The Swift source code for the applications is as below:</p></div>
+<div class="listingblock">
+<div class="content"><!-- Generator: GNU source-highlight 3.1.8
+by Lorenzo Bettini
+http://www.lorenzobettini.it
+http://www.gnu.org/software/src-highlite -->
+<pre><tt><span style="color: #008080">type</span> file<span style="color: #990000">;</span>
+<span style="color: #008080">type</span> exe<span style="color: #990000">;</span>
+
+<span style="font-weight: bold"><span style="color: #000000">app</span></span> <span style="color: #990000">(</span><span style="color: #008080">file</span> _o<span style="color: #990000">)</span> <span style="font-weight: bold"><span style="color: #000000">compute_pi</span></span> <span style="color: #990000">(</span><span style="color: #008080">exe</span> _pi<span style="color: #990000">)</span>
+<span style="color: #FF0000">{</span>
+  runpi @<span style="color: #008080">_pi</span> stdout<span style="color: #990000">=</span>@_o<span style="color: #990000">;</span>
+<span style="color: #FF0000">}</span>
+
+<span style="font-weight: bold"><span style="color: #000000">app</span></span> <span style="color: #990000">(</span><span style="color: #008080">file</span> _o<span style="color: #990000">)</span> <span style="font-weight: bold"><span style="color: #000000">avg_pi</span></span> <span style="color: #990000">(</span><span style="color: #008080">exe</span> _avg<span style="color: #990000">,</span> file<span style="color: #990000">[]</span> _i<span style="color: #990000">)</span>
+<span style="color: #FF0000">{</span>
+  bash @_avg @<span style="color: #008080">_i</span> stdout<span style="color: #990000">=</span>@_o<span style="color: #990000">;</span>
+<span style="color: #FF0000">}</span>
+
+<span style="color: #008080">exe</span> avg<span style="color: #990000"><</span><span style="color: #FF0000">"avg"</span><span style="color: #990000">>;</span>
+<span style="color: #008080">exe</span> pi<span style="color: #990000"><</span><span style="color: #FF0000">"pi"</span><span style="color: #990000">>;</span>
+
+<span style="color: #008080">file</span> pival<span style="color: #990000"><</span><span style="color: #FF0000">"ans.txt"</span><span style="color: #990000">>;</span>
+<span style="color: #008080">file</span> out<span style="color: #990000">[]<</span>simple_mapper<span style="color: #990000">;</span> location<span style="color: #990000">=</span><span style="color: #FF0000">"outdir"</span><span style="color: #990000">,</span> prefix<span style="color: #990000">=</span><span style="color: #FF0000">"pi."</span><span style="color: #990000">,</span>suffix<span style="color: #990000">=</span><span style="color: #FF0000">".out"</span><span style="color: #990000">>;</span>
+foreach <span style="color: #008080">i</span> in <span style="color: #990000">[</span><span style="color: #993399">0</span><span style="color: #990000">:</span><span style="color: #993399">9</span><span style="color: #990000">]</span> <span style="color: #FF0000">{</span>
+    out<span style="color: #990000">[</span>i<span style="color: #990000">]</span> <span style="color: #990000">=</span> <span style="font-weight: bold"><span style="color: #000000">compute_pi</span></span><span style="color: #990000">(</span>pi<span style="color: #990000">);</span>
+<span style="color: #FF0000">}</span>
+
+pival<span style="color: #990000">=</span><span style="font-weight: bold"><span style="color: #000000">avg_pi</span></span><span style="color: #990000">(</span>avg<span style="color: #990000">,</span> out<span style="color: #990000">);</span>
+</tt></pre></div></div>
+</div>
+</div>
+<div class="sect1">
+<h2 id="_configuration">7. Configuration</h2>
+<div class="sectionbody">
+<div class="paragraph"><p>The run is controlled by a configuration file called ct.conf which is as follows:</p></div>
+<div class="listingblock">
+<div class="content"><!-- Generator: GNU source-highlight 3.1.8
+by Lorenzo Bettini
+http://www.lorenzobettini.it
+http://www.gnu.org/software/src-highlite -->
+<pre><tt>sites : <span style="color: #990000">[</span>cetus<span style="color: #990000">,</span> tukey<span style="color: #990000">]</span>
+site.cetus <span style="color: #990000">{</span>
+    execution <span style="color: #990000">{</span>
+        type: "coaster"
+        URL: "localhost"
+        jobManager: "local:cobalt"
+        options <span style="color: #990000">{</span>
+            maxNodesPerJob: <span style="color: #993399">32</span>
+            maxJobs: <span style="color: #993399">1</span>
+            tasksPerNode: <span style="color: #993399">1</span>
+            nodeGranularity: <span style="color: #993399">32</span>
+            maxJobTime = "00:60:00"
+        <span style="color: #990000">}</span>
+    <span style="color: #990000">}</span>
+    filesystem <span style="color: #990000">{</span>
+        type: "local"
+        URL: "localhost"
+    <span style="color: #990000">}</span>
+    staging : direct
+    workDirectory: "/home/"$<span style="color: #990000">{</span>env.USER<span style="color: #990000">}</span>"/swift.work"
+    maxParallelTasks: <span style="color: #993399">30</span>
+    initialParallelTasks: <span style="color: #993399">29</span>
+    app.runpi <span style="color: #990000">{</span>
+        executable: "/home/"$<span style="color: #990000">{</span>env.USER<span style="color: #990000">}</span>"/cetustukeytut/runpi"
+        maxWallTime: "00:04:00"
+    <span style="color: #990000">}</span>
+<span style="color: #990000">}</span>
+
+site.tukey <span style="color: #990000">{</span>
+    execution <span style="color: #990000">{</span>
+        type: "coaster-persistent"
+        URL: "http://localhost:52000"
+        jobManager: "local:cobalt"
+        options <span style="color: #990000">{</span>
+            maxNodesPerJob: <span style="color: #993399">8</span>
+            maxJobs: <span style="color: #993399">1</span>
+            tasksPerNode: <span style="color: #993399">2</span>
+            nodeGranularity: <span style="color: #993399">1</span>
+            maxJobTime = "00:60:00"
+        <span style="color: #990000">}</span>
+    <span style="color: #990000">}</span>
+    filesystem <span style="color: #990000">{</span>
+        type: "local"
+        URL: "localhost"
+    <span style="color: #990000">}</span>
+    staging: direct
+    workDirectory: "/home/"$<span style="color: #990000">{</span>env.USER<span style="color: #990000">}</span>"/swift.work"
+    maxParallelTasks: <span style="color: #993399">3</span>
+    initialParallelTasks: <span style="color: #993399">2</span>
+    app.bash <span style="color: #990000">{</span>
+        executable: "/bin/bash"
+        maxWallTime: "00:04:00"
+    <span style="color: #990000">}</span>
+<span style="color: #990000">}</span>
+
+executionRetries: <span style="color: #993399">0</span>
+keepSiteDir: <span style="font-weight: bold"><span style="color: #0000FF">true</span></span>
+providerStagingPinSwiftFiles: <span style="font-weight: bold"><span style="color: #0000FF">false</span></span>
+alwaysTransferWrapperLog: <span style="font-weight: bold"><span style="color: #0000FF">true</span></span>
+</tt></pre></div></div>
+</div>
+</div>
+<div class="sect1">
+<h2 id="_run_swift">8. Run Swift</h2>
+<div class="sectionbody">
+<div class="paragraph"><p>Run Swift on Cetus:</p></div>
+<div class="listingblock">
+<div class="content">
+<pre><code>cetus$ cd $HOME/cetustukeytut
+cetus$ ./runct</code></pre>
+</div></div>
+</div>
+</div>
+<div class="sect1">
+<h2 id="_results">9. Results</h2>
+<div class="sectionbody">
+<div class="paragraph"><p>On successful completion, the answer, an approximation of pi should be in the produced file <code>ans.txt</code>:</p></div>
+<div class="listingblock">
+<div class="content">
+<pre><code>cetus$ cat ans.txt</code></pre>
+</div></div>
+</div>
+</div>
+<div class="sect1">
+<h2 id="_upcoming_features">10. Upcoming Features</h2>
+<div class="sectionbody">
+<div class="olist arabic"><ol class="arabic">
+<li>
+<p>
+Extend to other systems.
+</p>
+</li>
+<li>
+<p>
+Show use of gridftp and/or Globus.org for file transfer.
+</p>
+</li>
+</ol></div>
+</div>
+</div>
+</div>
+<div id="footnotes"><hr /></div>
+<div id="footer">
+<div id="footer-text">
+Last updated 2015-04-30 22:23:26 UTC
+</div>
+</div>
+</body>
+</html>

Added: SwiftApps/cetustukey/ct.conf
===================================================================
--- SwiftApps/cetustukey/ct.conf	                        (rev 0)
+++ SwiftApps/cetustukey/ct.conf	2015-05-05 16:12:11 UTC (rev 8454)
@@ -0,0 +1,60 @@
+sites : [cetus, tukey]
+site.cetus {
+    execution {
+        type: "coaster"
+        URL: "localhost"
+        jobManager: "local:cobalt"
+        options {
+            maxNodesPerJob: 32
+            maxJobs: 1
+            tasksPerNode: 1
+            nodeGranularity: 32
+            maxJobTime = "00:60:00"
+        }
+    }
+    filesystem {
+        type: "local"
+        URL: "localhost"
+    }
+    staging : direct
+    workDirectory: "/home/"${env.USER}"/swift.work"
+    maxParallelTasks: 30
+    initialParallelTasks: 29
+    app.runpi {
+        executable: "/home/"${env.USER}"/cetustukeytut/runpi"
+        maxWallTime: "00:04:00"
+    }
+}
+
+site.tukey {
+    execution {
+        type: "coaster-persistent"
+        URL: "http://localhost:52000"
+        jobManager: "local:cobalt"
+        options {
+            maxNodesPerJob: 8
+            maxJobs: 1
+            tasksPerNode: 2
+            nodeGranularity: 1
+            maxJobTime = "00:60:00"
+        }
+    }
+    filesystem {
+        type: "local"
+        URL: "localhost"
+    }
+    staging: direct
+    workDirectory: "/home/"${env.USER}"/swift.work"
+    maxParallelTasks: 3
+    initialParallelTasks: 2
+    app.bash {
+        executable: "/bin/bash"
+        maxWallTime: "00:04:00"
+    }
+}
+
+executionRetries: 0
+keepSiteDir: true
+providerStagingPinSwiftFiles: false
+alwaysTransferWrapperLog: true
+

Added: SwiftApps/cetustukey/docbuild
===================================================================
--- SwiftApps/cetustukey/docbuild	                        (rev 0)
+++ SwiftApps/cetustukey/docbuild	2015-05-05 16:12:11 UTC (rev 8454)
@@ -0,0 +1,3 @@
+#!/bin/bash
+
+asciidoc -a toc -a numbered -a toclevels=2  -a max-width=750px  -a textwidth=80 -o cetustukeytut.html README.txt


Property changes on: SwiftApps/cetustukey/docbuild
___________________________________________________________________
Added: svn:executable
   + *

Added: SwiftApps/cetustukey/local.conf
===================================================================
--- SwiftApps/cetustukey/local.conf	                        (rev 0)
+++ SwiftApps/cetustukey/local.conf	2015-05-05 16:12:11 UTC (rev 8454)
@@ -0,0 +1,19 @@
+sites: [localhost]
+
+site.localhost {
+    execution {
+        type: "local"
+        URL : "localhost"
+    }
+    staging             : direct
+    workDirectory       : "/tmp/"${env.USER}"/swiftwork"
+    maxParallelTasks    : 20
+    initialParallelTasks: 20
+    app.ALL { executable: "*" }
+}
+
+lazyErrors: false
+executionRetries: 0
+keepSiteDir: true
+providerStagingPinSwiftFiles: false
+alwaysTransferWrapperLog: true

Added: SwiftApps/cetustukey/pi
===================================================================
(Binary files differ)


Property changes on: SwiftApps/cetustukey/pi
___________________________________________________________________
Added: svn:executable
   + *
Added: svn:mime-type
   + application/octet-stream

Added: SwiftApps/cetustukey/pi.c
===================================================================
--- SwiftApps/cetustukey/pi.c	                        (rev 0)
+++ SwiftApps/cetustukey/pi.c	2015-05-05 16:12:11 UTC (rev 8454)
@@ -0,0 +1,356 @@
+# include <stdio.h>
+# include <math.h>
+# include <time.h>
+
+# include "mpi.h"
+
+
+# define DEBUG             0
+# define CHUNKSIZE      1000
+# define RANDOM_SEED       0
+
+/* 
+  Message tags
+*/
+# define NEED_NUMBERS      1
+# define RANDOM_NUMBERS    2
+
+int main ( int argc, char *argv[] );
+void timestamp ( void );
+
+/******************************************************************************/
+
+int main ( int argc, char *argv[] )
+
+/******************************************************************************/
+/*
+  Purpose:
+
+    MAIN is the main program for MONTE_CARLO.
+
+  Discussion:
+
+    MONTE_CARLO uses Monte Carlo methods to estimate Pi.
+
+    Generate N random points in the unit square.  Count M, the number
+    of points that are in the quarter circle.  Then PI is approximately
+    equal to the ratio 4 * M / N.
+
+    It's important that each processor use DIFFERENT random numbers.
+    One way to ensure this is to have a single master processor
+    generate all the random numbers, and then divide them up.
+
+    (A second way, not explored here, is simply to ensure that each
+    processor uses a different seed, either chosen by a master processor,
+    or generated from the processor ID.)
+
+  Licensing:
+
+    This code is distributed under the GNU LGPL license. 
+
+  Modified:
+
+    26 February 2007
+
+  Author:
+
+    John Burkardt
+
+  Reference:
+
+    William Gropp, Ewing Lusk, Anthony Skjellum,
+    Using MPI: Portable Parallel Programming with the
+    Message-Passing Interface,
+    Second Edition,
+    MIT Press, 1999,
+    ISBN: 0262571323.
+*/
+{
+  double calculatedPi;
+  int done;
+  double error;
+  int i;
+  int ierr;
+  int in;
+  int max;
+  MPI_Status mesgStatus;
+  int my_id;
+  int numprocs;
+  int out;
+  int point_max = 1000000;
+  int randServer;
+  int randNums[CHUNKSIZE];
+  int ranks[1];
+  int request;
+  int temp;
+  double tolerance;
+  int totalin;
+  int totalout;
+  MPI_Group worker_group;
+  MPI_Comm workers;
+  MPI_Group world_group;
+  double wtime;
+  double x;
+  double y;
+/*
+  Initialize MPI.
+*/
+  ierr = MPI_Init ( &argc, &argv );
+/*
+  Get the number of processors.
+*/
+  ierr = MPI_Comm_size ( MPI_COMM_WORLD, &numprocs );
+/*
+  Get the rank of this processor.
+*/
+  ierr = MPI_Comm_rank ( MPI_COMM_WORLD, &my_id );
+
+  if ( my_id == 0 ) 
+  {
+    timestamp ( );
+    printf ( "\n" );
+    printf ( "MONTE_CARLO - Master process:\n" );
+    printf ( "  C version\n" );
+    printf ( "  An MPI example program.\n" );
+    printf ( "  Estimate pi by the Monte Carlo method, using MPI.\n" );
+    printf ( "\n" );
+    printf ( "  Compiled on %s at %s.\n", __DATE__, __TIME__ );
+    printf ( "\n" );
+    printf ( "  The number of processes is %d.\n", numprocs );
+    printf ( "\n" );
+    printf ( "  Points in the unit square will be tested\n" );
+    printf ( "  to see if they lie in the unit quarter circle.\n" );
+  }
+
+  if ( my_id == 0 )
+  {
+    wtime = MPI_Wtime ( );
+  }
+/*
+  Pretend that the tolerance TOLERANCE is supplied externally
+  to the master process, which must then broadcast it to all
+  other processes.
+*/
+  if ( my_id == 0 )
+  {
+    tolerance = 0.0001;
+
+    printf ( "\n" );
+    printf ( "  The method will continue to improve the estimate until:\n" );
+    printf ( "  PI is computed to within a tolerance = %f,\n", tolerance );
+    printf ( "  or the number of points examined reaches %d.\n", point_max );
+  }
+
+  ierr = MPI_Bcast ( &tolerance, 1, MPI_DOUBLE_PRECISION, 0,
+    MPI_COMM_WORLD );
+
+  printf ( "  Process %d is active.\n", my_id );
+/*
+  Start by getting the group corresponding to the world communicator.
+*/
+  ierr = MPI_Comm_group ( MPI_COMM_WORLD, &world_group );  
+/*
+  Put SERVER on the list of processes to exclude, and create the new
+  worker group.
+*/
+  randServer = numprocs-1;
+  ranks[0] = randServer;
+  ierr = MPI_Group_excl ( world_group, 1, ranks, &worker_group );
+/* 
+  Use the worker group to create the new worker communicator.
+*/
+  ierr = MPI_Comm_create ( MPI_COMM_WORLD, worker_group, &workers );
+/*
+  Since we only needed the worker group to create the worker
+  communicator, we can free the worker group now.
+*/
+  ierr = MPI_Group_free ( &worker_group );
+/*
+  Here is where the computation is carried out.
+*/
+
+/* 
+  I am the rand server.
+*/
+  if ( my_id == randServer ) 
+  {
+# if RANDOM_SEED
+    struct timeval time;
+    gettimeofday( &time, 0 );
+/* 
+  Initialize the random number generator 
+*/
+    srandom ( (int)(time.tv_usec*1000000+time.tv_sec) );
+# endif
+    do
+    {
+      ierr = MPI_Recv ( &request, 1, MPI_INT, MPI_ANY_SOURCE, NEED_NUMBERS,
+        MPI_COMM_WORLD, &mesgStatus );
+
+      if ( request ) 
+      {
+        for ( i = 0; i < CHUNKSIZE; i++) 
+        {
+          randNums[i] = random();
+        }
+        ierr = MPI_Send ( randNums, CHUNKSIZE, MPI_INT, 
+          mesgStatus.MPI_SOURCE, RANDOM_NUMBERS, MPI_COMM_WORLD );
+      }
+    } while ( 0 < request );
+
+  }
+/* 
+  I am a worker process.
+*/
+  else  
+  {
+    request = 1;
+    done = in = out = 0;
+    max = 2147483647;
+
+    ierr = MPI_Send ( &request, 1, MPI_INT, randServer, NEED_NUMBERS, 
+      MPI_COMM_WORLD );
+/* 
+  Request a string of random numbers.
+*/
+    while (!done) 
+    {
+      request = 1;
+      ierr = MPI_Recv ( randNums, CHUNKSIZE, MPI_INT, randServer,
+        RANDOM_NUMBERS, MPI_COMM_WORLD, &mesgStatus );
+
+      for ( i = 0; i < CHUNKSIZE; ) 
+      {
+        x = ( ( float ) randNums[i++] ) / max;
+        y = ( ( float ) randNums[i++] ) / max;
+
+        if ( x * x + y * y < 1.0 ) 
+        {
+          in++;
+        } 
+        else 
+        {
+          out++;
+        }
+
+      }
+
+      temp = in;
+      ierr = MPI_Reduce ( &temp, &totalin, 1, MPI_INT, MPI_SUM, 0, workers );
+/* 
+  Count total of ins.
+*/ 
+      temp = out;
+      ierr = MPI_Reduce ( &temp, &totalout, 1, MPI_INT, MPI_SUM, 0, workers );
+/* 
+  Count total of outs.
+*/
+      if ( my_id == 0 ) 
+      {
+        calculatedPi = ( 4.0 * totalin ) / ( totalin + totalout );
+        error = fabs ( calculatedPi - 3.141592653589793238462643 );
+        done = ( error < tolerance ) || point_max <= ( totalin + totalout );
+        printf( "pi = %23.20lf\n", calculatedPi );
+
+        if ( done )
+        {
+          request = 0;
+        }
+        else
+        {
+          request = 1;
+        }
+
+        ierr = MPI_Send ( &request, 1, MPI_INT, randServer, NEED_NUMBERS,
+          MPI_COMM_WORLD );
+
+        ierr = MPI_Bcast ( &done, 1, MPI_INT, 0, workers );
+      } 
+      else
+      {
+        ierr = MPI_Bcast ( &done, 1, MPI_INT, 0, workers );
+
+        if ( !done ) 
+        {
+          request = 1;
+          ierr = MPI_Send ( &request, 1, MPI_INT, randServer, NEED_NUMBERS,
+            MPI_COMM_WORLD );
+        }
+      }
+    }
+  }
+
+  if ( my_id == 0 ) 
+  {
+    printf( "\npoints: %d\nin: %d, out: %d\n", totalin + totalout, totalin,
+      totalout );
+
+    wtime = MPI_Wtime ( ) - wtime;
+    printf ( "\n" );
+    printf ( "  Elapsed wallclock time = %g seconds.\n", wtime );
+  }
+/*
+  Terminate MPI.
+*/
+  ierr = MPI_Finalize();
+/*
+  Terminate.
+*/
+  if ( my_id == 0 )
+  {
+    printf ( "\n" );
+    printf ( "MONTE_CARLO - Master process:\n" );
+    printf ( "  Normal end of execution.\n" );
+    printf ( "\n" );
+    timestamp ( );
+  }
+  return 0;
+}
+/******************************************************************************/
+
+void timestamp ( void )
+
+/******************************************************************************/
+/*
+  Purpose:
+
+    TIMESTAMP prints the current YMDHMS date as a time stamp.
+
+  Example:
+
+    31 May 2001 09:45:54 AM
+
+  Licensing:
+
+    This code is distributed under the GNU LGPL license. 
+
+  Modified:
+
+    24 September 2003
+
+  Author:
+
+    John Burkardt
+
+  Parameters:
+
+    None
+*/
+{
+# define TIME_SIZE 40
+
+  static char time_buffer[TIME_SIZE];
+  const struct tm *tm;
+  time_t now;
+
+  now = time ( NULL );
+  tm = localtime ( &now );
+
+  strftime ( time_buffer, TIME_SIZE, "%d %B %Y %I:%M:%S %p", tm );
+
+  printf ( "%s\n", time_buffer );
+
+  return;
+# undef TIME_SIZE
+}
+

Added: SwiftApps/cetustukey/pi.swift
===================================================================
--- SwiftApps/cetustukey/pi.swift	                        (rev 0)
+++ SwiftApps/cetustukey/pi.swift	2015-05-05 16:12:11 UTC (rev 8454)
@@ -0,0 +1,24 @@
+type file;
+type exe;
+
+app (file _o) compute_pi (exe _pi)
+{
+  runpi @_pi stdout=@_o;
+}
+
+app (file _o) avg_pi (exe _avg, file[] _i)
+{
+  bash @_avg @_i stdout=@_o; 
+}
+
+exe avg<"avg">;
+exe pi<"pi">;
+
+file pival<"ans.txt">;
+file out[]<simple_mapper; location="outdir", prefix="pi.",suffix=".out">;
+foreach i in [0:9] {
+    out[i] = compute_pi(pi);
+}
+
+pival=avg_pi(avg, out);
+

Added: SwiftApps/cetustukey/runct
===================================================================
--- SwiftApps/cetustukey/runct	                        (rev 0)
+++ SwiftApps/cetustukey/runct	2015-05-05 16:12:11 UTC (rev 8454)
@@ -0,0 +1,4 @@
+#! /bin/sh
+
+/home/ketan/swift-k/dist/swift-svn/bin/swift -config ct.conf -reducedLogging -minimalLogging pi.swift
+


Property changes on: SwiftApps/cetustukey/runct
___________________________________________________________________
Added: svn:executable
   + *

Added: SwiftApps/cetustukey/runlocal
===================================================================
--- SwiftApps/cetustukey/runlocal	                        (rev 0)
+++ SwiftApps/cetustukey/runlocal	2015-05-05 16:12:11 UTC (rev 8454)
@@ -0,0 +1,3 @@
+#!/bin/bash
+
+/homes/ketan/swift-k/dist/swift-svn/bin/swift -config local.conf pi.swift


Property changes on: SwiftApps/cetustukey/runlocal
___________________________________________________________________
Added: svn:executable
   + *

Added: SwiftApps/cetustukey/runpi
===================================================================
--- SwiftApps/cetustukey/runpi	                        (rev 0)
+++ SwiftApps/cetustukey/runpi	2015-05-05 16:12:11 UTC (rev 8454)
@@ -0,0 +1,3 @@
+#!/bin/bash
+
+runjob --block $COBALT_PARTNAME : "$@"


Property changes on: SwiftApps/cetustukey/runpi
___________________________________________________________________
Added: svn:executable
   + *

Modified: SwiftApps/subjobs/bg.sh
===================================================================
--- SwiftApps/subjobs/bg.sh	2015-05-04 18:53:42 UTC (rev 8453)
+++ SwiftApps/subjobs/bg.sh	2015-05-05 16:12:11 UTC (rev 8454)
@@ -86,14 +86,14 @@
         CORNER=${SWIFT_SUBBLOCK_ARRAY[$SWIFT_JOB_SLOT]}
         
         #Some logging
-        processedargs=$(echo "$@" | cut -d" " -f 1)
+        #processedargs=$(echo "$@" | cut -d" " -f 1)
         echo "$0": running BLOCK="$COBALT_PARTNAME" SLOT="$SWIFT_JOB_SLOT"
         echo "$0": running cmd: "$0" args: "$@"
-        echo "$0": runjob --block "$COBALT_PARTNAME" --corner "$CORNER" --shape "$SHAPE" -p 1 : "$processedargs" 
+        echo "$0": runjob --block "$COBALT_PARTNAME" --corner "$CORNER" --shape "$SHAPE" -p 1 : "$@" 
         
         #without timeout
         #runjob --strace none --block "$COBALT_PARTNAME" --corner "$CORNER" --shape "$SHAPE" -p 16 --np "$((16*$SUBBLOCK_SIZE))" : "$@"
-        runjob --block "$COBALT_PARTNAME" --corner "$CORNER" --shape "$SHAPE" -p 1 : "$processedargs"
+        runjob --block "$COBALT_PARTNAME" --corner "$CORNER" --shape "$SHAPE" -p 1 : "$@"
         
         echo "Runjob finished."
     fi




More information about the Swift-commit mailing list