Shane R writes: > I hope this is the appropriate forum. Please direct me to the correct one if > it is not. > > I am trying to optimize a c++ application that I ported from a windows > system to Linux. OK. > The app is a terminal based application that does some one time file io at > the start then runs completely in memory. After the one time io the app runs > successive timed epochs on the same data in Windows as Linux. The app is a > program that runs some code for doing non-linear optmization (math stuff). > > The reason why I am posting is that I timed the time it takes for the > application to complete an epoch. It take twice as long in Linux as > windows?!?! That is fairly unusual. > My system is an Intel Centrino Duo with 2gigs of ram. The application is > only using a fraction of available memory in windows and linux. The > application is single-threaded in both. > > I am using Visual Studio 2003 in Windows and when I type gcc -v I get: > Target: i486-linux-gnu > Configured with: ../src/configure -v > --enable-languages=c,c++,fortran,objc,obj-c++,treelang --prefix=/usr > --enable-shared --with-system-zlib --libexecdir=/usr/lib > --without-included-gettext --enable-threads=posix --enable-nls > --program-suffix=-4.1 --enable-__cxa_atexit --enable-clocale=gnu > --enable-libstdcxx-debug --enable-mpfr --enable-checking=release > i486-linux-gnu > Thread model: posix > gcc version 4.1.2 20060928 (prerelease) (Ubuntu 4.1.1-13ubuntu5) > > > > I am currently using these g++ options: > > CFLAGS = -o3 -O3 -march=pentium4 -ffast-math -funroll-loops -Wall > -Wno-return-type > > But I have tried every permutation of the above options to virtually no > effect > > The average run time of an epoch in windows is about 3000 milliseconds while > the average run time of an epoch in Linux is 6000! > > I don't know if it matters but I am doing calls to the rand() function in > both my windows and linux apps. It might matter, yes. I suspect that the right approach is to do some profiling. Make sure oprofile is installed, then sudo opcontrol --init sudo opcontrol --start <do your thing> sudo opcontrol --stop opreport -l Let us know how you get along. You might be surprised where the time goes. Andrew.