Profiling SETI@Home @ Home

So instead of just randomly analyzing functions in the SETI@Home source code, I decided that I wanted to be scientific about my analysis while I search for which functions take up the most amount of execution time.  It turns out that there is a nice freeware C++ Profiler available for the Windows Platform named “Very Sleepy”.  This profiler works as long as you have the debugging symbols available for the executable that you wish to profile.  So for us this means selecting the Release Build configuration for the seti_boinc project and making sure that the Debug Information Format is set to any of the Wholesale Jerseys “Program Database” options.  Eerily, this option is already turned on for the Release build of the SETI@Home project.  I wonder is this is another oversight of the SETI@Home project team, or if it nfl jerseys china doesn’t really matter… Well, at least the rest of the configuration does appear to have the optimization settings selected.

How to Profile SET@Home

Step 1 – Rebulid with Program Database Option Turned on

To set your project up for profiling, right-click on the “seti_boinc” project from within Visual Studio and select “Configuration Properties->C/C++->General”, and then make sure that any of the “Program Database” options are selected.  After you have done this re-build your solution.

Step 2 – Start you SETI@Home client

After rebuilding the cheap football jerseys china application, click “Debug->Start without Debugging.” Again, make sure that the dll “libfftw3f-3-1a_upx.dll” is located in the same directory as your setiathome executable.

Step 3 – Start Profiling

Load the wholesale nfl jerseys Very Sleepy application profiler Benoa, and select the SETI@Home executable, then select either “Profile All”, or “Profile Selected” from the right-side of the window.  Wait about 1 minute then click “OK”.  Waiting too long will generate a really large file that could crash your system…

Here are the results from my profiling run of the setiathome code:

% Exclusive   Function Name          File Name
18.91%           fftwf_set_timelimit     <not called directly by seti code>
8.37%             GetFixedPoT             analyzePoT.cpp
6.75%             analyze_pot       Cheap Jordan Shoes         analyzePoT.cpp
5.50%             f_GetPeak                 gaussfit.cpp
5.36%             find_pulse                  pulsefind.cpp
4.58%             GaussFit                   gaussfit.cpp
4.48%             FindSpikes                spike.cpp
4.46%             f_GetTrueMean         gaussfit.cpp
4.11%             f_GetChiSq               gaussfit.cpp
3.03%             lcgf                            lcgamm.cpp
Profile-1-mini
So… it looks like the libfftw aka Fastest Fourier Transform in the West is taking up the most of the CPU time… I wonder how much time the other FFT libraries would be using… After that GetFixedPoT and analyze_pot take up the most time.  This gives up plenty of work to do.  If you wish to join in the effort take one of these functions listed above and try to figure out which has the most repetitive tasks that could hopefully be optimized by offloading to an FPGA.  Remember, any operation that is sent to an FPGA must be serialized into a long data stream, then sent over the FPGA via DMA, the FPGA then operates on the data and returns the result, which might consist of an equally large stream of data.
C++ Profiler Used:
Very Sleepy

Leave a Reply

Your email address will not be published. Required fields are marked *