Finish presentation.
authorMatthijs Kooijman <kooijman@eris.recoresystems.com>
Wed, 2 Jul 2008 10:44:02 +0000 (12:44 +0200)
committerMatthijs Kooijman <kooijman@eris.recoresystems.com>
Wed, 2 Jul 2008 10:44:02 +0000 (12:44 +0200)
Presentations/InternalProgress.tex

index 267f1be9b76642afc7cb4c353acab92d32645f2f..6bbc60186af8d359f1a7f798bd276f5c17a5d5e5 100755 (executable)
     \pgfuseimage{Workflow}
   \end{frame}
 
-\section{Tasks}
-
-  \subsection{Original tasks}
-    \begin{frame}{Original tasks}
-      \begin{itemize}
-        \item Select LLVM transformations
-        \item Improve and add transformations
-        \item Provide debugging information
-      \end{itemize}
-    \end{frame}
-
-  \subsection{Extra tasks}
-    \begin{frame}{Extra tasks}
-      \begin{itemize}
-        \item What is MontiumC?
-        \item What is Montium IR?
-        \item Reconfigurable binaries
-      \end{itemize}
-    \end{frame}
-
+\section{Past work}
     \begin{frame}{What is MontiumC?}
       \note{Two angles: What do we want, and what do we support.}
       \begin{itemize}
       \item Challenges:
         \begin{itemize}
           \item Clang is nontransparent
-          \note[item]{Clang --- A lot of special cases}
+          \note[item]{Clang --- A lot of special cases. Clang goal: Produce
+          valid LLVM IR, which can change unexpectedly}
           \item C is complex
           \note[item]{Complex C --- A lot of corner cases}
           \item C is limited
@@ -159,7 +141,7 @@ P0M1 int output[10];
 
 void run(void) {
   for (int i=0; i<10; ++i)
-    output[i] = input[i] * 2;
+    output[i] = mul(input[i], 2);
 }
           \end{Verbatim}
         \end{column}
@@ -167,105 +149,218 @@ void run(void) {
     \end{frame}
     \note{} % Empty filler note page
 
-    \begin{frame}{What is Montium IR?}
+    \begin{frame}{Using LLVM transformations}
       \begin{itemize}
-        \item Status: Initial version
         \item Challenges:
         \begin{itemize}
-          \item Backend is a fast moving target
-          \item Corner cases
-          \note[item]{Corner case --- global constants}
-          \item Hardware dependencies
-          \note[item]{Hardware --- Limited number of conditionals possible}
+          \item LLVM Passes assume a lot
+          \note[item]{Assumptions --- Immediates are free, reordering of
+          instructions is possible, shifts are cheaper than mults}
+          \item Montium has specific constraints
+          \note[item]{Constraint --- Implicit cycle boundaries and ordering}
+          \item Montium needs different policies
+          \note[item]{Policies --- Montium has different optimality criteria (or
+          sometimes feasibility criteria) than regular hardware.}
         \end{itemize}
       \end{itemize}
     \end{frame}
 
-    \begin{frame}{Selecting LLVM transformations}
+    \begin{frame}{Using LLVM transformations}
       \begin{itemize}
-        \item Status: Done
-        \item Challenges:
+        \item Achievements:
         \begin{itemize}
-          \item LLVM Passes assume a lot
-          \note[item]{Assumptions --- Immediates are not free}
-          \item Montium has specific constraints
-          \note[item]{Constraint --- Implicit cycle boundaries and ordering}
+          \item Allow nested functions
+          \begin{itemize}
+            \item Inlining
+          \end{itemize}
+          \item Allow local variables
+          \begin{itemize}
+            \item Stack slots turned into (virtual) registers.
+          \end{itemize}
+          \item Allow use of structs
+          \begin{itemize}
+            \item Promotion to multiple scalar values
+          \end{itemize}
+          \item Allow more different loops
+          \begin{itemize}
+            \item Canonicalization of loops
+            \item Still requires backend support
+          \end{itemize}
+          \item Allow constant function parameters
+          \begin{itemize}
+            \item Constant propagation
+          \end{itemize}
         \end{itemize}
       \end{itemize}
+      \note[item]{Without transformations, MontiumC hardly exists.
+      Transformations have the goal of making MontiumC bigger.}
     \end{frame}
 
-    \begin{frame}{Improving / adding transformations}
+    \begin{frame}{Creating new transformations}
       \begin{itemize}
-        \item Status: Ongoing
+        \item Existing LLVM transformations are not sufficient for our demands
         \item Challenges:
         \begin{itemize}
           \item Staying generic
-          \note[item]{Generic --- LLVM maintained passes are a lot easier}
-          \item New LLVM features
+          \note[item]{Generic --- LLVM maintained passes are a lot less work on
+          the long term, but require more initial effort}
+          \item New LLVM features needed
           \note[item]{Features --- Multiple return values, inlining and
           annotation attributes}
         \end{itemize}
       \end{itemize}
     \end{frame}
 
-    \begin{frame}{Debugging information}
+    \begin{frame}{Creating new transformations}
       \begin{itemize}
-        \item Status: Not started
-        \item Challenges:
+        \item Achievements:
         \begin{itemize}
-          \item Not much LLVM support yet
-          \note[item]{LLVM support --- New in clang/backend, no support in
-          transformations yet.}
-          \item Transformations
-          \note[item]{Transformations --- Global arguments, argument addition,
-          removal, etc.}
+          \item Allow global variables
+          \begin{itemize}
+            \item Turned into local variables
+          \end{itemize}
+          \item Simpler backend
+          \begin{itemize}
+            \item Perform canonicalizations
+            \note[item]{Canonical --- Maximal SSA form, removal of global variables}
+          \end{itemize}
+          \item Reconfigurability
+          \begin{itemize}
+            \item Preserving reconfigurable variables
+            \item Mainly needs backend support
+          \end{itemize}
+          \item Allow different constant function parameters
+          \begin{itemize}
+            \item Function duplication
+            \item Not in use yet
+            \note[item]{Function duplication challenge --- When to duplicate?}
+          \end{itemize}
         \end{itemize}
       \end{itemize}
     \end{frame}
 
-    \begin{frame}{Reconfigurable binaries}
+    \begin{frame}[containsverbatim]{Constant propagation}
+      \begin{columns}
+        \begin{column}{0.5\textwidth}
+          Before
+          \begin{Verbatim}[fontsize=\tiny]
+
+int mul(int a, int b) {
+  return a * b;
+}
+
+void run(void) {
+  ...
+  mul(x, 2);
+  ...
+  mul(y, 2);
+  ...
+}
+          \end{Verbatim}
+        \end{column}
+        \begin{column}{0.5\textwidth}
+          After
+          \begin{Verbatim}[fontsize=\tiny]
+
+int mul(int a) {
+  return a * 2;
+}
+
+void run(void) {
+  ...
+  mul(x);
+  ...
+  mul(y);
+  ...
+}
+          \end{Verbatim}
+        \end{column}
+      \end{columns}
+      \note{Mainly useful when using library code}
+    \end{frame}
+
+    \begin{frame}[containsverbatim]{Function duplication}
+      \begin{columns}
+        \begin{column}{0.5\textwidth}
+          Before
+          \begin{Verbatim}[fontsize=\tiny]
+
+int mul(int a, int b) {
+  return a * b;
+}
+
+void run(void) {
+  ...
+  mul(x, 2);
+  ...
+  mul(y, 2);
+  ...
+  mul(z, 4);
+  ...
+  mul(w, 4);
+  ...
+}
+          \end{Verbatim}
+        \end{column}
+        \begin{column}{0.5\textwidth}
+          After
+          \begin{Verbatim}[fontsize=\tiny]
+
+int mul2(int a) {
+  return a * 2;
+}
+
+int mul4(int a) {
+  return a * 4;
+}
+
+void run(void) {
+  ...
+  mul2(x);
+  ...
+  mul2(y);
+  ...
+  mul4(z);
+  ...
+  mul4(w);
+  ...
+}
+          \end{Verbatim}
+        \end{column}
+      \end{columns}
+      \note{Mainly useful when values must really be constant (masks, loop
+      counters)}
+    \end{frame}
+
+\section{Future work}
+    \begin{frame}{Open issues}
       \begin{itemize}
-        \item Status: Recently started
-        \item Challenges:
+        \item Debug information
         \begin{itemize}
-          \item Tracking variables
-          \note[item]{Tracking --- Through all steps of the process}
-          \item Loss of optimizations
-          \note[item]{Optimizations --- Hard to encode constraints}
-          \item Mostly a backend problem
+          \item Only time for initial work
+        \end{itemize}
+        \item Reconfigurability
+        \begin{itemize}
+          \item Needs backend support
+        \end{itemize}
+        \item Proper inlining
+        \item Memory access
+        \begin{itemize}
+          \item Needs backend support
+        \end{itemize}
+        \item Remove next\_cycle
+        \begin{itemize}
+          \item Backend only
         \end{itemize}
       \end{itemize}
     \end{frame}
 
-\section{Work process}
-  \begin{frame}{Working at Recore}
-    \begin{itemize}
-      \item Smart people
-      \item Fast communication
-      \note[item]{Communication --- Mixed teams, easy to "listen in".}
-      \item Constructive brainstorming
-      \note[item]{Brainstorming --- Evaluating different ideas and approaches.}
-    \end{itemize}
-  \end{frame}
-
-  \begin{frame}{Working with LLVM}
-    \begin{itemize}
-      \item Large community
-      \note[item]{Community --- Companies involved, a lot of full time
-      developers.}
-      \item Great support
-      \note[item]{Support --- mailing list, bug reports solved within 1/2 days.}
-      \item Slightly conflicting goals
-      \note[item]{Goals --- LLVM aims mainly at "regular" architectures.}
-    \end{itemize}
-  \end{frame}
-
 \section{Conclusions}
   \begin{frame}{Conclusions}
     \begin{itemize}
       \item LLVM is very suitable
       \item Defining the problem is harder than solving it
-      \item Three months is short!
+      \item Three months is short, visible progress is slow
     \end{itemize}
   \end{frame}