Esempio n. 1
0
	/**
	 * handle reinvade message from server and return true if anything has to be changed
	 */
	bool handleReinvadeNonblocking()
	{
		if (shutdown_in_progress)
			return false;

		if (verbose_level > 3)
			std::cout << this_pid << ": CHANGING RESOURCES (NONBLOCKING)" << std::endl;

		assert(sPMOMessage->data.invade_answer.number_of_cores > 0);

		// update number of threads
		setNumberOfThreads(sPMOMessage->data.invade_answer.number_of_cores);

		// update the affinities
		setAffinities(sPMOMessage->data.invade_answer.affinity_array, sPMOMessage->data.invade_answer.number_of_cores);

		// send update to server
		sPMOMessage->package_type = SPMOMessage::CLIENT_REINVADE_ACK_NONBLOCKING;

		cMessageQueue->sendToServer(
				(size_t)&(sPMOMessage->data.reinvade_ack_async) - (size_t)sPMOMessage +
				sizeof(sPMOMessage->data.reinvade_ack_async) +
				sizeof(int)*(sPMOMessage->data.reinvade_ack_async.number_of_cores-1)
			);

		return true;
	}
Esempio n. 2
0
void Settings::copyFrom(Settings *other)
{
    setDefaultFullScore(other->getDefaultFullScore());
    setDefaultTimeLimit(other->getDefaultTimeLimit());
    setDefaultMemoryLimit(other->getDefaultMemoryLimit());
    setCompileTimeLimit(other->getCompileTimeLimit());
    setSpecialJudgeTimeLimit(other->getSpecialJudgeTimeLimit());
    setFileSizeLimit(other->getFileSizeLimit());
    setNumberOfThreads(other->getNumberOfThreads());
    setDefaultInputFileExtension(other->getDefaultInputFileExtension());
    setDefaultOutputFileExtension(other->getDefaultOutputFileExtension());
    setInputFileExtensions(other->getInputFileExtensions().join(";"));
    setOutputFileExtensions(other->getOutputFileExtensions().join(";"));
    
    for (int i = 0; i < compilerList.size(); i ++) {
        delete compilerList[i];
    }
    compilerList.clear();
    const QList<Compiler*> &list = other->getCompilerList();
    for (int i = 0; i < list.size(); i ++) {
        Compiler *compiler = new Compiler;
        compiler->copyFrom(list[i]);
        addCompiler(compiler);
    }
}
Esempio n. 3
0
	/**
	 * handle invade message from server and return true if anything has to be changed
	 */
	bool handleInvadeAnswer()
	{
		if (shutdown_in_progress)
			return false;

		// nothing to do if nothing was changed!
		if (!sPMOMessage->data.invade_answer.anythingChanged)
			return false;

		if (verbose_level > 3)
			std::cout << this_pid << ": CHANGING RESOURCES" << std::endl;

		assert(sPMOMessage->data.invade_answer.number_of_cores > 0);

//		std::cout << "HANDLE INVADE ANSWER: setNumberOfThreads" << std::endl;
		// update number of threads
		setNumberOfThreads(sPMOMessage->data.invade_answer.number_of_cores);

		// update the affinities
//		std::cout << "HANDLE INVADE ANSWER: setAffinities" << std::endl;
		setAffinities(sPMOMessage->data.invade_answer.affinity_array, sPMOMessage->data.invade_answer.number_of_cores);

//		std::cout << "HANDLE INVADE ANSWER: END" << std::endl;
		return true;
	}
Esempio n. 4
0
void Workers::pauseAllThreadsAndWait ()
{
    setNumberOfThreads (0);

    m_allPaused.wait ();

    bassert (numberOfCurrentlyRunningTasks () == 0);
}
Esempio n. 5
0
Workers::Workers (Callback& callback, String const& threadNames, int numberOfThreads)
    : m_callback (callback)
    , m_threadNames (threadNames)
    , m_allPaused (true, true)
    , m_semaphore (0)
    , m_numberOfThreads (0)
{
    setNumberOfThreads (numberOfThreads);
}
//*************************************************************************************************
// Constructor with original image chain provided. This source becomes the first clone in the list.
//*************************************************************************************************
ossimImageChainMtAdaptor::ossimImageChainMtAdaptor(ossimImageChain* original,
                                                   ossim_uint32 num_threads_req)
:  m_numThreads (0),
   d_useSharedHandlers(true),
   d_debugEnabled(false)
{
   //###### DEBUG ############
   ossimMtDebug* mt_debug = ossimMtDebug::instance();
   d_useSharedHandlers = mt_debug->chainSharedHandlers;
   d_debugEnabled = mt_debug->chainDebugEnabled;
   //###### END DEBUG ############

   setNumberOfThreads(num_threads_req); 
   setOriginalChain(original); 
}
Esempio n. 7
0
	/**
	 * constructor
	 */
	CPMO_OMP(
			int i_max_threads = -1,
			bool i_delayed_parallel_region_mode = false,
			bool i_wait_for_ack = true	///< specifies for how many mpi nodes to wait
										///< before starting execution in case that MPI is activated
	) :
		CPMO(0, i_wait_for_ack),
		delayed_parallel_region_mode(i_delayed_parallel_region_mode)
	{
		if (i_max_threads <= 0)
			max_threads = omp_get_max_threads();
		else
			max_threads = i_max_threads;

		setNumberOfThreads(1);
	}
Esempio n. 8
0
	/**
	 * handle message
	 *
	 * return true if the resources were changed
	 */
	bool msg_recv_message_innerloop()
	{
		switch(sPMOMessage->package_type)
		{
			case SPMOMessage::SERVER_QUIT:
//				std::cout << this_pid << ": Processing message type SERVER_QUIT" << std::endl;
				std::cerr << "QUIT requested from server" << std::endl;
				exit(-1);
				return false;

			case SPMOMessage::CLIENT_ACK_SHUTDOWN:
//				std::cout << this_pid << ": Processing message type CLIENT_ACK_SHUTDOWN" << std::endl;
				if (sPMOMessage->data.ack_quit.seq_id <= last_seq_id)
					std::cerr << "SEQ ID wrong " << sPMOMessage->data.ack_quit.seq_id << " <= " << last_seq_id << std::endl;

				assert(sPMOMessage->data.ack_quit.seq_id > last_seq_id);
				last_seq_id = sPMOMessage->data.ack_quit.seq_id;

				// update client shutdown hint
				std::cout << "SUM CLIENT SHUTDOWN HINT: " << sPMOMessage->data.ack_quit.client_shutdown_hint << std::endl;
				std::cout << "SUM CLIENT SHUTDOWN HINT DIV TIME: " << sPMOMessage->data.ack_quit.client_shutdown_hint_div_time << std::endl;
				return false;

			case SPMOMessage::SERVER_INVADE_ANSWER:
//				std::cout << this_pid << ": Processing message type SERVER_INVADE_ANSWER" << std::endl;
				if (sPMOMessage->data.invade_answer.seq_id <= last_seq_id)
					std::cerr << "SEQ ID wrong " << sPMOMessage->data.invade_answer.seq_id << " <= " << last_seq_id << std::endl;

				assert(sPMOMessage->data.invade_answer.seq_id > last_seq_id);
				last_seq_id = sPMOMessage->data.invade_answer.seq_id;

				return handleInvadeAnswer();

			case SPMOMessage::SERVER_REINVADE_NONBLOCKING:
//				std::cout << this_pid << ": Processing message type SERVER_REINVADE_NONBLOCKING" << std::endl;
				if (sPMOMessage->data.invade.seq_id <= last_seq_id)
					std::cerr << "SEQ ID wrong " << sPMOMessage->data.invade.seq_id << " <= " << last_seq_id << std::endl;

				assert(sPMOMessage->data.invade.seq_id > last_seq_id);
				last_seq_id = sPMOMessage->data.invade_answer.seq_id;

				if (retreat_in_progress)
					return false;

				return handleReinvadeNonblocking();

			case SPMOMessage::SERVER_ACK:
//				std::cout << this_pid << ": Processing message type SERVER_ACK" << std::endl;
				if (sPMOMessage->data.ack.seq_id <= last_seq_id)
					std::cerr << "SEQ ID wrong " << sPMOMessage->data.ack.seq_id << " <= " << last_seq_id << std::endl;

				assert(sPMOMessage->data.ack.seq_id > last_seq_id);
				last_seq_id = sPMOMessage->data.ack.seq_id;

				if (getNumberOfThreads() == 0)
					setNumberOfThreads(1);

				return false;

			default:
				std::cerr << "UNKNOWN MESSAGE TYPE " << sPMOMessage->package_type << std::endl;
				assert(false);
				exit(-1);
				return false;
		}
	}