From b39eefac6abf6e167dcc8562c4bb1f55d1d39990 Mon Sep 17 00:00:00 2001 From: Francis Russell Date: Tue, 28 Aug 2012 05:56:57 +0100 Subject: [PATCH 1/1] Add initial version of slides. --- .gitignore | 11 +++ Makefile | 52 ++++++++++++++ images/fftbox.png | Bin 0 -> 33725 bytes presentation.tex | 168 ++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 231 insertions(+) create mode 100644 .gitignore create mode 100644 Makefile create mode 100644 images/fftbox.png create mode 100644 presentation.tex diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..8d45f9b --- /dev/null +++ b/.gitignore @@ -0,0 +1,11 @@ +#Vim swap +.*.swp + +#Generated +/*.aux +/*.log +/*.nav +/*.out +/*.pdf +/*.snm +/*.toc diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..c73bd27 --- /dev/null +++ b/Makefile @@ -0,0 +1,52 @@ +IMAGE_FILES=$(wildcard images/*) + +SVG_FOLDER=images-svg +SVG_SOURCES=$(wildcard $(SVG_FOLDER)/*.svg) +SVG_OUTPUTS=${patsubst %.svg,%.pdf,$(SVG_SOURCES)} + +CODE_FOLDER=code +CODE_F90_TEX_FILES=${patsubst %.F90,%.tex,$(wildcard $(CODE_FOLDER)/*.F90)} +CODE_TEX_FILES=$(CODE_F90_TEX_FILES) + + +PDFLATEX_OUTPUT_LOG=pdflatex_output.log + +all: presentation.pdf + +display: presentation.pdf + xpdf presentation.pdf + +display-4up: presentation-4up.pdf + xpdf presentation-4up.pdf + +4up: presentation-4up.pdf + +presentation-4up.pdf: presentation.pdf + pdfnup --nup 2x2 --a4paper --scale 0.95 --frame true presentation.pdf -o presentation-4up.pdf + +presentation.pdf: $(IMAGE_FILES) $(SVG_OUTPUTS) $(CODE_TEX_FILES) $(wildcard *.tex *.sty) + pdflatex -draftmode presentation &&\ + while(pdflatex presentation | tee $(PDFLATEX_OUTPUT_LOG) && grep "Rerun to get cross-references right" $(PDFLATEX_OUTPUT_LOG)); do true; done &&\ + rm -f $(PDFLATEX_OUTPUT_LOG) + +clean: + rm -f *.aux *.log *.out *.pdf *.bbl *.blg *.toc *.lot *.lof *.nav *.snm \ + $(SVG_FOLDER)/*.pdf \ + $(BASIS_FUNCTIONS_FOLDER)/*.pdf \ + $(BASIS_FUNCTIONS_BUILD_STAMP) \ + $(CODE_TEX_FILES) \ + pygments.sty + +upload: presentation.pdf + rsync -C --progress presentation.pdf shell3.doc.ic.ac.uk:~/public_html/psl_onetep_presentation.pdf + +%.pdf: %.svg + inkscape -D -A $@ $< + +pygments.sty: + pygmentize -S bw -f latex > $@ + +%.tex: %.F90 + pygmentize -f latex -l fortran -o $@ $< + +.PHONY: all display clean upload 4up display-4up diff --git a/images/fftbox.png b/images/fftbox.png new file mode 100644 index 0000000000000000000000000000000000000000..5e4492ac3bcadca1056a76d58019c7d9e27eb038 GIT binary patch literal 33725 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 literal 0 HcmV?d00001 diff --git a/presentation.tex b/presentation.tex new file mode 100644 index 0000000..49a88b8 --- /dev/null +++ b/presentation.tex @@ -0,0 +1,168 @@ +% vim:tw=80 + +\documentclass{beamer} +\usetheme{Madrid} +\usepackage{graphicx} +\usepackage{verbatim} +\usepackage{ucs} +\usepackage{alltt} +\usepackage[utf8x]{inputenc} + +%\input{pygments.sty} + +\title[ONETEP Masterclass]{ONETEP Masterclass Presentation} +\subtitle{Domain Specific Languages for Quantum Chemistry} + +\author[F. Russell]{Francis Russell \\ Joint work with Chris-Kriton Skylaris \& Karl Wilkinson} +\date{28/08/2012} +\institute[ICL \& Soton]{Imperial College London \& Southampton University} + +\begin{document} + +\frame{\titlepage} + +\frame{ + +\frametitle{DSLs for Computational Science} + +\itemize{ + +\item A formal, machine-interpretable notation for specifying a problem +using a domain-oriented syntax. + +\item Allow scientists to concentrate on the problems they're solving rather +than the implementation. + +\item Reduce time and effort taken to go from decision to compute some value to +having efficient code that implements it. + +\item Allow computer scientists to work on optimised implementations without +having to understand the subtleties mathematics. + +\item Target code to multiple platforms/architectures/instruction sets via +changes to the code generator rather than the high-level description. + +} + +} + +\frame[containsverbatim] +{ +\frametitle{UFL: A Domain Specific Language for Finite Element Variational Forms} + +\begin{itemize} + +\item The Unified Form Language (UFL) is a DSL for specifying finite element +variational forms developed by the FEniCS project. + +\item Mathematically, we might write the finite element variational form for the +Laplacian as follows: + +\begin{equation*} +a(u,v) = \int_\Omega \nabla u(x) \cdot \nabla v(x)\,dx +\end{equation*} + +\item In UFL (specifying physical discretisation) we would write: + +\begin{verbatim} +element = FiniteElement("Lagrange", triangle, 2) + +u = TrialFunction(V) +v = TestFunction(V) +a = dot(grad(u), grad(v))*dx +\end{verbatim} +\end{itemize} + +} + +\frame{ + +\frametitle{Previous Work} + +\begin{itemize} + +\item I looked at domain specific languages for specifying aspects of finite +element problems. + +\item Developed a compiler that performed symbolic analysis of finite element +integrals and searched for exploitable redundancies. + +\item For many integrals, the resulting code had a reduced operation count over +alternative optimised implementations. + +\item The generated code couldn't possibly have been correctly written or +maintained by hand. + +\end{itemize} + +} + +\frame[containsverbatim]{ + +\frametitle{Current Work} + +What can domain specific languages do for ONETEP? + +\begin{itemize} + +\item For new quantities we want to evaluate, we can generate ONETEP +implementations directly from an expression in a DSL. +\begin{verbatim} +Array[FunctionIndex, FunctionIndex] kinet +FunctionSet bra, ket +FunctionIndex alpha, beta + +kinet[alpha, beta] = inner(bra[alpha], + laplacian(ket[beta])*-0.5) +\end{verbatim} + +\item Use the DSL compiler as a means to exploring optimisations that can be +performed in the ONETEP code. + +\end{itemize} + +Code involving conversions from real space and reciprocal space look like ideal +candidates for exploring these optimisations. + +} + +\frame{ + +\frametitle{Sparsity in the FFT-box} + +\resizebox{\linewidth}{!}{\includegraphics{images/fftbox}} + +} + +\frame{ + +\frametitle{Reducing the cost of reciprocal space transformations} + +Looking at FFTs: + +\begin{itemize} + +\item There are may cases where FFTs are padded with zeros. + +\item In other cases, only a restricted subset of the result data is used. + +\item Is it possible to exploit this to reduce to cost? + +\end{itemize} + +Alternatively, we can look at intermediate approach between FFTs and finite +difference: + +\begin{itemize} + +\item Perhaps finite difference can produce an acceptible result for some +quantities. + +\item Unclear what an intermediate approach might look like. + +\end{itemize} + + +} + +\end{document} -- 2.47.3