Exemple #1
0
co::ConnectionPtr _startLocalServer()
{
    Strings dirNames;
    dirNames.push_back( "" );
    dirNames.push_back( "./" );
// Add path of current .so so search paths for EqualizerServer    
#ifndef _WIN32
    Dl_info dl_info;
    dladdr((void *)_startLocalServer, &dl_info);
    
    char libPath[1024];
    strncpy(libPath, dl_info.dli_fname, 1024);
    char* k = strrchr(libPath, '/');
    *(k + 1) = '\0';
    dirNames.push_back( libPath );
#endif
#ifdef EQ_BUILD_DIR
#ifdef NDEBUG
    dirNames.push_back( std::string( EQ_BUILD_DIR ) + "libs/server/Release/" );
#else
    dirNames.push_back( std::string( EQ_BUILD_DIR ) + "libs/server/Debug/" );
#endif
    dirNames.push_back( std::string( EQ_BUILD_DIR ) + "libs/server/" );
#endif

#ifdef _MSC_VER
    const std::string libName = "EqualizerServer.dll";
#elif defined (_WIN32)
    const std::string libName = "libEqualizerServer.dll";
#elif defined (Darwin)
    const std::string libName = "libEqualizerServer.dylib";
#else
    const std::string libName = "libEqualizerServer.so";
#endif

    while( !_libeqserver.isOpen() && !dirNames.empty( ))
    {
        _libeqserver.open( dirNames.back() + libName );
        dirNames.pop_back();
    }

    if( !_libeqserver.isOpen( ))
    {
        EQWARN << "Can't open Equalizer server library" << std::endl;
        return 0;
    }

    eqsStartLocalServer_t eqsStartLocalServer = (eqsStartLocalServer_t)
        _libeqserver.getFunctionPointer( "eqsStartLocalServer" );

    if( !eqsStartLocalServer )
    {
        EQWARN << "Can't find server entry function eqsStartLocalServer"
               << std::endl;
        return 0;
    }

    return eqsStartLocalServer( Global::getConfigFile( ));
}
Exemple #2
0
co::ConnectionPtr _startLocalServer()
{
    Strings dirNames;
    dirNames.push_back( "" );

#ifdef EQ_BUILD_DIR
#ifdef NDEBUG
    dirNames.push_back( std::string( EQ_BUILD_DIR ) + "lib/Release/" );
#else
    dirNames.push_back( std::string( EQ_BUILD_DIR ) + "lib/Debug/" );
#endif
    dirNames.push_back( std::string( EQ_BUILD_DIR ) + "lib/" );
#endif

#ifdef _MSC_VER
    const std::string libName = "EqualizerServer.dll";
#elif defined (_WIN32)
    const std::string libName = "libEqualizerServer.dll";
#elif defined (Darwin)
    const std::string libName = "libEqualizerServer.dylib";
#else
    const std::string libName = "libEqualizerServer.so";
#endif

    while( !_libeqserver.isOpen() && !dirNames.empty( ))
    {
        _libeqserver.open( dirNames.back() + libName );
        dirNames.pop_back();
    }

    if( !_libeqserver.isOpen( ))
    {
        LBWARN << "Can't open Equalizer server library" << std::endl;
        return 0;
    }

    eqsStartLocalServer_t eqsStartLocalServer = (eqsStartLocalServer_t)
        _libeqserver.getFunctionPointer( "eqsStartLocalServer" );

    if( !eqsStartLocalServer )
    {
        LBWARN << "Can't find server entry function eqsStartLocalServer"
               << std::endl;
        return 0;
    }

    return eqsStartLocalServer( Global::getConfigFile( ));
}
Exemple #3
0
int main(int argc, char ** argv)
{
	using Strings = std::vector<std::string>;
	using Hashes = std::vector<char>;
	Strings strings;
	size_t rows = 0;
	size_t bytes = 0;

	{
		Stopwatch watch;

		DB::ReadBufferFromFileDescriptor in(STDIN_FILENO);

		while (!in.eof())
		{
			strings.push_back(std::string());
			DB::readEscapedString(strings.back(), in);
			DB::assertChar('\n', in);
			bytes += strings.back().size() + 1;
		}

		watch.stop();
		rows = strings.size();
		std::cerr << std::fixed << std::setprecision(2)
			<< "Read " << rows << " rows, " << bytes / 1000000.0 << " MB"
			<< ", elapsed: " << watch.elapsedSeconds()
			<< " (" << rows / watch.elapsedSeconds() << " rows/sec., " << bytes / 1000000.0 / watch.elapsedSeconds() << " MB/sec.)"
			<< std::endl;
	}

	Hashes hashes(16 * rows);

	{
		Stopwatch watch;

		for (size_t i = 0; i < rows; ++i)
		{
			*reinterpret_cast<UInt64*>(&hashes[i * 16]) = CityHash64(strings[i].data(), strings[i].size());
		}

		watch.stop();

		UInt64 check = CityHash64(&hashes[0], hashes.size());

		std::cerr << std::fixed << std::setprecision(2)
			<< "CityHash64 (check = " << check << ")"
			<< ", elapsed: " << watch.elapsedSeconds()
			<< " (" << rows / watch.elapsedSeconds() << " rows/sec., " << bytes / 1000000.0 / watch.elapsedSeconds() << " MB/sec.)"
			<< std::endl;
	}
	
/*	{
		Stopwatch watch;

		std::vector<char> seed(16);

		for (size_t i = 0; i < rows; ++i)
		{
			sipHash(
				reinterpret_cast<unsigned char *>(&hashes[i * 16]),
				reinterpret_cast<const unsigned char *>(strings[i].data()),
				strings[i].size(),
				reinterpret_cast<const unsigned char *>(&seed[0]));
		}

		watch.stop();

		UInt64 check = CityHash64(&hashes[0], hashes.size());

		std::cerr << std::fixed << std::setprecision(2)
			<< "SipHash (check = " << check << ")"
			<< ", elapsed: " << watch.elapsedSeconds()
			<< " (" << rows / watch.elapsedSeconds() << " rows/sec., " << bytes / 1000000.0 / watch.elapsedSeconds() << " MB/sec.)"
			<< std::endl;
	}*/

	{
		Stopwatch watch;

		for (size_t i = 0; i < rows; ++i)
		{
			SipHash hash;
			hash.update(strings[i].data(), strings[i].size());
			hash.get128(&hashes[i * 16]);
		}

		watch.stop();

		UInt64 check = CityHash64(&hashes[0], hashes.size());

		std::cerr << std::fixed << std::setprecision(2)
			<< "SipHash, stream (check = " << check << ")"
			<< ", elapsed: " << watch.elapsedSeconds()
			<< " (" << rows / watch.elapsedSeconds() << " rows/sec., " << bytes / 1000000.0 / watch.elapsedSeconds() << " MB/sec.)"
			<< std::endl;
	}

	{
		Stopwatch watch;

		for (size_t i = 0; i < rows; ++i)
		{
			MD5_CTX state;
			MD5_Init(&state);
			MD5_Update(&state, reinterpret_cast<const unsigned char *>(strings[i].data()), strings[i].size());
			MD5_Final(reinterpret_cast<unsigned char *>(&hashes[i * 16]), &state);
		}

		watch.stop();

		UInt64 check = CityHash64(&hashes[0], hashes.size());

		std::cerr << std::fixed << std::setprecision(2)
			<< "MD5 (check = " << check << ")"
			<< ", elapsed: " << watch.elapsedSeconds()
			<< " (" << rows / watch.elapsedSeconds() << " rows/sec., " << bytes / 1000000.0 / watch.elapsedSeconds() << " MB/sec.)"
			<< std::endl;
	}

	return 0;
}