AutoSleep Music Timer hits the AppStore

Hello!

AutoSleep Music Timer application icon

I just released a new application on the AppStore and wanted to share the joy! 😀 The application is called: “AutoSleep Music Timer” and its purpose is to help all those people (like me) that need music to fall asleep.

So what it basically does is: turn the music off automatically when you fall asleep! It does so not after a user set amount of time, but by monitoring your “sleep” state.

The application cooperates with whatever music player you use that can play in the background. So with the music playing you fire up “AutoSleep” and place the iPhone on your bed. AutoSleep then monitors your movement pattern through the accelerometer and when it detects that you are asleep it turns off the music. Simple as that.

This kind of app was missing from the AppStore and to me is a life saver. Specially when listening to internet radio stations that otherwise will go on playing forever, possibly waking you up long after you have fallen asleep, which kind of beats the purpose of using music to sleep!

The app is going to be on sale (66% off) through out the holidays for $0.99, so if you like it, it might be a good time to get it now. If you use it please be kind enough to leave a positive review on the AppStore and show your support.

Here is the link to the application

Thanks again and I will be back with a more technical article about the application! Until then have a nice Christmas!!!

Optimizing script language performance with custom memory allocators

The last weekend I did some exploration on the script language execution performance. Specifically on the memory allocation side of things, and I would like to share my findings.

Script languages and memory usage

As you probably know script languages (most of them at least, like Python, Lua, etc) have the tendency to make a huge amount of small allocations on the heap. Almost everything is stored on the heap, and if you care for performance, you start to feel homesick about your beloved C stack! Anyway, nothing comes for free, and scripting languages have to take something from you in exchange for all the goods it gives you back. So the best you can do is make sure that you have the best memory allocator for the job.

Doing too many small allocations and releases on the heap can create memory fragmentation, along with all the evil that comes with this. The common approach is to create a specialized memory allocator that serves small and constant in size blocks of memory to the scripting language, taken from a bigger chunk of memory reserved from the system. This is a common in all “realtime” and intencive applications like games, and something I did many times to gain performance.

Can’t beat the standard malloc

What I discovered with my latest attempt was that it has gotten quite hard to beat the GNU implementation of malloc(). Something that used to be easy in the past when you focused on a specialized case (e.g. small blocks of memory). Not that you can’t do better if you try hard, but at this point the malloc() implementation is already super-fast for 99.9% of applications on the desktop. Rest asured that you will not be able to do much better. However that is not the case for embedded devices that don’t share the same virtual memory benefits as the desktop computers.

My hand tuned specialized memory allocator for small blocks of memory ( <= 256bytes ) was not able to be more that 1% faster that the native malloc() on the OS X 10.6. However on the iPhone the same allocator was twice as fast as the native malloc() ! Since the target was from the begining the iPhone that seemed like big win! However when I set up a small benchmark in the scripting environment that did some allocations of game engine objects and released then again in various patterns, the results were disappointing. The gain from using my specialized (and twice as fast) allocator resulted in improvement of about 5% in execution speed in a memory intensive benchmark. And at some tests even slower! That was odd and most of all not good!

Why I was failing

After some inspections and tests that made the case of me doing something really stupid less probable, I narrowed down the cause.

In most cases of using a scripting language you have some classes defined in C++ that you instatiate in the scripting language. Take for example a 3D vector class “CVector3” defined in C++. When you instatiate this in the script language you get two allocations. One in the scripting language that allocates the “proxy” object and one in the C++ environment. When giving a new allocator to the scripting language to do its allocations you only “optimize” the first allocation. The one in C++ still goes through the system default allocator.

And since you optimize half of the allocations you expect to have half the performance boost… well… wrong. It turns out that you can even be slower this way. The secret here is the CPU cache. By doing the above, you have two memory blocks that are usually accessed together, but are far apart in memory. This can really hurt performance badly on a device with slow memory like the iPhone.

The solution

The solution was of course to use the same allocator on the C++ side by overriding the “new” operator of the class. This made the blocks of memory allocated on the script side to be close to the block allocated on the C++ side. This way access to the object only involves accessing one part of the memory and giving nice cache hits. Performance up by 30%, which was nice and expected.

One other interesting thing that I found from this is that, on the iPhone, if I just override the “new” operator of a class and make it allocate the memory with plain malloc() and don’t use my allocator at all, the system is again faster!

This is probably from the fact that “new” does not go through plain malloc() (didn’t bother to check) as the scripting language environment does. So the allocated blocks end up in differect arenas at different parts of the memory, with the result of losing performance for the same reason as above!

So, keep your related allocations close together when crossing the language barrier!

Hollywood Directors Beware!

With great pleasure I inform you that my first video clip is complete! No I am not singing.. I just created the video for the upcoming single from Dol Theeta – the second brain child of Thanasis Lightbridge. Part of the three band project of his, of which we only experienced Dol Ammad until now. Judging from the single that I had the privilege to work with, the whole project is Continue reading

Double Check Your EXCEL

Do you trust Microsoft Excel to do your financial plans? Do you count on it for business matters? Do you even use it as a calculator?

Think again… since Excel can’t even multiply correctly!!

I wonder how they accomplished such a thing! What kind of COM, CORBA and VB should you be calling for a multiplication to make it have a bug!?

p.s. If I recall correctly there was a bug like that in the calculator that came with a previous version of Windows…

microsoft, excel, bug, multiply

24 hours and 3GB later…

Its been almost 24 hours since the release of Sylphis3D and the sourceforge shows that 3GBytes were downloaded already about 10 e-mails expressing unbounded appreciation and some very nice comments. People are already jumping in to help with the website, doing changes and cleaning up the mess!

I would like to thank every one of you for your good wishes and I hope the best for you, too.

The wait is over… Sylphis3D is open source!

I just release the source to Sylphis3D! Check out the story at the Developer Network.

The wait is over! Sylphis3D is officially released under the GNU GPL ver.2 (with the classpath exception for those that need closed source solutions). The engine weights at around 45000 lines of source code written in C++ and Python. The source code can be obtained from the download page of the [sourceforge.net project page](http://www.sf.net/projects/sylphis3d). Latter on the source will be added to the subversion repository for easier access. The source code compiles under Microsoft Visual Studio .NET 2003. The makefiles and sconsturct files, for compiling with GCC, are out of date. However the mapcompiler is up to date. The source would compile out of the box. Continue reading

Tomorrow the Release

The time has come… tomorrow is the release day of Sylphis3D as an open source project. I’m very excited for this new begining! This is going to be my biggest contribution to the open source community until now.

The source that is going to be released counts ~45000 lines of code in C++ and Python counted with SLOCCount and the development cost was evaluated at $1.500.000 !!!

Oh.. well…. 🙂

sylphis3d, release, open source, GPL, 3d, engine, opengl

Opensource License

The last days I’m spending most of my time considering open source licenses and what would be the appropriate license for Sylphis3D. I must say that it is a very brain-melting procedure. I can see now why I could never became a lawyer!

I initially started considering two licenses, the GPL and the BSD. These are both approved open source licenses by the FSF. GPL is the defacto open source license today and has proven its value. Most of open source software today is released under the GPL, including Linux. The license was proven to be able to protect and empower the freedom of the software, by forcing code to be contributed back to the original GPLed software. The BSD on the other side is a more liberal license. Requires for the adopters of the code to make no more than to mention the code that was used. They are not required to release their code back. This is looked upon by some open source people because it allows closed source projects to benefit from open source, without ever contributing back. The classic example here is the Windows operating system that used the networking stack of the freeBSD operating system; no code was ever contributed back by Microsoft.

The problem with GPL is that it is not an easy solution when it comes to 3D game engines. A GPLed engine Continue reading