44
6.S096 Lecture 8 – Project Environments Iterators, N-Body Problem, Setup Andre Kessler Andre Kessler 6.S096 Lecture 8 – Project Environments 1 / 41

Iterators, N-Body Problem, Setup Andre Kessler · 6.S096 Lecture 8 { Project Environments Iterators, N-Body Problem, Setup Andre Kessler. Andre Kessler. 6.S096 Lecture 8 { Project

  • Upload
    others

  • View
    4

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Iterators, N-Body Problem, Setup Andre Kessler · 6.S096 Lecture 8 { Project Environments Iterators, N-Body Problem, Setup Andre Kessler. Andre Kessler. 6.S096 Lecture 8 { Project

6.S096 Lecture 8 – Project EnvironmentsIterators, N-Body Problem, Setup

Andre Kessler

Andre Kessler 6.S096 Lecture 8 – Project Environments 1 / 41

Page 2: Iterators, N-Body Problem, Setup Andre Kessler · 6.S096 Lecture 8 { Project Environments Iterators, N-Body Problem, Setup Andre Kessler. Andre Kessler. 6.S096 Lecture 8 { Project

Outline

1 Assignment 3 - Recap

2 Final Project (nbody)

3 Unit Testing

4 Wrap-up

Andre Kessler 6.S096 Lecture 8 – Project Environments 2 / 41

Page 3: Iterators, N-Body Problem, Setup Andre Kessler · 6.S096 Lecture 8 { Project Environments Iterators, N-Body Problem, Setup Andre Kessler. Andre Kessler. 6.S096 Lecture 8 { Project

Assignment 3 - Recap

Sample Solution

class List {

size_t _length;

ListNode *_begin, *_back;

public:

class iterator {

friend class List;

ListNode *_node;

public:

iterator( ListNode *theNode );

iterator& operator++();

int& operator*();

bool operator==( const iterator &rhs );

bool operator!=( const iterator &rhs );

}; // ...etc

Andre Kessler 6.S096 Lecture 8 – Project Environments 3 / 41

Page 4: Iterators, N-Body Problem, Setup Andre Kessler · 6.S096 Lecture 8 { Project Environments Iterators, N-Body Problem, Setup Andre Kessler. Andre Kessler. 6.S096 Lecture 8 { Project

Assignment 3 - Recap

Sample Solution

iterator begin();

iterator back();

iterator end();

Iterators allow us to write a fast reduce function like this:

int ReduceFunction::reduce( const List &lis ) const {

int result = identity();

for( auto it = lis.begin(); it != lis.end(); ++it ) {

result = function( result, *it );

}

return result;

}

Andre Kessler 6.S096 Lecture 8 – Project Environments 4 / 41

Page 5: Iterators, N-Body Problem, Setup Andre Kessler · 6.S096 Lecture 8 { Project Environments Iterators, N-Body Problem, Setup Andre Kessler. Andre Kessler. 6.S096 Lecture 8 { Project

Assignment 3 - Recap

Iterator Implementation

List::iterator::iterator( ListNode *theNode ) :

_node{theNode} {}

List::iterator& List::iterator::operator++() {

_node = _node->next();

return *this;

}

int& List::iterator::operator*() {

return _node->value();

}

Andre Kessler 6.S096 Lecture 8 – Project Environments 5 / 41

Page 6: Iterators, N-Body Problem, Setup Andre Kessler · 6.S096 Lecture 8 { Project Environments Iterators, N-Body Problem, Setup Andre Kessler. Andre Kessler. 6.S096 Lecture 8 { Project

Assignment 3 - Recap

Const Iterator Implementation

List::const_iterator::const_iterator( ListNode *p ) :

_node{p} {}

List::const_iterator&

List::const_iterator::operator++() {

_node = _node->next();

return *this;

}

const int& List::const_iterator::operator*() {

return _node->value();

}

Andre Kessler 6.S096 Lecture 8 – Project Environments 6 / 41

Page 7: Iterators, N-Body Problem, Setup Andre Kessler · 6.S096 Lecture 8 { Project Environments Iterators, N-Body Problem, Setup Andre Kessler. Andre Kessler. 6.S096 Lecture 8 { Project

Assignment 3 - Recap

More in the code...

Let’s look into the code...

Andre Kessler 6.S096 Lecture 8 – Project Environments 7 / 41

Page 8: Iterators, N-Body Problem, Setup Andre Kessler · 6.S096 Lecture 8 { Project Environments Iterators, N-Body Problem, Setup Andre Kessler. Andre Kessler. 6.S096 Lecture 8 { Project

Final Project (nbody)

Final Project

Groups of 2-4 people; 3 recommended

Andre Kessler 6.S096 Lecture 8 – Project Environments 8 / 41

Page 9: Iterators, N-Body Problem, Setup Andre Kessler · 6.S096 Lecture 8 { Project Environments Iterators, N-Body Problem, Setup Andre Kessler. Andre Kessler. 6.S096 Lecture 8 { Project

Final Project (nbody)

N-Body Gravity Simulation

The Problem

Have N point masses with initial positions ri , velocities vi , accelerationsai , and masses mi . Compute all-pairs forces

GmFij = − imj

(r|ri − rj |

i3− rj)

and update the locations.

Andre Kessler 6.S096 Lecture 8 – Project Environments 9 / 41

Page 10: Iterators, N-Body Problem, Setup Andre Kessler · 6.S096 Lecture 8 { Project Environments Iterators, N-Body Problem, Setup Andre Kessler. Andre Kessler. 6.S096 Lecture 8 { Project

Final Project (nbody)

Most basic integrator

void System::integrateSystem( float dt ) {

Vector3f r, v, a;

for( size_t i = 0; i < _nBodies; ++i ) {

r = _body[i].position();

v = _body[i].velocity();

a = _body[i].acc();

v = v + ( a * dt );

r = r + v * dt;

_body[i].position() = r;

_body[i].velocity() = v;

}

}

Andre Kessler 6.S096 Lecture 8 – Project Environments 10 / 41

Page 11: Iterators, N-Body Problem, Setup Andre Kessler · 6.S096 Lecture 8 { Project Environments Iterators, N-Body Problem, Setup Andre Kessler. Andre Kessler. 6.S096 Lecture 8 { Project

Final Project (nbody)

Components

Requirements

25% Physics Engine - quality and extensibility of simulation code

25% Visualization - OpenGL; getting a good visualization working

15% Unit testing - gtest, quality and coverage of tests

15% Software Process - code reviews, overall integration of project

10% Interactive - user interactivity with simulation (keyboard, mouse, etc)

10% Do something cool - make it look cool, add a useful feature, dosomething interesting!

Extra 5% available in all areas for exceptional effort.

Andre Kessler 6.S096 Lecture 8 – Project Environments 11 / 41

Page 12: Iterators, N-Body Problem, Setup Andre Kessler · 6.S096 Lecture 8 { Project Environments Iterators, N-Body Problem, Setup Andre Kessler. Andre Kessler. 6.S096 Lecture 8 { Project

Final Project (nbody)

“Do Something Cool”

Just a few examples of potential areas:

Advanced OpenGL

Threading with <thread>

Parallelize with OpenMP

More interactive (other forms of input)

Andre Kessler 6.S096 Lecture 8 – Project Environments 12 / 41

Page 13: Iterators, N-Body Problem, Setup Andre Kessler · 6.S096 Lecture 8 { Project Environments Iterators, N-Body Problem, Setup Andre Kessler. Andre Kessler. 6.S096 Lecture 8 { Project

Final Project (nbody)

Physics Engine

You should be producing a library called libnbody.a. The only strictrequirement is that you will wrap all of your code in a namespace nbody

and provide the following interface:

namespace nbody {

class Simulation {

// ...

public:

void loadRun( std::istream &in );

void evolveSystemFor( float time );

void saveRun( std::ostream &out ) const;

// ...

};

} // namespace nbody

Andre Kessler 6.S096 Lecture 8 – Project Environments 13 / 41

Page 14: Iterators, N-Body Problem, Setup Andre Kessler · 6.S096 Lecture 8 { Project Environments Iterators, N-Body Problem, Setup Andre Kessler. Andre Kessler. 6.S096 Lecture 8 { Project

Final Project (nbody)

Physics Engine

void nbody::Simulation::loadRun( std::istream &in );

Constructor to read in a common “state” file.

Andre Kessler 6.S096 Lecture 8 – Project Environments 14 / 41

Page 15: Iterators, N-Body Problem, Setup Andre Kessler · 6.S096 Lecture 8 { Project Environments Iterators, N-Body Problem, Setup Andre Kessler. Andre Kessler. 6.S096 Lecture 8 { Project

Final Project (nbody)

Physics Engine

void nbody::Simulation::evolveSystemFor( float time );

Evolve the system forward in time by time (inseconds).

Andre Kessler 6.S096 Lecture 8 – Project Environments 15 / 41

Page 16: Iterators, N-Body Problem, Setup Andre Kessler · 6.S096 Lecture 8 { Project Environments Iterators, N-Body Problem, Setup Andre Kessler. Andre Kessler. 6.S096 Lecture 8 { Project

Final Project (nbody)

Physics Engine

void nbody::Simulation::saveRun( std::ostream &out )

const;

Function to write out a common “state” file.

Andre Kessler 6.S096 Lecture 8 – Project Environments 16 / 41

Page 17: Iterators, N-Body Problem, Setup Andre Kessler · 6.S096 Lecture 8 { Project Environments Iterators, N-Body Problem, Setup Andre Kessler. Andre Kessler. 6.S096 Lecture 8 { Project

Final Project (nbody)

Your team should take the initiative! Look up various ways of do theintegration to improve accuracy, different size time steps, unit systems,and so forth. I’ll be adding hints throughout the week.

Physics Engine

Why so little specification?

Andre Kessler 6.S096 Lecture 8 – Project Environments 17 / 41

Page 18: Iterators, N-Body Problem, Setup Andre Kessler · 6.S096 Lecture 8 { Project Environments Iterators, N-Body Problem, Setup Andre Kessler. Andre Kessler. 6.S096 Lecture 8 { Project

Final Project (nbody)

Physics Engine

Why so little specification?Your team should take the initiative! Look up various ways of do theintegration to improve accuracy, different size time steps, unit systems,and so forth. I’ll be adding hints throughout the week.

Andre Kessler 6.S096 Lecture 8 – Project Environments 17 / 41

Page 19: Iterators, N-Body Problem, Setup Andre Kessler · 6.S096 Lecture 8 { Project Environments Iterators, N-Body Problem, Setup Andre Kessler. Andre Kessler. 6.S096 Lecture 8 { Project

Final Project (nbody)

Binary Star System Example 1

Andre Kessler 6.S096 Lecture 8 – Project Environments 18 / 41

Page 20: Iterators, N-Body Problem, Setup Andre Kessler · 6.S096 Lecture 8 { Project Environments Iterators, N-Body Problem, Setup Andre Kessler. Andre Kessler. 6.S096 Lecture 8 { Project

Final Project (nbody)

Binary Star System Example 2

Andre Kessler 6.S096 Lecture 8 – Project Environments 19 / 41

Page 21: Iterators, N-Body Problem, Setup Andre Kessler · 6.S096 Lecture 8 { Project Environments Iterators, N-Body Problem, Setup Andre Kessler. Andre Kessler. 6.S096 Lecture 8 { Project

Final Project (nbody)

Binary Star System Example 3

Andre Kessler 6.S096 Lecture 8 – Project Environments 20 / 41

Page 22: Iterators, N-Body Problem, Setup Andre Kessler · 6.S096 Lecture 8 { Project Environments Iterators, N-Body Problem, Setup Andre Kessler. Andre Kessler. 6.S096 Lecture 8 { Project

Final Project (nbody)

Binary Star System Example 4

Andre Kessler 6.S096 Lecture 8 – Project Environments 21 / 41

Page 23: Iterators, N-Body Problem, Setup Andre Kessler · 6.S096 Lecture 8 { Project Environments Iterators, N-Body Problem, Setup Andre Kessler. Andre Kessler. 6.S096 Lecture 8 { Project

Final Project (nbody)

Binary Star System Example 5

Andre Kessler 6.S096 Lecture 8 – Project Environments 22 / 41

Page 24: Iterators, N-Body Problem, Setup Andre Kessler · 6.S096 Lecture 8 { Project Environments Iterators, N-Body Problem, Setup Andre Kessler. Andre Kessler. 6.S096 Lecture 8 { Project

Final Project (nbody)

Binary Star System Example 6

Andre Kessler 6.S096 Lecture 8 – Project Environments 23 / 41

Page 25: Iterators, N-Body Problem, Setup Andre Kessler · 6.S096 Lecture 8 { Project Environments Iterators, N-Body Problem, Setup Andre Kessler. Andre Kessler. 6.S096 Lecture 8 { Project

Final Project (nbody)

Binary Star System Example 7

Andre Kessler 6.S096 Lecture 8 – Project Environments 24 / 41

Page 26: Iterators, N-Body Problem, Setup Andre Kessler · 6.S096 Lecture 8 { Project Environments Iterators, N-Body Problem, Setup Andre Kessler. Andre Kessler. 6.S096 Lecture 8 { Project

Final Project (nbody)

Binary Star System Example 8

Andre Kessler 6.S096 Lecture 8 – Project Environments 25 / 41

Page 27: Iterators, N-Body Problem, Setup Andre Kessler · 6.S096 Lecture 8 { Project Environments Iterators, N-Body Problem, Setup Andre Kessler. Andre Kessler. 6.S096 Lecture 8 { Project

Final Project (nbody)

Binary Star System Example 9

Andre Kessler 6.S096 Lecture 8 – Project Environments 26 / 41

Page 28: Iterators, N-Body Problem, Setup Andre Kessler · 6.S096 Lecture 8 { Project Environments Iterators, N-Body Problem, Setup Andre Kessler. Andre Kessler. 6.S096 Lecture 8 { Project

Final Project (nbody)

Binary Star System Example 10

Andre Kessler 6.S096 Lecture 8 – Project Environments 27 / 41

Page 29: Iterators, N-Body Problem, Setup Andre Kessler · 6.S096 Lecture 8 { Project Environments Iterators, N-Body Problem, Setup Andre Kessler. Andre Kessler. 6.S096 Lecture 8 { Project

Final Project (nbody)

Visualization

OpenGL; sample code provided tomorrow and Wednesday.

Andre Kessler 6.S096 Lecture 8 – Project Environments

Courtesy of Aaron M. Geller. Used with permission.

28 / 41

Page 30: Iterators, N-Body Problem, Setup Andre Kessler · 6.S096 Lecture 8 { Project Environments Iterators, N-Body Problem, Setup Andre Kessler. Andre Kessler. 6.S096 Lecture 8 { Project

Final Project (nbody)

Interactive

Your final product should be easy to use.

- Mouse integration (moving the view)

- Keyboard controls

- Command line arguments

Andre Kessler 6.S096 Lecture 8 – Project Environments 29 / 41

Page 31: Iterators, N-Body Problem, Setup Andre Kessler · 6.S096 Lecture 8 { Project Environments Iterators, N-Body Problem, Setup Andre Kessler. Andre Kessler. 6.S096 Lecture 8 { Project

Final Project (nbody)

Content Provided

Vector3.h

So that you don’t have to write (all) of your own vector math, feel free touse the header available.

It’s a templated 3-d vector class that can be widely useful and isguaranteed fast (“plain old data type”)

Andre Kessler 6.S096 Lecture 8 – Project Environments 30 / 41

Page 32: Iterators, N-Body Problem, Setup Andre Kessler · 6.S096 Lecture 8 { Project Environments Iterators, N-Body Problem, Setup Andre Kessler. Andre Kessler. 6.S096 Lecture 8 { Project

Final Project (nbody)

Content Provided - Vector3.h

template<typename T>

class Vector3 {

T _x, _y, _z;

public:

Vector3() : _x{}, _y{}, _z{} {}

Vector3( T x_, T y_, T z_ ) :

_x{x_}, _y{y_}, _z{z_} {}

inline T x() const { return _x; }

inline T y() const { return _y; }

inline T z() const { return _z; }

T norm() const;

T normsq() const;

};

Andre Kessler 6.S096 Lecture 8 – Project Environments 31 / 41

Page 33: Iterators, N-Body Problem, Setup Andre Kessler · 6.S096 Lecture 8 { Project Environments Iterators, N-Body Problem, Setup Andre Kessler. Andre Kessler. 6.S096 Lecture 8 { Project

Final Project (nbody)

Content Provided - Vector3.h

All the overloads and helpful functions you could want:

template<typename T> inline

const Vector3<T> operator+( const Vector3<T> &a,

const Vector3<T> &b ) {

return Vector3<T>{ a.x() + b.x(),

a.y() + b.y(),

a.z() + b.z() };

}

//..etc

template<typename T> inline

T dot( const Vector3<T> &a, const Vector3<T> &b ) {

return a.x() * b.x() + a.y() * b.y() + a.z() * b.z();

}

Andre Kessler 6.S096 Lecture 8 – Project Environments 32 / 41

Page 34: Iterators, N-Body Problem, Setup Andre Kessler · 6.S096 Lecture 8 { Project Environments Iterators, N-Body Problem, Setup Andre Kessler. Andre Kessler. 6.S096 Lecture 8 { Project

Final Project (nbody)

Code Reviews

- You should be doing reviews of all committedcode within your group.

- Each group member should send me one suchreview by Wednesday.

- There will also be an inter-group review that I willorganize.

Andre Kessler 6.S096 Lecture 8 – Project Environments 33 / 41

Page 35: Iterators, N-Body Problem, Setup Andre Kessler · 6.S096 Lecture 8 { Project Environments Iterators, N-Body Problem, Setup Andre Kessler. Andre Kessler. 6.S096 Lecture 8 { Project

Final Project (nbody)

What you send to me

Your name and the name of the person whose code you are reviewing.

The snippet of code you are reviewing: more than 30 lines, less than100.

Your comments interspersed in their code.

A summary of main points relating to the review (what they did well,major areas for improvement, common issues, general observations).

You should choose a bite-sized chunk that will take you 45 mins to 1 hourto fully review.

Andre Kessler 6.S096 Lecture 8 – Project Environments 34 / 41

Page 36: Iterators, N-Body Problem, Setup Andre Kessler · 6.S096 Lecture 8 { Project Environments Iterators, N-Body Problem, Setup Andre Kessler. Andre Kessler. 6.S096 Lecture 8 { Project

Final Project (nbody)

What you send to me

Your name and the name of the person whose code you are reviewing.

The snippet of code you are reviewing: more than 30 lines, less than100.

Your comments interspersed in their code.

A summary of main points relating to the review (what they did well,major areas for improvement, common issues, general observations).

You should choose a bite-sized chunk that will take you 45 mins to 1 hourto fully review.

Andre Kessler 6.S096 Lecture 8 – Project Environments 34 / 41

Page 37: Iterators, N-Body Problem, Setup Andre Kessler · 6.S096 Lecture 8 { Project Environments Iterators, N-Body Problem, Setup Andre Kessler. Andre Kessler. 6.S096 Lecture 8 { Project

Final Project (nbody)

Tips for effective code review

Most important features for the code: correctness, maintainability,reliability, and performance. Consistent style is good, but those otherpoints come first!

Keep your review short and to the point.

Check the code for compliance with the class coding standards.

Take the time for a proper review, but don’t spend much more thanan hour; additionally, don’t review much more than about 200 lines ofcode at once.

Andre Kessler 6.S096 Lecture 8 – Project Environments 35 / 41

Page 38: Iterators, N-Body Problem, Setup Andre Kessler · 6.S096 Lecture 8 { Project Environments Iterators, N-Body Problem, Setup Andre Kessler. Andre Kessler. 6.S096 Lecture 8 { Project

Final Project (nbody)

Structure of Final Project Source

Live demonstration of project setup

Andre Kessler 6.S096 Lecture 8 – Project Environments 36 / 41

Page 39: Iterators, N-Body Problem, Setup Andre Kessler · 6.S096 Lecture 8 { Project Environments Iterators, N-Body Problem, Setup Andre Kessler. Andre Kessler. 6.S096 Lecture 8 { Project

Final Project (nbody)

Separation of build and source

Have a clean build.

Since this is definitely under revision control, we want to keep ourdirectories free from clutter

Hence, all object (.o) files will go in the bin/ directory.

Third-party libraries live in their own directory third party/gtest

or whatever.

Headers for our project named “project” are deployed to the installdirectory.

Be able to build in one step

We have an upper-level Makefile so that we can still just make ourproject.

However, that’s been split up into more modular sub-makefiles(make/*.mk).

Andre Kessler 6.S096 Lecture 8 – Project Environments 37 / 41

Page 40: Iterators, N-Body Problem, Setup Andre Kessler · 6.S096 Lecture 8 { Project Environments Iterators, N-Body Problem, Setup Andre Kessler. Andre Kessler. 6.S096 Lecture 8 { Project

Unit Testing

Unit Testing and Test-Driven Development

Testing your source code, one function or “unit” ofcode at a time.

Test-driven development: write the tests first and then write codewhich makes the tests pass

Decide how you want the interface to work in general, write sometests, and go develop the specifics.

Andre Kessler 6.S096 Lecture 8 – Project Environments 38 / 41

Page 41: Iterators, N-Body Problem, Setup Andre Kessler · 6.S096 Lecture 8 { Project Environments Iterators, N-Body Problem, Setup Andre Kessler. Andre Kessler. 6.S096 Lecture 8 { Project

Unit Testing

gtest: the Google C++ Testing Framework

Highly cross-platform, available from here.

Runs your full suite of tests (potentially each time you compile)

Tests are very portable and reusable across multiple architectures

Powerful, but very few dependencies.

Example from their primer:

ASSERT_EQ(x.size(), y.size()) << "unequal length";

for (int i = 0; i < x.size(); ++i) {

EXPECT_EQ(x[i], y[i]) << "differ at index " << i;

}

Andre Kessler 6.S096 Lecture 8 – Project Environments 39 / 41

Page 42: Iterators, N-Body Problem, Setup Andre Kessler · 6.S096 Lecture 8 { Project Environments Iterators, N-Body Problem, Setup Andre Kessler. Andre Kessler. 6.S096 Lecture 8 { Project

Unit Testing

Examples

Let’s see some examples...

Andre Kessler 6.S096 Lecture 8 – Project Environments 40 / 41

Page 43: Iterators, N-Body Problem, Setup Andre Kessler · 6.S096 Lecture 8 { Project Environments Iterators, N-Body Problem, Setup Andre Kessler. Andre Kessler. 6.S096 Lecture 8 { Project

Wrap-up

Wrap-up & Wednesday

Final project due Saturday

You need to begin work on it *now*!

Class on Wed.

OpenGL, templates, more on large projects

Questions?Office hours Mon, Tues

Andre Kessler 6.S096 Lecture 8 – Project Environments 41 / 41

pgand4
Rectangle
Page 44: Iterators, N-Body Problem, Setup Andre Kessler · 6.S096 Lecture 8 { Project Environments Iterators, N-Body Problem, Setup Andre Kessler. Andre Kessler. 6.S096 Lecture 8 { Project

MIT OpenCourseWarehttp://ocw.mit.edu

6.S096 Effective Programming in C and C++IAP 2014

For information about citing these materials or our Terms of Use, visit: http://ocw.mit.edu/terms.