OP2/PyOP2 — pull request #404 by wence- (2014-09-25 10:49:34+00:00)
Title: Reduce overhead

A bunch of changes to reduce the overhead of calling the same par_loop again and again.

Summary:

- purges lazy evaluation (since I have not thought hard enough about how the new features should interact and we currently don't use it anyway).

- reduces the amount of type-checking ctypes does when calling a compiled function: we generate the code so the types are "guaranteed" to be correct.

- Exposes the ParLoop object in the public API
You can no repeatedly run the same par_loop (with the same arguments) by doing:
```python
pl = ParLoop(.....)
for i in range(100):
pl._run()
```

- adds a (no-error-checking) `replace_arg_data` routine that replaces the data payload of a specified argument in a ParLoop. That means you can cons up a new Dat or Mat, replace it in a saved ParLoop and call the ParLoop again writing/reading the new (rather than original) object.

- various minor adjustments to kill unnecessary repeated computations when rerunning a parloop.

I think the only truly controversial part of this is the lazy evaluation purge. Comments welcome.