So I have been using Igor's global fit function for a while now to analyze large sets of data on a macbook pro with a dual core processor. I know for the simple fit program you can select to use multiple cores/processors, is there anyway to do a global fit using multiple processors? Currently only using one core it takes almost 30mins to perform the fits, it would be nice if I could cut that time down.
Unfortunately, I haven't had the time to modify Global Fit to allow threadsafe fit functions. If I did that, then Global Fit would be able to take advantage of multiple cores.
If you have multiple data sets that need to be analyzed at the same time, you should be able to use your multiple cores by running multiple instances of the Igor application. Usually the operating system will assign different applications to different cores.
On Windows, it is as simple as starting up Igor multiple times. On a Macintosh, make multiple copies of the Igor Pro.app application file and double-click each one.
Although the multithreading can't happen at the globalfit level you can do several things to speed things up. First of all make sure that all your fit functions are "all at once". That can cut a lot of overhead in different places.
The next thing to do would be to write an "all at once" wrapper function for each fit function you need to use. In this wrapper function (which does not need to be threaded) you can do a threaded calculation to calculate the theoretical values. Ok, so it's not at the top level, but it speeds things up a lot.
If you have multiple data sets that need to be analyzed at the same time, you should be able to use your multiple cores by running multiple instances of the Igor application. Usually the operating system will assign different applications to different cores.
On Windows, it is as simple as starting up Igor multiple times. On a Macintosh, make multiple copies of the Igor Pro.app application file and double-click each one.
John Weeks
WaveMetrics, Inc.
support@wavemetrics.com
September 16, 2011 at 05:23 pm - Permalink
The next thing to do would be to write an "all at once" wrapper function for each fit function you need to use. In this wrapper function (which does not need to be threaded) you can do a threaded calculation to calculate the theoretical values. Ok, so it's not at the top level, but it speeds things up a lot.
September 16, 2011 at 10:14 pm - Permalink
Wave w, yy, xx
Multithread yy = mygauss(w, xx)
End
Threadsafe Function mygauss(w, xx)
Wave w
variable xx
return w[0] * exp(-1 * ((xx - w[1])/w[2])^2)
End
September 17, 2011 at 12:51 am - Permalink
September 22, 2011 at 10:02 am - Permalink