Posts

Showing posts from April, 2013

broadcastCommand, a.k.a visualizing Kittens on a Cluster.

Image
When running your omegalib scripts in a cluster environment, you may need to execute some operation only on a specific node. That’s what the   isMaster() and  getHostname() functions are for. Sometimes, after doing some node-specific work (especially on the master node) you want to notify all the other nodes you are done. A typical scenario is accessing some asset on the network and creating a copy on the local cache in the shared filesystem. As an example asset we’ll consider the canonical cute kitty picture.  You want the master node to perform the actual transfer, and notify all the other nodes of transfer completion, without blocking them. The nodes can then spam the displays with thousands of kitty-textured cubes (or spheres or cylinders. imagination is your limit). The omegalib C++ API supported this for a while. In omegalib 3.7 the function is now available to python applications as well, through the broadcastCommand() call. BroadcastCommand accepts a python statement,

Mixing C++ and python code in your omegalib application

Image
In omegalib, Applications can be developed as standalone executables in C++ or as scripts in Python. Omegalib also supports mixed native/script applications with user-defined C++ modules that can be exposed to Python through a simple declarative interface. When needed you can build part of your program using C++ and turn that into a python module integrating the omegalib API. You can then import this module into python using import moduleName and use some of its exposed interfaces. Assuming you have an omegalib installation on our machine, you can find it using the CMake command find_package(Omegalib) . The command will add a new variable to your cmake configuration asking for the path to the omegalib build dir. After setting that, you will have a set of standard variables defined ( OMEGA_INCLUDE_DIRS , OMEGA_LIB , OMEGA_TOOLKIT_LIB , CYCLOPS_LIB ) that you can use to set header files and libraries for your project). After building, the project will output a .so or .pyd file (depen

omegalib 3.6 released

Image
Full version of this release is 3.6.3. Download it here , or get it from svn here:  http://omegalib.googlecode.com/svn/tags/v.3.6.3/ Big list of changes for this release: general moved Porthole code from omega to omegaToolkit ( 3.6.1 ) additional improvements and fixes to runtime application switching. ( 3.6.3 ) added modules directory for modules that are shipped as part of omegalib but are not part of the core libraries. Modules also provide a good source of examples on how to extend omegalib. ( 3.6.3 ) fbx sdk packages are downloaded on demand from omegalib website instead of being part of the repository. ( 3.6.4 ) python and FreeImage ? fbx sdk packages are downloaded on demand from omegalib website instead of being part of the repository. omicron Major improvements for SuperCollider sound API, thanks to Arthur Nishimoto and JD Pirtle orun control of application start command omega Python interpreter adds data root to module seearch path A few fix

Parallel Gaussian Elimination Using MPI

Image
In this project, we had to implement a parallel solver for linear equation systems, using a technique known as Gaussian elimination (GE). As with many other algorithms for solving linear equation systems, GE is performed on the matrix representation of the system, Ax = b, where A is the coefficient matrix and b is the vector of known values. GE works by applying a set of elementary row operations (swapping rows, multiplying a row by a non-zero number, adding a multiple of one row to another) in order to turn the coefficient matrix into upper triangular form. The algorithm has been implemented in C, using the Message Passing Interface (MPI) API. The parallel GE program measured execution times for its four main components: data distribution, Forward Elimination , Pivot row identification, Back substitution. Read the full report here