int main( int argc , char* argv[] ) { bool resample = true; #if 0 unsigned int control_word_x87 , control_word_sse2; __control87_2( _DN_FLUSH , _MCW_DN , &control_word_x87 , &control_word_sse2 ); #endif cmdLineParse( argc-1 , &argv[1] , sizeof(params) / sizeof(cmdLineReadable*) , params , 0 ); char valueString[1024]; for( int i=0 ; i<sizeof(params) / sizeof(cmdLineReadable*) ; i++ ) if( params[i]->set ) { params[i]->writeValue( valueString ); printf( "\t--%s %s\n" , params[i]->name , valueString ); } if( !In.set || !Out.set ) { ShowUsage(argv[0]); return EXIT_FAILURE; } char tmpDir[1024]; if( TempDir.set) sprintf( tmpDir , "TMP=%s" , TempDir.value ); else sprintf( tmpDir , "TMP=" ); _putenv( tmpDir ); int w , h; GetReadSize< float >( In.value , w , h ); int height = 1; while( 2*height<w || height<h ) height <<= 1; if( 2*height==w && height==h ) resample = false; if( resample ) printf( "%d x %d -> %d x %d\n" , w , h , 2*height , height ); IWeight.value = -IWeight.value; IWeight.value *= height / 2; IWeight.value *= (height*2) / 2; IWeight.value /= 4. * M_PI; double t = Time( ); if( HighPrecision.set ) if( HDRLabels.set ) Execute< double , double , __int16 >( height , resample ); else Execute< double , double , unsigned char >( height , resample ); else if( HDRLabels.set ) Execute< float , half , __int16 >( height , resample ); else Execute< float , half , unsigned char >( height , resample ); size_t current,peak; WorkingSetInfo( current , peak ); printf( "Running Time: %f\n" , Time()-t ); printf( "Peak working set: %d MB\n" , peak>>20 ); return EXIT_SUCCESS; }
int Execute( void ) { IOServer::Load(); if( Verbose.set ) PrintHostAddresses(); #if MISHA_CODE_CLEAN_UP double t=Time(); if( ShortSync.set ) SocketedMultigridServer< PixelChannels , 3 , half , LType > server ( Prefix.value , Port.value , Count.value , Iters.value , InCoreRes.value , MinMGRes.value , VCycles.value , MinBandSize.value , TileWidth.value , TileHeight.value , TileExtension.set ? TileExtension.value : NULL , GammaCorrection.set , Quality.value , Lanes.value , Verbose.set , Spherical.set ? SPHERICAL_PERIODIC : (Cylindrical.set ? CYLINDRICAL_PERIODIC : NO_PERIODIC ) , IWeight.value , Lump.set , GWeight.value , GScale.value , Deramp.set , UnknownType.value , Progress.set , NoConjugateGradient.set , ShortSync.set ); else SocketedMultigridServer< PixelChannels , 3 , float , LType > server ( Prefix.value , Port.value , Count.value , Iters.value , InCoreRes.value , MinMGRes.value , VCycles.value , MinBandSize.value , TileWidth.value , TileHeight.value , TileExtension.set ? TileExtension.value : NULL , GammaCorrection.set , Quality.value , Lanes.value , Verbose.set , Spherical.set ? SPHERICAL_PERIODIC : (Cylindrical.set ? CYLINDRICAL_PERIODIC : NO_PERIODIC ) , IWeight.value , Lump.set , GWeight.value , GScale.value , Deramp.set , UnknownType.value , Progress.set , NoConjugateGradient.set , ShortSync.set ); #else // !MISHA_CODE_CLEAN_UP SocketedSuperMultigridServer server; if( !server.SetUp( Prefix.value , Port.value , Count.value , Iters.value , InCoreRes.value , MinMGRes.value , VCycles.value , MinBandSize.value , TileWidth.value , TileHeight.value , TileExtension.set ? TileExtension.value : NULL , GammaCorrection.set , Quality.value , Lanes.value , Verbose.set , Spherical.set ? SPHERICAL_PERIODIC : (Cylindrical.set ? CYLINDRICAL_PERIODIC : NO_PERIODIC ) , IWeight.value , Lump.set , GWeight.value , GScale.value , Deramp.set , UnknownType.value , Progress.set , NoConjugateGradient.set , ShortSync.set ) ) fprintf( stderr , "SocketedSuperMultigridServer::SetUp failed\n" ); double t=Time(); if( ShortSync.set ) server.Run< PixelChannels , 3 , half , LType >(); else server.Run< PixelChannels , 3 , float , LType >(); #endif // MISHA_CODE_CLEAN_UP size_t current , peak; WorkingSetInfo( current , peak ); if( Verbose.set ) { printf( " Running Time: %f\n",Time()-t) , fflush( stdout ); printf( "Peak working set: %llu MB\n" , (unsigned long long)(peak>>20) ) , fflush( stdout ); }