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;
}
Example #2
0
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 );
	}