I am a Economics graduate student who is working on computationally intensive project. Normally, I have access to a cluster to use MPI, but for this project I am restricted to a single computer with no internet connection due to data privacy agreements.
My project requires likelihood estimation of dynamic programming model, which involves an outer loop to search for a maximum of a (numerical, not analytical) function and an inner loop that creates that function via solving a series of Bellman equations via backwards recursion for a very large set of values.
People normally uses cluster with MPI to handle the computational burden of this problem, but being stuck on a dual core desktop, I am looking a way out of waiting a month for a single run to finish. The problem is I have to do this a number of times, so speed is of the essence.
then, I heard about CUDA and thought “here is my ticket out of this”. Also seems to be great investment for the future. But there are some problems: (1) I don’t know C/C++, just fortran, matlab etc. (2) I am very poor and don’t have a grant to buy a 5000 machine. I don’t think I can afford a tesla, maybe a 300-400 dollars GTX XXX. Or I can’t purchase the PGI cuda fortran. (3) I don’t have too much time to do and learn things.
I (desperately) need some advice on the feasibility of this via cuda. Here are my questions, anything you can chime in, I’d be grateful:
1- The jump from fortran to cuda c/c++, from CPU to GPU computing: how hard is this? especially thinking about the engineering of an hybrid code that is optimal on multicore/GPU machine for someone who wrote only 2k-3k lines of code at most.
2- Is PGI fortran route better? I don’t have money to buy it but maybe I can beg around to them or my faculty to get some help, if it is worth it.
3- what kind of a GPU I should get? It seems not many geforces have good amount of memory. I eyed a dual card, GTX 460 2win for 350$ or so and with lots of cores and 2 gb ram. Is this a good idea? I might need to buy two cards for this for my home computer as well to test stuff, a cheap card like GT420…Are these good enough to help learn CUDA and run a smaller versions of my code?
4- Any ideas about performance gain I can get? If I went through the whole thing and I got 1.2x speed increase, that would be a shame, but even 2x is very welcomed.
5- Any other advice, sources to get started?
thanks for listening.
EDIT: I have also noticed there are cheaper cards GT420s and GT520s and GTX460s with 2gb RAM on a single card. GTX 460 2win seem to have 1 gb for each card, is this memory shared between the cards or each cuda core have access only to 1 gb? any ideas?