pycuda is a very simple way to get started with the cuda platform from nvidia. You barley need any C knowledge, if you work with an gpu array you need no C or Cuda knowlegde at all.
For example with cuda you need to define pointers, copy them to the gpu, write a kernel which works on them and copy the resulting data back to the cpu. Now this is a good approach if you want to do complex things, but if you just want to add some arrays, wouldn't it be nicer to just say y = a + b ?
Well that's were pycuda shines. It takes care of all the memory handling and lets you concentrate on your actual task, not how to copy data or compile C code. It does all this for you.
What kind of speed can you expect from this approach? Surprisingly calculations can be 10x faster (GT8800 GPU, addition of two arrays of 128MB each) than a single Xeon 2.6GHz dualcore.
But like always you run into limitation pretty fast, for example if you want to add 2 arrays which are both 300MB in size, you are pretty much out of luck, since a common graphic card has only 512MB Memory. So you need to split your arrays and loose time by doing this. Also don't forget that the dynamic compilations of the internal C code and moving of the data can take some time. So it's important to test where to use pycuda/cuda and where.
So after all I can recommend this software to scientist who want to concentrate on their problem and not want to fight cuda/C all day long. Specially since python is easy to learn and you can start coding after you understand the definition of variables, operators and how to call methods.
What are problems with pycuda?
My current experience is that it is hard to install pycuda, if you have not much experience with unix system, but the mailing list is very helpful and tries to resolve problems very fast.
well my experience with maven is like always not so that I'm happy with it or that I'm unhappy. I got kind of a shared feeling about this software.
A simple example, 7 years ago I started to develop a software which contains several sub modules, sub projects, j2ee components. Basically the usual suspects and I used ant to build all these tools.
Now the year 2008 came and we finally wanted to rewrite the build system since it became more and more complicated to maintain the ant build files.
This was the point when I decided to give maven another try. And it worked well, for parts of it and not so well for other parts.
Basically if you have a simple project with some sub modules and don't do fancy stuff. It works perfectly!
But more about this here:
What I really learned to appreciate was that it keeps every project in the same structure. If you know one maven project, you know them all.
This is a huge plus, since it get's you started much faster with new projects!
Also very nice was the dependency management, at least if you were able to find a repository which has the needed dependencies available. Sadly this is very often not the case or only outdated versions of the dependency. So you end up setting up your own repository for just the libraries which are not available. Once you done this you are very happy for a couple of days...
Now comes the annoying part with maven, you encounter weird problems.
For example, some builds are failing all the time because a sub module is not found. This is particularly the case for projects which have a lot of sub modules, which have even more sub modules.
You go into the directory and build this module + install it. Once you have done this the whole system works again and you can build all you modules again, till you need to update this particularly module.
Which means you write a small shell script which sits in front of maven, till there is a fix available, or you join the project and try to fix it yourself, but sadly I had no time for this so far.
To make things short, maven is still pretty buggy. Which leads to the conclusion that the testing of the software is not perfect.
Now that does not have to be related to the software maven itself. I guess it's more related to the plugins which are available for maven. But should it be really possible for a plugin to break the dependency management of the build system?
I mean I love the concept of the plugins!
Example would be that you want to write you main code with java and for testing and web stuff you use grails/groovy. So you google how todo this and see some wonderful people already wrote a plugin for you! So maven has a very active community and a lot of plugins for nearly all problems. Another big +
Another issue I encountered was that maven tends to break it self with newer version. For example a build which works fine with maven 2.0.5 does not necessarily work with 2.0.9 since 2.0.9 introduced a bug in the release.
I mean shouldn't software be compatible to older versions? Specially if it's not a major release?
After all I love maven and I would never use ant again to build software. The benefits of maven are just to high compared to ant. But I would love it, if I could fight the system a little bit less and things would just work as they are expected.
So can I recommend maven?
this for sure!