Building a 3rd Generation Weather-Model System Test Suite. Paul Madden Tom Henderson.

Similar documents
PatternFinder is a tool that finds non-overlapping or overlapping patterns in any input sequence.

Software Concepts. It is a translator that converts high level language to machine level language.

Our new HPC-Cluster An overview

EE 422C HW 6 Multithreaded Programming

AASPI Software Structure

Shared memory programming model OpenMP TMA4280 Introduction to Supercomputing

Meteorology 5344, Fall 2017 Computational Fluid Dynamics Dr. M. Xue. Computer Problem #l: Optimization Exercises

Motivation. Threads. Multithreaded Server Architecture. Thread of execution. Chapter 4

Implementation of Parallelization

30 Nov Dec Advanced School in High Performance and GRID Computing Concepts and Applications, ICTP, Trieste, Italy

XSEDE New User Tutorial

2012 LLVM Euro - Michael Spencer. lld. Friday, April 13, The LLVM Linker

OmniRPC: a Grid RPC facility for Cluster and Global Computing in OpenMP

OPERATING SYSTEMS. COMS W1001 Introduction to Information Science. Boyi Xie

Chapter 4: Threads. Chapter 4: Threads. Overview Multicore Programming Multithreading Models Thread Libraries Implicit Threading Threading Issues

Operating Systems: Principles and Practice. Mark Zbikowski Gary Kimura (kudos to Tom Anderson)

CME 213 S PRING Eric Darve

Ade Miller Senior Development Manager Microsoft patterns & practices

Parallel Tools Platform for Judge

HPC on Windows. Visual Studio 2010 and ISV Software

Programming in C. main. Level 2. Level 2 Level 2. Level 3 Level 3

KGEN: Fortran Kernel Generator. National Center for Atmospheric Research (NCAR) Youngsung Kim, John Dennis, Raghu R. Kumar, and Amogh Simha

Introduction to Java

Intel Manycore Testing Lab (MTL) - Linux Getting Started Guide

User Manual. Admin Report Kit for IIS 7 (ARKIIS)

CUDA GPGPU Workshop 2012

Domain Decomposition: Computational Fluid Dynamics

Grand Central Dispatch

Orbital Integrator System Manual

What is Software Architecture

Effective Use of CCV Resources

Operating Systems Overview. Chapter 2

Running the FIM and NIM Weather Models on GPUs

Marco Danelutto. May 2011, Pisa

XSEDE New User Tutorial

Java Programming. Manuel Oriol, March 22nd, 2007

Tech Computer Center Documentation

Chapter 4: Multi-Threaded Programming

The MPI API s baseline requirements

XSEDE New User Tutorial

What is an Operating System? A Whirlwind Tour of Operating Systems. How did OS evolve? How did OS evolve?

Domain Decomposition: Computational Fluid Dynamics

Domain Decomposition: Computational Fluid Dynamics

COMP 605: Introduction to Parallel Computing Quiz 4: Module 4 Quiz: Comparing CUDA and MPI Matrix-Matrix Multiplication

Microsoft Windows PowerShell v2 For Administrators

Computing with the Moore Cluster

Introduction to Parallel Programming. Martin Čuma Center for High Performance Computing University of Utah

Intel Thread Building Blocks

Guillimin HPC Users Meeting March 17, 2016

ELEC 377 Operating Systems. Week 1 Class 2

CS355 Hw 4. Interface. Due by the end of day Tuesday, March 20.

Chapter 4: Multithreaded Programming

The MPI API s baseline requirements

MPI and OpenMP (Lecture 25, cs262a) Ion Stoica, UC Berkeley November 19, 2016

OPERATING SYSTEM. PREPARED BY : DHAVAL R. PATEL Page 1. Q.1 Explain Memory

Introduction to MPI. EAS 520 High Performance Scientific Computing. University of Massachusetts Dartmouth. Spring 2014

OPERATING SYSTEM PROJECT: SOS

Tutorial on MPI: part I

HSA Foundation! Advanced Topics on Heterogeneous System Architectures. Politecnico di Milano! Seminar Room (Bld 20)! 15 December, 2017!

Elementary Parallel Programming with Examples. Reinhold Bader (LRZ) Georg Hager (RRZE)

Techno Expert Solutions An institute for specialized studies! Introduction to Advance QTP course Content

Software Architecture

Computer System Overview

Making Dynamic Instrumentation Great Again

Performance Tools for Technical Computing

Introduction to Parallel Programming. Martin Čuma Center for High Performance Computing University of Utah

A Small Interpreted Language

HPC Tools on Windows. Christian Terboven Center for Computing and Communication RWTH Aachen University.

Threads SPL/2010 SPL/20 1

Introduction to Real-Time Operating Systems

FROM SERIAL FORTRAN TO MPI PARALLEL FORTRAN AT THE IAS: SOME ILLUSTRATIVE EXAMPLES

Intel Thread Building Blocks

ncsa eclipse internal training

HPC Middle East. KFUPM HPC Workshop April Mohamed Mekias HPC Solutions Consultant. Agenda

Java EE 7: Back-End Server Application Development

A Scalable and Reliable Message Transport Service for the ATLAS Trigger and Data Acquisition System

Optimize an Existing Program by Introducing Parallelism

Introduction to R programming a SciLife Lab course

DDT Debugging Techniques

System Design. Design: HOW to implement a system

EE/CSCI 451 Introduction to Parallel and Distributed Computation. Discussion #4 2/3/2017 University of Southern California

MIGRATING TO THE SHARED COMPUTING CLUSTER (SCC) SCV Staff Boston University Scientific Computing and Visualization

CSE 544: Principles of Database Systems

Operating System. Operating System Overview. Structure of a Computer System. Structure of a Computer System. Structure of a Computer System

ET International HPC Runtime Software. ET International Rishi Khan SC 11. Copyright 2011 ET International, Inc.

Advanced Parallel Programming. Is there life beyond MPI?

GFS-python: A Simplified GFS Implementation in Python

Intel Thread Building Blocks, Part II

Introduction to Programming Microsoft.NET Applications with Visual Studio 2008 (C#)

Supercomputing in Plain English Exercise #6: MPI Point to Point

Bright Cluster Manager Advanced HPC cluster management made easy. Martijn de Vries CTO Bright Computing

Improving the Productivity of Scalable Application Development with TotalView May 18th, 2010

Executive Summary. It is important for a Java Programmer to understand the power and limitations of concurrent programming in Java using threads.

A Study of High Performance Computing and the Cray SV1 Supercomputer. Michael Sullivan TJHSST Class of 2004

Why study Programming Language Concepts? Chapter One. Language Evaluation Criteria. Programming Domains. Readability Writability Reliability Cost

The Google File System

Welcome. HRSK Practical on Debugging, Zellescher Weg 12 Willers-Bau A106 Tel

Chapter 4: Threads. Chapter 4: Threads

Programming with MPI

Xeon Phi Native Mode - Sharpen Exercise

Transcription:

Building a 3rd Generation Weather-Model System Test Suite Paul Madden Tom Henderson paul.a.madden@noaa.gov

Definitions: Test Suite A collection of tests......that ensures against regression...and gives a definitive pass/fail answer...and automation...and provides a framework.

Definitions: System Test Suite Unit tests (e.g. xunit) small chunks System tests end-to-end Compilers, MPI libraries, batch systems, task decomposition Evaluation un-vs-baseline un-vs-un

Definitions: Test-Suite Generations Gen 0: No tests. Manual tests. TLA. Gen 1: Shell scripts Provide some framework and automation Grow by accretion/duplication, comprehensible only by a few experts Gen 2: Higher-level languages Code re-use, modularity via OO design Imperative style

Goals For the code under test... Correctness un-vs-baseline (ability to generate & use baseline) un-vs-un Breadth Builds with different compilers, MPI libraries Suite to provide Platform Interface e.g how to interact with batch system

Goals For the test-suite users... Easy to configure and run Terse & verbose information in balance Test-suite run time & coverage in balance Standard and Long suites Use threads for concurrency! Fail early

Goals For the test-suite developers... Modularity for model and platform Model Interface: how to build, how a run signals success, which output files to compare, etc. Code re-use via libraries Simplicity for easy support Detailed logging for debugging

Design: Dependency-Driven Dependency-driven execution Declarative vs imperative Top level: define groups of comparable runs Depends on: run definitions Middle level: define runs Depends on: build definitions Bottom level: define builds Depends on: external build automation system

Design: Dependency-Driven suite compare_group_1 run ifort + openmpi G4 / 10 cores run ifort + openmpi G4 / serial compare_group_2 run ifort + openmpi G5 / 20 cores run ifort + openmpi G5 / serial compare_group_3 run lahey + mvapich G4 / 10 cores run lahey + mvapich G4 / serial build ifort + openmpi build lahey + mvapich

Design: Dependency-Driven Suites depend on compares Compares tell suite: pass or fail Compares depend on runs uns tell compares: here's my output uns depend on builds Builds tell runs: here are executables If several runs need a build, let one of them build it while the others wait

Design: Dependency-Driven buildmaster buildlocks builds M buildmaster buildlocks builds M M

Design: Dependency-Driven buildmaster buildlocks builds M M M buildmaster buildlocks builds M M M B

Design: Dependency-Driven Benefits No need to worry about order of operations Nothing is built or run unless needed No need for if conditionals in code No combinatoric blow-up

Design: Composable Definitions Suite definition arch : which batch system, etc. to use compare : groups of comparable runs un names are names of files containing run definitions arch: jet compare: compare_group_1: - ifort_openmpi_4_10 - ifort_openmpi_4_s compare_group_2: - ifort openmpi_5_20 - ifort_openmpi_5_s compare_group_3: - lahey_mvapich_4_10 - lahey_mvapich_4_s

Design: Composable Definitions un definition filename: ifort_openmpi_4_10 baseline : baseline snapshot to store or compare against build : build to use baseline: base_ifort_openmpi build: ifort_openmpi namelists: cntlnamelist: glvl: 4 nz: 32 physics: gfs queuenamelist: computetasks: 10 maxqueuetime: 00:05:00 namelists : mods to apply to runtime Fortran namelist file

Design: Composable Definitions Build definition filename: ifort_openmpi Configuration options map onto external build system arch: intel mpi: openmpi par: parallel

Design: Composable Definitions modify suite file: conf/suites/standard create new file: conf/runs/ifort_openmpi_4_20 extends: ifort_openmpi_4_10 namelists: queuenamelist: computetasks: 20 arch: jet compare: compare_group_1: - ifort_openmpi_4_20 - ifort_openmpi_4_10 - ifort_openmpi_4_s compare_group_2: - ifort openmpi_5_20 - ifort_openmpi_5_s compare_group_3: - lahey_mvapich_4_10 - lahey_mvapich_4_s

Design: Composable Definitions conf/runs/intel_cpu_gfs_10 extends: intel_cpu_gfs build: intel_cpu_p namelists: queuenamelist: computetasks: 10 maxqueuetime: 00:05:00 conf/runs/intel_cpu_gfs baseline: intel_cpu_gfs namelists: cntlnamelist: glvl: 5 nz: 32 physics: 'gfs' conf/builds/intel_cpu_p arch: intel hw: cpu par: parallel

Design: Composable Definitions $ nimts show run intel_cpu_gfs_10 conf/builds/intel_cpu_p arch: intel hw: cpu par: parallel conf/runs/intel_cpu_gfs_10 baseline: intel_cpu_gfs build: intel_cpu_p extends: intel_cpu_gfs namelists: cntlnamelist: glvl: 5 nz: 32 physics: gfs queuenamelist: computetasks: 10 maxqueuetime: 00:05:00

Design: Comparisons un-vs-run handled via suite definition un-vs-baseline nimts baseline produces baseline directory un definition defines which baseline the run should read/write uns compete via mutex system to contribute their output to baseline for their group Presence of a baseline directory implies baseline comparison

Design: Terse vs Verbose Immediate Logger Messages appear on console + in log file Output from different threads may be interspersed Delayed Logger Messages go only to log file Extremely verbose e.g. build output Delayed logger messages collected & flushed, access to log file controled by mutex

Design: Multithreaded for Speed One thread per compare group / run / build Concurrency derived from dependencies Each task proceeds when dependencies are satisfied e.g. Comparisons between runs in one compare group happen as soon as those runs complete Allows early-as-possible failure Front-end / compute-node work split

Design: Convention Over Configuration Baselines Simple presence of baseline directory (real or symlink) implies compare against baseline Configuration Build definitions in conf/builds Any filename here can be referred to in a run definition un definitions in conf/runs Any filename here can be referred to in a suite definition

Design: Portability 6 methods define Platform Interface Primarily batch-system issues (how to queue, monitor, delete jobs, etc.) 8 methods define Model Interface How to prepare an isolated build, syntax of build command, how to check if a model run completed, which output files to compare or store Compile/link details left to model's build system

Design: Portability Model 1 def arch_build_pre(buildspec) # no-op end Model 2 def arch_build_pre(buildspec) build=buildspec['build'].squeeze buildbase=build.sub(/\s*serial\s*/,'') builddir=build.sub(' ','_') dstdir=buildspec['buildroot']+'/'+builddir FileUtils.mkdir(dstdir) logd "Made directory: #{dstdir}" n='fimsrc' src=valid_dir(file.expand_path('../../'+n)) dst=dstdir+'/'+n FileUtils.cp_r(src,dst) logd "Copied #{src} to #{dst}" buildspec['buildsrc']=valid_dir(dst) logd "Set build source directory: #{dst}" n='fimrun' src=valid_dir(file.expand_path('../../'+n)) dst=dstdir+'/'+n FileUtils.mkdir(dst) Dir.glob(src+'/*') do e FileUtils.cp(e,dst) unless File.directory?(e) end logd "Copied #{src}/* to #{dst}" buildspec['buildrun']=valid_dir(dst) logd "Set build run directory: #{dst}" end

Driver code in uby Implementation Good maintenance & extension experiences Dynamic dispatch, e.g. command-line arguments translated directly to method calls Good libraries like Logger: immediate and delayed logs Thread: multithreading & mutexes YAML: config files MD5: test-suite data set verification Fortran namelist handler (custom)

Experiences So Far Testing NIM model on two supercomputers Adapted test suite to FIM model for continuous integration tests on new system Developers already modifying their own test suites e-used some components for non-model test suite Goals met

Thanks.