Ejemplo n.º 1
0
// EXCEPTIONS: CProcessFailure
// TO DO:	clean up error reporting
//			use dialog to say we're busy and give a cancel button
void CToneGenProcess::processANAFile(CProcessStatus& status)
{
  LPCTSTR kOutputExt = ".txz";
  LPCTSTR kLogExt = ".tgp";
  LPCTSTR kCMDExt = ".cmt";

  try
	{
	  ASSERTX(status.getOutputLang());
	  CString sBase = status.getInputMFS()->getAbrev() + status.getOutputMFS()->getAbrev() + "-tgen";
	  m_sOutputTextPath = status.makeTempPath(status.sANAPath.getFileName(), kOutputExt);
	  m_sLOGPath = status.makeTempPath(sBase,	".log" );

	  m_sCMDPath =status.makeTempPath(sBase, ".cmd");

	  outputSupportFiles(status);

	  m_sOutputTextPath.deleteFile();	// don't care if it is found or not
	  m_sLOGPath.deleteFile();	// don't care if it is found or not

	  if(!executeTool(status))
	{
	  throw(CProcessFailure(this, "Unknown execution problem"));
	}
	  waitForCompletion(&status, &m_sLOGPath, &m_sOutputTextPath);


	  // register ana output so the user can view it
	  CString sLabel(status.getOutputMFS()->getAbrev());
	  sLabel += " Text";
	  CResultStreamFile* textStream =
	new CResultStreamFile(
			   new CResultStreamDescriptor(this,
					   "Synthesized Text",
					   "Target text synthesized by ToneGen (ToneGen synthesis)",
					   sLabel // language specific
					   ),
		   m_sOutputTextPath.getFullPath(),
		   status.getOutputLang());
	  status.registerResultStream(textStream);


	  registerLog(status, m_sLOGPath, status.getOutputLang());
	  status.sRAWPath = m_sOutputTextPath;
	}
  catch(CProcessFailure failure)
	{
	  registerLog(status, m_sLOGPath);
	  throw(failure);
	}
  catch(CString sError)
	{
	  registerLog(status, m_sLOGPath);
	  throw(CProcessFailure(this, sError));
	}
}
Ejemplo n.º 2
0
void matrixReadFromFile(char *fileName, Matrix *matrixToLoad, int sizeMatrix, int myid, agoLogStr *agoLog)
{
  FILE *fdIn;

  if ((fdIn = fopen(fileName, "r")) == NULL) {
    snprintf(agoLog->logMsg, LOG_SIZE, "Erro ao tentar carregar Matriz do Arquivo %s", fileName);
    registerLog(agoLog, myid);
  } else {
    if ((fread(matrixToLoad, sizeof(double), sizeMatrix, fdIn)) == 0) {
      snprintf(agoLog->logMsg, LOG_SIZE, "Erro ao Carregar Matriz do Arquivo %s", fileName);
      registerLog(agoLog, myid);
    } else {
      snprintf(agoLog->logMsg, LOG_SIZE, "Carregado Matriz do Arquivo %s", fileName);
      registerLog(agoLog, myid);
    }
  }

  fclose(fdIn);
}
Ejemplo n.º 3
0
void pagamentoThread::run()
{
	
	qsrand(time(NULL));
	
	QThread::msleep(UNIDTEMPO * (qrand()%2) + 1);
	
	emit registerLog("O cliente " + c->getNomeID() + " efetuou o pagameno e saiu da loja");	
	emit finalizouPagamento(cx);
	
	delete c;
}
Ejemplo n.º 4
0
double matrixMultiplyParallel(Matrix *matrixChunkA, Matrix *matrixChunkB, Matrix *matrixC, int idPackage, int offSetA, int offSetB,
                              int chunkToCalc, int id, agoLogStr *agoLog)
{
  int i = 0, j = 0, k = 0;
  double d_multiplyTime = 0.0;

  snprintf(agoLog->logMsg, LOG_SIZE, "Multiplicando pacote id %d: OffSetA %d OffSetB %d", idPackage, offSetA, offSetB);
  registerLog(agoLog, id);

  for (k = 0; k < chunkToCalc; k++) {
    for (i = 0; i < chunkToCalc; i++) {
      for (j = 0; j < MAX_MATRIX_SIZE; j++) {
        matrixC[i][k] = matrixC[i][k] + (matrixChunkA[i][j] * matrixChunkB[i][j]);
      }
    }
  }

  snprintf(agoLog->logMsg, LOG_SIZE, "Multiplicao Concluida pacote id %d: OffSetA %d OffSetB %d", idPackage, offSetA, offSetB);
  registerLog(agoLog, id);

  return(d_multiplyTime);
}
Ejemplo n.º 5
0
void agoSendRepeatToWorker(unsigned int *ui_workerList, int numWorkers, agoLogStr *agoLog)
{

  int i_signalFlag = FLAG_FAIL, i_workerId = 2;

  while (i_workerId < numWorkers) {
    MPI_Send(&i_signalFlag, 1, MPI_INT, ui_workerList[i_workerId], TAG_INFO, MPI_COMM_WORLD);

    (void) snprintf(agoLog->logMsg, LOG_SIZE, "(FT) - Enviado Repeat para Worker ID: %d", ui_workerList[i_workerId]);
    registerLog(agoLog,  i_myidWorker);

    i_workerId++;
  }
}
Ejemplo n.º 6
0
void pedidoThread::run()
{
	int qtdCompra;
	int idprod;
	int tot;
	int qtd;
	
	logMessageCompra* lc = new logMessageCompra();
	
	qsrand(time(NULL));
	
	QThread::msleep(UNIDTEMPO * (qrand()%2 + 1));
	
	idprod = p->getID();
	
	pD = (int*)dsm.data();
	dR = (int*)rsm.data();
	pT = (int*)qsm.data();
	pN = (int*)nsm.data();

	dsm.lock();
		qsm.lock();

			tot = pT[idprod];
			nsm.lock();
				qtd = pN[idprod];
			nsm.unlock();

		qsm.unlock();

		if(qtd == 0)qtd = 1;
		qtdCompra = ((tot*1.0)/(qtd*1.0))*1.2 + 0.5;
	
		rsm.lock();
		dR[idprod] = 0;
		rsm.unlock();
	
		pD[idprod]+= qtdCompra;
	dsm.unlock();

	emit registerLog("Comprados " + QString::number(qtdCompra) + " para o produto " + QString::number(idprod));
	
	lc->setProdutoComprado(idprod, qtdCompra);
	
	emit registerLogCompra(lc);
	emit finalizouPedido(e);

	delete p;
}
Ejemplo n.º 7
0
// EXCEPTIONS: CProcessFailure
// TO DO:	clean up error reporting
//			use dialog to say we're busy and give a cancel button
void CToneParseProcess::processANAFile(CProcessStatus& status)
{
  try
	{
	  CString sBase = status.m_sFileNameRoot +"-tpars";
	  m_sOutputANAPath = status.makeTempPath(sBase,".ana");
	  m_sLOGPath = status.makeTempPath(sBase,	".log" );


	  m_sCMDPath =status.makeTempPath(sBase, ".cmd");

	  outputSupportFiles(status);

	  m_sOutputANAPath.deleteFile();	// don't care if it is found or not
	  m_sLOGPath.deleteFile();	// don't care if it is found or not

	  if(!executeTool(status))
	{
	  throw(CProcessFailure(this, "Failed to process the file with ToneParse"));
	}

	  waitForCompletion(&status, &m_sOutputANAPath);

	  // register itx output so the user can view it
	  CResultStreamFile* anaStream =
	new CResultStreamFile(
				  new CResultStreamDescriptor(this,
							  "TPARS ANA", //short description
							  "ANA Output of ToneParse", // long description
							  "TPARS ANA" // tab label
							  ),
				  m_sOutputANAPath,
				  status.getInputLang());

	  status.registerResultStream(anaStream);
	  registerLog(status, m_sLOGPath, status.getInputLang());

	  status.sANAPath = m_sOutputANAPath;
	}
  catch(CString sError)
	{
	  throw(CProcessFailure(this, sError));
	}
}
Ejemplo n.º 8
0
// EXCEPTIONS: CProcessFailure
// TO DO:	clean up error reporting
//			use dialog to say we're busy and give a cancel button
void CPrintANAProcess::processANAFile(CProcessStatus& status)
{
    try
    {
        CString sBase = status.m_sFileNameRoot +_T("-prtana");
        m_sLOGPath = status.makeTempPath(sBase,	_T(".log") );

        m_sLOGPath.deleteFile();	// don't care if it is found or not

        if(!executeTool(status))
        {
            throw(CProcessFailure(this, _T("Failed to process the file with PrintANA")));
        }

        waitForCompletion(&status, &m_sLOGPath);
        registerLog(status, m_sLOGPath, status.getInputLang());
    }
    catch(CString sError)
    {
        throw(CProcessFailure(this, sError));
    }
}
// EXCEPTIONS: CProcessFailure
void CPCPATRDllProcess::processANAFile(CProcessStatus& status)
{
  CModelFilesSet* pSourceMFS = status.getInputMFS();
  ASSERTX(pSourceMFS);
  CModelFilesSet* pTargetMFS = status.getOutputMFS(); // may be null

  try
	{
	  IPatrParser *pPatr;
	  CLSID clsid;
	  HRESULT hr;

#ifndef hab245
	  CString sBase;
	  sBase.Format(_T("%s%d"), (LPCTSTR)getTempFileNameBase(status), status.m_iProcNumber);
#else // hab245
	  CString sBase = getTempFileNameBase(status);
#endif // hab245
	  m_sOutPath = status.makeTempPath(sBase,	_T(".ana") );
	  m_sLOGPath = status.makeTempPath(sBase,	_T(".log") );

	  m_sInPath = status.sANAPath;
	  m_sOutPath.deleteFile();
	  m_sLOGPath.deleteFile();

	  hr = CoInitialize(NULL);
#ifndef hab245
	  checkResults(hr, _T("coinitialize"), (IPatrParser *)NULL);
	  hr = CLSIDFromProgID(L"SIL.CARLA.PatrParser.1", &clsid);
	  checkResults(hr, _T("get CLSID"), (IPatrParser *)NULL);
	  hr = CoCreateInstance(clsid, NULL, CLSCTX_ALL,
				IID_IPatrParser, (void **) &pPatr);
	  checkResults(hr, _T("do CoCreateInstance"), (IPatrParser *)NULL);
	  CString s = m_sLOGPath.getQuotedPath();
	  CString sLogFile = s.Mid(1, s.GetLength()-2);
	  hr = pPatr->OpenLog(sLogFile.AllocSysString());
	  checkResults(hr, _T("set log file"), (IPatrParser *)NULL);
	  hr = pPatr->Clear();
	  checkResults(hr, _T("clear"), pPatr);
	  hr = pPatr->put_CommentChar(status.getInputMFS()->getCommentChar());
	  checkResults(hr, _T("set comment character"), pPatr);
	  hr = pPatr->put_AmplePropertyIsFeature(m_bAmplePropertyIsFeature);
	  checkResults(hr, _T("set AmplePropertyIsFeature"), pPatr);
	  hr = pPatr->put_PromoteDefaultAtoms(m_bPromoteDefaultAtomicValues);
	  checkResults(hr, _T("set PromoteDefaultAtoms"), pPatr);
	  hr = pPatr->put_Failures(m_bShowFailures);
	  checkResults(hr, _T("set Failures"), pPatr);
	  hr = pPatr->put_DisplayFeatures(m_bDisplayFeatures);
	  checkResults(hr, _T("set DisplayFeatures"), pPatr);
	  hr = pPatr->put_TopFeatureOnly(!m_bAllFeatures);
	  checkResults(hr, _T("set TopFeatureOnly"), pPatr);
	  hr = pPatr->put_Gloss(m_bDisplayGloss);
	  checkResults(hr, _T("set Gloss"), pPatr);
	  hr = pPatr->put_TrimEmptyFeatures(m_bTrimEmptyFeatures);
	  checkResults(hr, _T("set TrimEmptyFeatures"), pPatr);
	  hr = pPatr->put_Unification(m_bPerformUnification);
	  checkResults(hr, _T("set Unification"), pPatr);
	  hr = pPatr->put_WriteAmpleParses(m_bWriteAmpleParses);
	  checkResults(hr, _T("set WriteAmpleParses"), pPatr);
	  hr = pPatr->put_MaxAmbiguity(m_uiMaxAmbiguities);
	  checkResults(hr, _T("set MaxAmbiguity"), pPatr);
#ifndef rde273
	  hr = pPatr->put_CodePage(GetCSAcp());
#endif  // rde273
	  hr = pPatr->put_SentenceFinalPunctuation(
				 m_sSentenceFinalPunctuation.AllocSysString());
	  checkResults(hr, _T("set SentenceFinalPunctuation"), pPatr);
	  hr = pPatr->put_TimeLimit(m_uiTimeLimit);
	  checkResults(hr, _T("set TimeLimit"), pPatr);
	  hr = pPatr->put_TreeDisplay(m_iTreeDisplayFormat);
	  checkResults(hr, _T("set TreeDisplay"), pPatr);
	  hr = pPatr->put_FlatFeatureDisplay(m_bFlatFeatureDisplay);
	  checkResults(hr, _T("set FlatFeatureDisplay"), pPatr);

#ifndef hab262
	  if (m_iRootGlossSetting > 0)
	m_iRootGlossSetting++;	// need to adjust value to get correct setting
	  hr = pPatr->put_RootGlossFeature(m_iRootGlossSetting);
	  if (m_iRootGlossSetting > 0)
	m_iRootGlossSetting--;	// adjust the value back
	  checkResults(hr, _T("set RootGlossFeature"), pPatr);
#endif // hab262
	  hr = pPatr->LoadGrammarFile(m_sGrammarFileName.AllocSysString());
	  checkResults(hr, _T("load grammar file.\nSee Log File."), pPatr);
	  s = m_sOutPath.getQuotedPath();;
	  CString sOutFile = s.Mid(1, s.GetLength()-2);
	  hr = pPatr->DisambiguateAnaFile(m_sInPath.getShortPath().AllocSysString(),
					  sOutFile.AllocSysString());
	  checkResults(hr, _T("disambiguate ANA file"), pPatr);
	  hr = pPatr->CloseLog();
	  checkResults(hr, _T("close log file"), pPatr);
#else // hab245

	  checkResults(hr, _T("coinitialize"));
	  hr = CLSIDFromProgID(L"SIL.CARLA.PatrParser.1", &clsid);
	  checkResults(hr, "get CLSID");
	  hr = CoCreateInstance(clsid, NULL, CLSCTX_ALL,
				IID_IPatrParser, (void **) &pPatr);
	  checkResults(hr, "do CoCreateInstance");
	  hr = pPatr->Clear();
	  checkResults(hr, "clear");
	  hr = pPatr->put_CommentChar(status.getInputMFS()->getCommentChar());
	  checkResults(hr, "set comment character");
	  hr = pPatr->put_AmplePropertyIsFeature(m_bAmplePropertyIsFeature);
	  checkResults(hr, "set AmplePropertyIsFeature");
	  hr = pPatr->put_PromoteDefaultAtoms(m_bPromoteDefaultAtomicValues);
	  checkResults(hr, "set PromoteDefaultAtoms");
	  hr = pPatr->put_Failures(m_bShowFailures);
	  checkResults(hr, "set Failures");
	  hr = pPatr->put_DisplayFeatures(m_bDisplayFeatures);
	  checkResults(hr, "set DisplayFeatures");
	  hr = pPatr->put_TopFeatureOnly(!m_bAllFeatures);
	  checkResults(hr, "set TopFeatureOnly");
	  hr = pPatr->put_Gloss(m_bDisplayGloss);
	  checkResults(hr, "set Gloss");
	  hr = pPatr->put_TrimEmptyFeatures(m_bTrimEmptyFeatures);
	  checkResults(hr, "set TrimEmptyFeatures");
	  hr = pPatr->put_Unification(m_bPerformUnification);
	  checkResults(hr, "set Unification");
	  hr = pPatr->put_WriteAmpleParses(m_bWriteAmpleParses);
	  checkResults(hr, "set WriteAmpleParses");
	  hr = pPatr->put_MaxAmbiguity(m_uiMaxAmbiguities);
	  checkResults(hr, "set MaxAmbiguity");
	  hr = pPatr->put_SentenceFinalPunctuation(
				 m_sSentenceFinalPunctuation.AllocSysString());
	  checkResults(hr, "set SentenceFinalPunctuation");
	  hr = pPatr->put_TimeLimit(m_uiTimeLimit);
	  checkResults(hr, "set TimeLimit");
	  hr = pPatr->put_TreeDisplay(m_iTreeDisplayFormat);
	  checkResults(hr, "set TreeDisplay");
	  hr = pPatr->put_FlatFeatureDisplay(m_bFlatFeatureDisplay);
	  checkResults(hr, "set FlatFeatureDisplay");
	  hr = pPatr->LoadGrammarFile(m_sGrammarFileName.AllocSysString());
	  checkResults(hr, "load grammar file");
	  CString s = m_sLOGPath.getQuotedPath();
	  CString sLogFile = s.Mid(1, s.GetLength()-2);
	  hr = pPatr->OpenLog(sLogFile.AllocSysString());
	  checkResults(hr, "set log file");
	  s = m_sOutPath.getQuotedPath();;
	  CString sOutFile = s.Mid(1, s.GetLength()-2);
	  hr = pPatr->DisambiguateAnaFile(m_sInPath.getShortPath().AllocSysString(),
					  sOutFile.AllocSysString());
	  checkResults(hr, "disambiguate ANA file");
	  hr = pPatr->CloseLog();
	  checkResults(hr, "close log file");
#endif // hab245
	  pPatr->Release();
	  pPatr = NULL;
	  CoUninitialize();

	  waitForCompletion(&status, &m_sLOGPath, &m_sOutPath);

	  // register ana output so the user can view it
	  CString sShortDesc, sLongDesc, sTabLabel;
	  CCarlaLanguage *pOutANALang=NULL;
	  sShortDesc = "PC-PATR Disambiguated ANA";
	  sLongDesc = "ANA of the source-language file, after filtering through PC-PATR Syntactic Grammar rules.";
	  sTabLabel = "PATR-Disamb ANA";
	  pOutANALang = status.getInputLang();
	  CResultStreamFile* anaStream =
	new CResultStreamFile(
		  new CResultStreamDescriptor(this,
					  sShortDesc, //short description
					  sLongDesc, // long description
					  sTabLabel // tab label
					  ),
		  m_sOutPath.getFullPath(),
		  pOutANALang);
	  status.registerResultStream(anaStream);

	  registerLog(status, m_sLOGPath, status.getInputLang());
	  status.sANAPath = m_sOutPath;
	}
  catch(CProcessFailure failure)
	{
	  registerLog(status, m_sLOGPath);
	  throw(failure);
	}
  catch(CString sError)
	{
	  registerLog(status, m_sLOGPath);
	  throw(CProcessFailure(this, sError));
	}
}
Ejemplo n.º 10
0
// Funcao para Tolerar Falha do Mestre
int agoFaultToleranceWorker(agoDataPackageStr * agoDataPackageWorker, unsigned int *ui_workerList, int *listi_packageId,
                            int i_masterId, int numBlocks, double *d_workerTime, agoLogStr *agoLog)
{
  char c_fileName[32];
  int i_aux1 = 0, numPackageDone = 0, i_workerId = 1, i_signalFlag = 0, idFail = 0,
                                   i_packageId = 0, i_countPackageDone = 0, offSetidPackage = 0, i_numBlocksOrig = NUM_BLOCKS;
  unsigned int i_sync1 = 0, i_sync2 = 0;
  double faultTime = 0.0;

  (void) snprintf(agoLog->logMsg, LOG_SIZE, "(FT) - Iniciando Procedimento de Tolerancia a Falhas");
  registerLog(agoLog,  i_myidWorker);

  i_masterId = masterFail_ago_ft = 1;

#ifdef VERBOSE
  (void) snprintf(agoLog->logMsg, LOG_SIZE, "(agoFaultToleranceWorker) - Lista de Pacotes Processados neste Worker (Total %d) - (VERBOSE)",
                  QUANT_BLOCKS);
  registerLog(agoLog,  i_myidWorker);
#endif

  i_aux1 = 1;
  while (i_aux1 <= NUM_BLOCKS) {
    if (listi_packageId[i_aux1] > 0) {
      (void) snprintf(agoLog->logMsg, LOG_SIZE, "Pacote id %d (%d) foi processado neste Worker (%d)",
                      listi_packageId[i_aux1], i_aux1, i_myidWorker);
      registerLog(agoLog,  i_myidWorker);

      i_countPackageDone = i_countPackageDone + 1;
    }
    i_aux1++;
  }

  if (i_myidWorker == 1) { // Novo Mestre-Worker
    Matrix *d_matrixA, *d_matrixB, *d_matrixC;
    unsigned int timeSignal = 0;
    double d_countBlock = 0.0, da_workerTime[4] = {0, 0, 0, 0};

    (void) snprintf(agoLog->logMsg, LOG_SIZE, "(FT) - Assumindo a Tarefa do Master no Tempo %f", (MPI_Wtime() - *d_workerTime));
    registerLog(agoLog,  i_myidWorker);

    (void) snprintf(agoLog->logMsg, LOG_SIZE, "(FT) - Quantidade Workers: %d", (i_numprocsWorker - 2));
    registerLog(agoLog,  i_myidWorker);

    // Aloca Memoria para as Matrizes
    d_matrixA = (Matrix *) calloc ((MAX_MATRIX_SIZE * MAX_MATRIX_SIZE), sizeof(double));
    d_matrixB = (Matrix *) calloc ((MAX_MATRIX_SIZE * MAX_MATRIX_SIZE), sizeof(double));
    d_matrixC = (Matrix *) calloc ((MAX_MATRIX_SIZE * MAX_MATRIX_SIZE), sizeof(double));

    (void) snprintf(agoLog->logMsg, LOG_SIZE, "(FT) - Alocado Memoria para as Matrizes");
    registerLog(agoLog,  i_myidWorker);

#ifdef VERBOSE
    if ((d_matrixA == NULL) || (d_matrixB == NULL) || (d_matrixC == NULL)) {
      snprintf(agoLog->logMsg, LOG_SIZE, "(agoWorkerProcess) - Erro Alocando Mem. Matrizes (A, B, C) - VERBOSE");
      registerLog(agoLog,  i_myidWorker);
    }
#endif

    // Cria as Matrizes a serem Calculadas pelos Workers
    matrixLoad(d_matrixA, d_matrixB, (MAX_MATRIX_SIZE * MAX_MATRIX_SIZE), agoLog);
    registerLog(agoLog,  i_myidWorker);

#ifdef VERBOSE
    (void) snprintf(agoLog->logMsg, LOG_SIZE,
                    "(agoFaultToleranceWorker) - Lista de Pacotes Processados neste Worker (Total %d) - (VERBOSE)",
                    QUANT_BLOCKS);
    registerLog(agoLog,  i_myidWorker);
#endif

    i_workerId = 1;
    while (i_workerId < NUM_WORKERS) {
      workerStatus_ago_ft[i_workerId] = 1;
      i_workerId++;
    }

    // Inicia Contagem de Tempo do Worker-Master
    (void) snprintf(agoLog->logMsg, LOG_SIZE, "(FT) - Aqui comeca a Contar o Tempo do --> Novo Mestre (Worker) <--");
    registerLog(agoLog,  i_myidWorker);
    faultTime = MPI_Wtime();

    (void) snprintf(agoLog->logMsg, LOG_SIZE, "(FT) - Requisitando Informacoes dos Workers");
    registerLog(agoLog,  i_myidWorker);

    agoSendRepeatToWorker(ui_workerList, NUM_WORKERS, agoLog);

    (void) snprintf(agoLog->logMsg, LOG_SIZE, "(FT) - Aguardando Informacoes dos Workers");
    registerLog(agoLog,  i_myidWorker);

#ifdef VERBOSE
    (void) snprintf(agoLog->logMsg, LOG_SIZE, "(agoFaultToleranceWorker) - Recebendo Informacoes dos Workers - (VERBOSE)");
    registerLog(agoLog,  i_myidWorker);
#endif

    i_workerId = 2;
    while (i_workerId < i_numprocsWorker) {
      numPackageDone = (numPackageDone + agoRecvInfoFromWorker(i_workerId, agoLog));
      registerLog(agoLog,  i_myidWorker);
      i_workerId++;
    }

    (void) snprintf(agoLog->logMsg, LOG_SIZE, "(FT) - Workers informaram que %d Pacotes foram completados", numPackageDone);
    registerLog(agoLog,  i_myidWorker);

    (void) snprintf(agoLog->logMsg, LOG_SIZE, "(FT) - Aguardando Pacotes Processados nos Workers");
    registerLog(agoLog,  i_myidWorker);

    i_packageId = 1;
    while (i_packageId <= numPackageDone) {
      i_workerId = 2;
      while (i_workerId < i_numprocsWorker) {
        agoRecvDataFromWorkerFT(agoDataPackageWorker, d_matrixC, ui_workerList, i_workerId, i_myidWorker, agoLog);

        i_workerId++;
        i_packageId++;
        d_countBlock++;

        agoGetCount(&timeSignal, i_numBlocksOrig, d_countBlock, faultTime, da_workerTime, i_myidWorker, agoLog);
      }
    }

    offSetidPackage = ((numPackageDone + i_countPackageDone) + 1);
    numBlocks = ((numBlocks - numPackageDone) - i_countPackageDone);

    (void) snprintf(agoLog->logMsg, LOG_SIZE, "(FT) - Faltam %d Blocos a serem distribuidos/processados", numBlocks);
    registerLog(agoLog,  i_myidWorker);

    while (numBlocks) {
      // Sinaliza Inicio de Trabalho aos Workers
      agoSignalWorkers(ui_workerList, i_numprocsWorker, FLAG_START, 2, i_myidWorker, workerStatus_ago_ft, agoLog);

      // Envio de Dados para Trabalhadores
      agoSendDataToWorker(agoDataPackageWorker, i_numBlocksOrig, d_matrixA, d_matrixB, &offSetidPackage, ui_workerList, i_numprocsWorker,
                          2, idFail, i_myidWorker, workerStatus_ago_ft, agoLog);

      (void) snprintf(agoLog->logMsg, LOG_SIZE, "(FT) - %d Bloco(s) Distribuido(s) para os Workers (%d)",
                      (i_numprocsWorker - 2), (i_numprocsWorker - 2));
      registerLog(agoLog,  i_myidWorker);

      i_workerId = 2;
      while (i_workerId < i_numprocsWorker) {
        agoRecvDataFromWorkerFT(agoDataPackageWorker, d_matrixC, ui_workerList, i_workerId, i_myidWorker, agoLog);

        i_workerId++;
        d_countBlock++;

        agoGetCount(&timeSignal, i_numBlocksOrig, d_countBlock, faultTime, da_workerTime, i_myidWorker, agoLog);
      }

      numBlocks = numBlocks - (i_numprocsWorker - 2);

      (void) snprintf(agoLog->logMsg, LOG_SIZE, "(FT) - Faltam %d Bloco(s) a serem Distribuido(s) para os Workers (%d)",
                      numBlocks, (i_numprocsWorker - 2));
      registerLog(agoLog,  i_myidWorker);

      if ((numBlocks < (i_numprocsWorker - 2)) && (numBlocks > 0)) {
        if (i_sync1 == 0) {
          i_sync1 = i_sync2 = (numBlocks + 2);

          // Sinaliza Inicio de Trabalho aos Workers
          agoSignalWorkers(ui_workerList, i_sync2, FLAG_START, 2, i_myidWorker, workerStatus_ago_ft, agoLog);

          // Envio de Dados para Trabalhadores
          agoSendDataToWorker(agoDataPackageWorker, i_numBlocksOrig, d_matrixA, d_matrixB, &offSetidPackage, ui_workerList,
                              i_sync2, 2, idFail, i_myidWorker, workerStatus_ago_ft, agoLog);

          (void) snprintf(agoLog->logMsg, LOG_SIZE, "(FT) - %d Bloco(s) Distribuido(s) para os Workers (%d)",
                          (i_sync2 - 1), (i_sync2 - 1));
          registerLog(agoLog,  i_myidWorker);

          i_workerId = 2;
          while (i_workerId < (int) i_sync2) {
            agoRecvDataFromWorkerFT(agoDataPackageWorker, d_matrixC, ui_workerList, i_workerId, i_myidWorker, agoLog);
            i_workerId++;
          }
        }
        numBlocks = 0;
      }
    }

    // Termino Contagem de Tempo do Worker-Master
    faultTime = (MPI_Wtime() - faultTime);

    (void) snprintf(agoLog->logMsg, LOG_SIZE, "(FT) - Aqui Termina de Contar o Tempo do --> Novo Mestre (WORKER) <--");
    registerLog(agoLog,  i_myidWorker);

    (void) snprintf(agoLog->logMsg, LOG_SIZE,
                    "(FT) - Tempo de Processamento\n - Tempo 25%%: %f\n - Tempo 50%%: %f\n - Tempo 75%%: %f\n - Tempo 95%%: %f",
                    da_workerTime[PERCENT_25], da_workerTime[PERCENT_50], da_workerTime[PERCENT_75], da_workerTime[PERCENT_95]);
    registerLog(agoLog,  i_myidWorker);

    (void) snprintf(agoLog->logMsg, LOG_SIZE, "(FT) - Tempo da Tolerancia a Falha (Worker-Master): %f", faultTime);
    registerLog(agoLog,  i_myidWorker);

    (void) snprintf(agoLog->logMsg, LOG_SIZE, "(FT) - Enviando Finalizacao aos Workers");
    registerLog(agoLog,  i_myidWorker);

    i_signalFlag = FLAG_STOP;
    agoSignalWorkers(ui_workerList, i_numprocsWorker, FLAG_STOP, 2, i_myidWorker, workerStatus_ago_ft, agoLog);

#ifdef VERBOSE
    (void) snprintf(agoLog->logMsg, LOG_SIZE, "(agoFaultToleranceWorker) - Liberando Memoria Alocada (A, B, C) - (VERBOSE)");
    registerLog(agoLog,  i_myidWorker);
#endif

    free(d_matrixA);
    free(d_matrixB);
    free(d_matrixC);
  } // Fim novo Mestre
  else { // Inicio Workers Assumindo Novo Mestre
    Matrix *d_d_matrixChunkA, *d_d_matrixChunkB, *d_d_matrixChunkC;

    (void) snprintf(agoLog->logMsg, LOG_SIZE, "(FT) - Novo Master id %d - Enviando Informacoes", i_masterId);
    registerLog(agoLog, i_myidWorker);

#ifdef VERBOSE
    (void) snprintf(agoLog->logMsg, LOG_SIZE,
                    "(agoFaultToleranceWorker) - Enviando Informacoes (%d) ao Novo Master - (VERBOSE)", i_countPackageDone);
    registerLog(agoLog,  i_myidWorker);
#endif

    agoSendInfoToMasterFT(i_countPackageDone, i_myidWorker, i_masterId, agoLog);
    registerLog(agoLog,  i_myidWorker);

    d_d_matrixChunkC = (Matrix *) calloc ((CHUNKSIZE * MAX_MATRIX_SIZE), sizeof(double));
    (void) snprintf(agoLog->logMsg, LOG_SIZE, "(FT) - Alocado Memoria para a Matriz C");
    registerLog(agoLog,  i_myidWorker);

#ifdef VERBOSE
    if (d_d_matrixChunkC == NULL) {
      snprintf(agoLog->logMsg, LOG_SIZE, "(agoFaultToleranceWorker) - Erro Alocando Mem. Matrizes (C) - VERBOSE");
      registerLog(agoLog,  i_myidWorker);
    }
#endif

    (void) snprintf(agoLog->logMsg, LOG_SIZE, "(FT) - Enviando Pacotes armazenados (%d) para o Mestre-Trabalhador: %d",
                    i_countPackageDone, i_masterId);
    registerLog(agoLog,  i_myidWorker);

    i_packageId = 1;
    while (i_packageId <= i_countPackageDone) {
      (void) snprintf(c_fileName, LOG_SIZE, "d_matrixC%d", agoDataPackageWorker[listi_packageId[i_packageId]].id);
      matrixReadFromFile(c_fileName, d_d_matrixChunkC, (CHUNKSIZE * MAX_MATRIX_SIZE), i_myidWorker, agoLog);

      (void) snprintf(agoLog->logMsg, LOG_SIZE, "(FT) - Carregado do disco package id %d (%d - %d) - arquivo matriz c %s",
                      agoDataPackageWorker[listi_packageId[i_packageId]].id, listi_packageId[i_packageId], i_packageId, c_fileName);
      registerLog(agoLog,  i_myidWorker);

      agoSendDataToMasterFT(&agoDataPackageWorker[listi_packageId[i_packageId]], d_d_matrixChunkC, i_masterId, i_myidWorker, agoLog);
      i_packageId++;
    }

    free(d_d_matrixChunkC);
#ifdef VERBOSE
    (void) snprintf(agoLog->logMsg, LOG_SIZE, "(agoFaultToleranceWorker) - Liberada Memoria Matriz C - VERBOSE");
    registerLog(agoLog,  i_myidWorker);
#endif

    (void) snprintf(agoLog->logMsg, LOG_SIZE, "(FT) - Fim Primeira Fase");
    registerLog(agoLog,  i_myidWorker);

    d_d_matrixChunkA = (Matrix *) calloc ((CHUNKSIZE * MAX_MATRIX_SIZE), sizeof(double));
    d_d_matrixChunkB = (Matrix *) calloc ((CHUNKSIZE * MAX_MATRIX_SIZE), sizeof(double));
    d_d_matrixChunkC = (Matrix *) calloc ((CHUNKSIZE * MAX_MATRIX_SIZE), sizeof(double));

    (void) snprintf(agoLog->logMsg, LOG_SIZE, "(FT) - Alocado Memoria para as Matrizes (Chunk: A, B e C)");
    registerLog(agoLog,  i_myidWorker);

#ifdef VERBOSE
    if ((d_d_matrixChunkA == NULL) || (d_d_matrixChunkB == NULL) || (d_d_matrixChunkC == NULL)) {
      snprintf(agoLog->logMsg, LOG_SIZE, "(agoFaultToleranceWorker) - Erro Alocando Mem. Matrizes (A, B, C) - VERBOSE");
      registerLog(agoLog,  i_myidWorker);
    }
#endif

    while (i_signalFlag) {
      (void) snprintf(agoLog->logMsg, LOG_SIZE, "(FT) - Aguardando Pacotes do Mestre");
      registerLog(agoLog,  i_myidWorker);

      i_packageId = agoRecvDataFromMaster(agoDataPackageWorker, i_numBlocksOrig, d_d_matrixChunkA, d_d_matrixChunkB, i_masterId, i_myidWorker, agoLog);
      registerLog(agoLog,  i_myidWorker);

      // Multiplicao de Matrizes (Calcular Tempo)
      (void) matrixMultiplyParallel(d_d_matrixChunkA, d_d_matrixChunkB, d_d_matrixChunkC,
                                    agoDataPackageWorker[i_packageId].id,
                                    agoDataPackageWorker[i_packageId].offSetA,
                                    agoDataPackageWorker[i_packageId].offSetB,
                                    agoDataPackageWorker[i_packageId].chunkToCalc,
                                    i_myidWorker, agoLog);

      agoSendDataToMasterFT(&agoDataPackageWorker[i_packageId], d_d_matrixChunkC, i_masterId, i_myidWorker, agoLog);

      (void) snprintf(agoLog->logMsg, LOG_SIZE, "(FT) - Aguardando Novas Instrucoes");
      registerLog(agoLog,  i_myidWorker);

      i_signalFlag = agoWaitMasterEnd(i_masterId, agoLog);
    } // Fim Workers Assumindo Novo Mestre

#ifdef VERBOSE
    (void) snprintf(agoLog->logMsg, LOG_SIZE, "(agoFaultToleranceWorker) - Liberando (free) Memoria Alocada (Chunk: A, B e C) - (VERBOSE)");
    registerLog(agoLog,  i_myidWorker);
#endif

    free(d_d_matrixChunkA);
    free(d_d_matrixChunkB);
    free(d_d_matrixChunkC);
  }

  (void) snprintf(agoLog->logMsg, LOG_SIZE, "(FT) - Finalizando procedimentos de tolerancia a falhas");
  registerLog(agoLog,  i_myidWorker);

  return(i_signalFlag);
}
Ejemplo n.º 11
0
void matrixCreate(Matrix *matrixA, Matrix *matrixB, int sizeMatrix, int id, agoLogStr *agoLog)
{
  int i = 0, j = 0, i_numItems[2] = {0, 0};
  FILE *fdA, *fdB;

  // Caso nao exista as Matrizes - Crie
  if (fopen(FILE_NAME_MATRIX_A, "r") == NULL) {
    snprintf(agoLog->logMsg, LOG_SIZE, "Arquivo de Matriz nao Encontrado - Criando");
    registerLog(agoLog, id);

    fdA = fopen(FILE_NAME_MATRIX_A, "w+");
    fdB = fopen(FILE_NAME_MATRIX_B, "w+");

#ifdef VERBOSE
    if ((fdA == NULL) || (fdB == NULL)) {
      snprintf(agoLog->logMsg, LOG_SIZE, "(matrixCreate) - Erro ao Carregar Arquivos de Matrizes (%s, %s) - (VERBOSE)"
               FILE_NAME_MATRIX_A, FILE_NAME_MATRIX_B, FILE_NAME_MATRIX_B);
      registerLog(agoLog, id);
    }
#endif

    for (i = 0; i < MAX_MATRIX_SIZE; i++) {
      for (j = 0; j < MAX_MATRIX_SIZE; j++) {
        matrixA[i][j] = 2.0 + (double) (100.0 * rand() / (RAND_MAX + 1.0));
        matrixB[i][j] = 2.0 + (double) (100.0 * rand() / (RAND_MAX + 1.0));
      }
    }

#ifdef VERBOSE
    snprintf(agoLog->logMsg, LOG_SIZE, "(matrixCreate) - Matrizes (A, B) Criadas em Memoria - (VERBOSE)");
    registerLog(agoLog, id);
#endif

    i_numItems[0] = fwrite(matrixA, sizeof(double), sizeMatrix, fdA);
    i_numItems[1] = fwrite(matrixB, sizeof(double), sizeMatrix, fdB);

#ifdef VERBOSE
    snprintf(agoLog->logMsg, LOG_SIZE, "(matrixCreate) - Arq. das Matrizes (A, B) Salvo em Disco (%s (%d), %s (%d)) - VERBOSE",
             FILE_NAME_MATRIX_A, i_numItems[0], FILE_NAME_MATRIX_B, i_numItems[1]);
    registerLog(agoLog, id);
#endif

    fclose(fdA);
    fclose(fdB);
  } else {
    snprintf(agoLog->logMsg, LOG_SIZE, "Arquivo de Matriz Encontrado - Carregando do Arquivo - (VERBOSE)");

    fdA = fopen(FILE_NAME_MATRIX_A, "r");
    fdB = fopen(FILE_NAME_MATRIX_B, "r");

#ifdef VERBOSE
    if ((fdA == NULL) || (fdB == NULL)) {
      snprintf(agoLog->logMsg, LOG_SIZE, "(matrixCreate) - Erro Carregando Arquivos (%s, %s)",
               FILE_NAME_MATRIX_A, FILE_NAME_MATRIX_B);
      registerLog(agoLog, id);
    }
#endif

    i_numItems[0] = fread(matrixA, sizeof(double), sizeMatrix, fdA);
    i_numItems[1] = fread(matrixB, sizeof(double), sizeMatrix, fdB);

#ifdef VERBOSE
    snprintf(agoLog->logMsg, LOG_SIZE, "(matrixCreate) - Arq. das Matrizes (A, B) Carregados (%s (%d), %s (%d)) - VERBOSE",
             FILE_NAME_MATRIX_A, i_numItems[0], FILE_NAME_MATRIX_B, i_numItems[1]);
    registerLog(agoLog, id);
#endif

    fclose(fdA);
    fclose(fdB);

#ifdef VERBOSE
    snprintf(agoLog->logMsg, LOG_SIZE, "(matrixCreate) - Matrizes Carregadas - (VERBOSE)");
    registerLog(agoLog, id);
#endif
  }
}
Ejemplo n.º 12
0
//====================================
void statusLog()
//====================================
{
  int x,n,i,in_out;
  char z[200];
  int tempA[MAX_PIN_ANALOG_MEGA];
  int tempD[MAX_PIN_DIGITAL_MEGA];
  int tempM[MAX_PIN_DIGITAL_MEGA];
  int pinA[MAX_PIN_ANALOG_MEGA];
  int pinD[MAX_PIN_DIGITAL_MEGA];
  int pinM[MAX_PIN_DIGITAL_MEGA];
  

  tempA[0] = 0;
  tempD[0] = 0;
  for(i=0;i<=max_anaPin;i++)
    {
      tempA[i] = 0;
      pinA[i]  = 0; 
    }
  for(i=0;i<=max_digPin;i++)
    {
      tempD[i] = 0;
      pinD[i]  = 0; 
    }

  // step,status dig pins, dig pin value, n ana pair, n PWM dig pair, ( pairs)

  // Value status of analog pins
  n = 0;
  for(i=0;i<=max_anaPin;i++)
    {
      x = c_analogPin[i];
      if(x != 0)
	{
	  n++;
	  tempA[0] = n;
	  tempA[n] = x;
	  pinA[n]  = i;
	}  
    }
  

  // Value status of digital pins
  n = 0;
  for(i=0;i<=max_digPin;i++)
    {      
      if(g_boardType==MEGA)x = c_digitalPin[i];
      if(g_boardType==UNO)x = readRegister(R_PORT,i);
      if(x > 0)
	{
	  n++;
	  tempD[0] = n;
	  tempD[n] = x;
	  pinD[n]  = i;
	} 
    }

  strcpy(z,"");
  // Mode status of digital pins
  for(i=0;i<=max_digPin;i++)
    {      
      if(g_boardType==UNO)
	{
	  in_out = readRegister(R_DDR,i);
	  if(in_out == 0)z[i]   ='I';
	  if(in_out == 1)z[i]   ='o';
	}
      else // MEGA
	{
	  if(digitalMode[i]==INPUT)
	    {
	      in_out = 0;
	      z[i]   ='I';
	    }
	  if(digitalMode[i]==OUTPUT)
	    {
	      in_out = 1;
	      z[i]   ='o';
	    }
	}


      x = digitalMode[i];
      if(in_out == 0)  // INPUT
	{
	  if(x == FREE)z[i]          ='-';
	  else if(x == CHANGE)z[i]   ='C';
	  else if(x == RISING)z[i]   ='R';
	  else if(x == FALLING)z[i]  ='F';
	  else if(x == LOW)z[i]      ='L';
	  else if(x == RX)z[i]       ='X';
	  else if(x == TX)z[i]       ='Y';
	  //else z[i] = 'Q';
	}
      else  // OUTPUT
	{
	  if(x == FREE)z[i]          ='-';
	  else if(x == CHANGE)z[i]   ='c';
	  else if(x == RISING)z[i]   ='r';
	  else if(x == FALLING)z[i]  ='f';
	  else if(x == LOW)z[i]      ='l';
	  else if(x == RX)z[i]       ='x';
	  else if(x == TX)z[i]       ='y';
	  //else z[i] = 'q';
	}
    }
  z[i]='\0';
  
  fprintf(s_log,"%d,%s,%d,%d",g_curStep,z,tempA[0],tempD[0]);
  if(tempA[0] > 0)
    {
      for(i=1;i<=tempA[0];i++)fprintf(s_log,",%d,%d",pinA[i],tempA[i]);
    }
  if(tempD[0] > 0)
    {
      for(i=1;i<=tempD[0];i++)fprintf(s_log,",%d,%d",pinD[i],tempD[i]);
    }
  fprintf(s_log,"\n");

  registerLog();
}
Ejemplo n.º 13
0
void *agoMasterProcess()
{

  int i_workerId = 1, i_numBlocks = (NUM_BLOCKS - 1), i_offSetidPackage = 1, i_numBlocksOrig = NUM_BLOCKS, i_idFail = 0;

  unsigned int ui_sync1 = 0, ui_sync2 = 0, ui_loopMaster = FLAG_START, ui_timeSignal = 0, ui_workerList[NUM_WORKERS];

  double d_masterTime100 = 0.0, da_masterTime[4] = {0, 0, 0, 0}, d_countBlock = 0.0;

#if TURN_ON_OFF_FAIL == 1
  int    i_idFailTmp = 0, i_falhaPerc = 0;
  double d_timeFail = 0.0;
#endif

  Matrix *d_matrixA, *d_matrixB, *d_matrixC;

  agoDataPackageStr *agoDataPackageMaster;
  agoLogStr *agoLog;

  agoLog = (agoLogStr *) malloc (sizeof(agoLogStr));
  agoDataPackageMaster = (agoDataPackageStr *) calloc (sizeof(agoDataPackageStr), NUM_BLOCKS);

#ifdef VERBOSE
  if ((agoDataPackageMaster == NULL) || (agoLog == NULL)) {
    snprintf(agoLog->logMsg, LOG_SIZE, "(agoMasterProcess) - Erro Alocando Mem. agoDataPackageMaster ou agoLog - VERBOSE");
    registerLog(agoLog,  si_myidMaster);
  }
#endif

  startLog(agoLog, si_myidMaster);

  // Inicia o Pacote de Dados a serem processados
  // Informacoes Gerais do Processamento / Inicializando o Mestre
  (void) snprintf(agoLog->logMsg, LOG_SIZE,
                  "Tamanho Matriz: %d - Tamanho Pacote (Chunk): %d - Num de Pacotes: %d - Quantidade Workers: %d",
                  MAX_MATRIX_SIZE, CHUNKSIZE, i_numBlocks, (si_numprocsMaster - 1));
  registerLog(agoLog, si_myidMaster);

#ifdef VERBOSE
  (void) snprintf(agoLog->logMsg, LOG_SIZE,
                  "Tamanho Matriz: %d - %d bytes", sizeof(*d_matrixA), sizeof(*d_matrixB));
  registerLog(agoLog, si_myidMaster);
#endif

  // Aloca Memoria para as Matrizes
  d_matrixA = (Matrix *) malloc ((MAX_MATRIX_SIZE * MAX_MATRIX_SIZE) * sizeof(double));
  d_matrixB = (Matrix *) malloc ((MAX_MATRIX_SIZE * MAX_MATRIX_SIZE) * sizeof(double));
  d_matrixC = (Matrix *) malloc ((MAX_MATRIX_SIZE * MAX_MATRIX_SIZE) * sizeof(double));

  snprintf(agoLog->logMsg, LOG_SIZE, "Alocado Memoria para as Matrizes");
  registerLog(agoLog,  si_myidMaster);

#ifdef VERBOSE
  if ((d_matrixA == NULL) || (d_matrixB == NULL) || (d_matrixC == NULL)) {
    snprintf(agoLog->logMsg, LOG_SIZE, "(agoMasterProcess) - Erro Alocando Mem. Matrizes (A, B, C) - VERBOSE");
    registerLog(agoLog,  si_myidMaster);
  }
#endif

  matrixCreate(d_matrixA, d_matrixB, (MAX_MATRIX_SIZE * MAX_MATRIX_SIZE), si_myidMaster, agoLog);

#if TURN_ON_OFF_FAIL == 1
  (void) snprintf(agoLog->logMsg, LOG_SIZE, "(FT) - Tolerancia a Falhas Ativo - Mandando Sinal para %s\n", MASTER_ADDR_AGO_FT);
  registerLog(agoLog, si_myidMaster);
#else
  (void) snprintf(agoLog->logMsg, LOG_SIZE, "(FT) - Tolerancia a Falhas Nao Ativo\n");
  registerLog(agoLog, si_myidMaster);
#endif

  // Informacoes Gerais do Processamento / Inicializando o Mestre
  agoInitDataPackage(agoDataPackageMaster, NUM_BLOCKS, si_myidMaster, agoLog);

  i_workerId = 1;
  while (i_workerId < i_offSetidPackage) {
    agoDataPackageMaster[i_workerId].status = FLAG_DONE;
    i_workerId++;
  }

  ui_workerList[0] = 0;

  // Lista de Trabalhadores
  while (i_workerId < si_numprocsMaster) {
    ui_workerList[i_workerId] = i_workerId;
    i_workerId++;
  }

#ifdef VERBOSE
  (void) snprintf(agoLog->logMsg, LOG_SIZE, "(agoWorkerProcess) - Lista de Workers Concluida %d (%d) - (VERBOSE)",
                  i_workerId, si_numprocsMaster);
  registerLog(agoLog, si_myidMaster);

  (void) snprintf(agoLog->logMsg, LOG_SIZE, "(agoMasterProcess) - Numero de Blocos %d - (VERBOSE)", i_numBlocks);
  registerLog(agoLog, si_myidMaster);
#endif

  (void) snprintf(agoLog->logMsg, LOG_SIZE, "Iniciando Contagem do Tempo do Mestre Local");
  registerLog(agoLog, si_myidMaster);

  // Inicio Contagem de Tempo do Processo Mestre
  d_masterTime100 = MPI_Wtime();

  // Inicio Tarefa Mestre
  do {
    while (i_numBlocks) {
      // Sinaliza Inicio de Trabalho aos Workers
      agoSignalWorkers(ui_workerList, NUM_WORKERS, FLAG_START, 1, si_myidMaster, workerStatus_ago_ft, agoLog);

      (void) snprintf(agoLog->logMsg, LOG_SIZE, "Iniciando Envio de Pacotes para Workers (%d)\n",  (si_numprocsMaster - 1));
      registerLog(agoLog, si_myidMaster);

      // Envio de Dados para Trabalhadores
      agoSendDataToWorker(agoDataPackageMaster, i_numBlocksOrig, d_matrixA, d_matrixB, &i_offSetidPackage,
                          ui_workerList, NUM_WORKERS, 1, i_idFail, si_myidMaster, workerStatus_ago_ft, agoLog);


      (void) snprintf(agoLog->logMsg, LOG_SIZE, "Bloco(s) Distribuido(s) para os Workers (%d)\n",  (si_numprocsMaster - 1));
      registerLog(agoLog, si_myidMaster);

#if TURN_ON_OFF_FAIL == 1
      if (i_idFail > 0) {
        i_falhaPerc = ui_timeSignal;
        d_timeFail = (MPI_Wtime() - d_masterTime100);

        (void) snprintf(agoLog->logMsg, LOG_SIZE, "Introducao da Falha Completa - worker id %d no tempo %f",  i_idFail, d_timeFail);
        registerLog(agoLog, si_myidMaster);

        sleep(WAIT_TIME_FAIL_AGO_FT);

        d_masterTime100 = (d_masterTime100 - WAIT_TIME_FAIL_AGO_FT);
        i_idFailTmp = i_idFail;
        i_idFail = 0;
      }
#endif

      i_workerId = 1;
      while (i_workerId < si_numprocsMaster) {
#ifdef VERBOSE
        (void) snprintf(agoLog->logMsg, LOG_SIZE, "(agoMasterProcess) - worker id %d (%d) - (VERBOSE)",
                        i_workerId, ui_workerList[i_workerId]);
        registerLog(agoLog, si_myidMaster);
#endif

        agoRecvDataFromWorker(agoDataPackageMaster, d_matrixC, ui_workerList, si_myidMaster, agoLog);

        d_countBlock++;
        i_workerId++;

        agoGetCount(&ui_timeSignal, i_numBlocksOrig, d_countBlock, d_masterTime100, da_masterTime, si_myidMaster, agoLog);

#ifdef VERBOSE
        (void) snprintf(agoLog->logMsg, LOG_SIZE, "(agoMasterProcess) - Blocos Recebidos %f - worker id %d - (VERBOSE)",
                        d_countBlock, i_workerId);
        registerLog(agoLog, si_myidMaster);
#endif
      }

      i_numBlocks = i_numBlocks - (si_numprocsMaster - 1);

#if TURN_ON_OFF_FAIL == 1
      if (reconfigWorker_ago_ft == 1) {
        (void) snprintf(agoLog->logMsg, LOG_SIZE, "(FT) - Ocorreu uma Falha: %d Ativos", (si_numprocsMaster - 1));
        registerLog(agoLog, si_myidMaster);
      }
#endif

      (void) snprintf(agoLog->logMsg, LOG_SIZE, "Faltam %d Bloco(s) a serem Distribuido(s) para os Workers (%d)\n",
                      i_numBlocks, (si_numprocsMaster - 1));
      registerLog(agoLog, si_myidMaster);

      if ((i_numBlocks < (si_numprocsMaster - 1)) && (i_numBlocks > 0)) {
        if ((ui_sync1 == 0)
#if TURN_ON_OFF_FAIL == 1
            && (reconfigWorker_ago_ft == 0)
#endif
           ) {
          ui_sync1 = ui_sync2 = (i_numBlocks + 1);

          agoSignalWorkers(ui_workerList, ui_sync2, FLAG_START, 1, si_myidMaster, workerStatus_ago_ft, agoLog);

          (void) snprintf(agoLog->logMsg, LOG_SIZE, "Iniciando Envio de Pacotes para Workers (%d)\n",  (si_numprocsMaster - 1));
          registerLog(agoLog, si_myidMaster);

          i_idFail = 0;
          agoSendDataToWorker(agoDataPackageMaster, i_numBlocksOrig, d_matrixA, d_matrixB, &i_offSetidPackage,
                              ui_workerList, ui_sync2, 1, i_idFail, si_myidMaster, workerStatus_ago_ft, agoLog);


          (void) snprintf(agoLog->logMsg, LOG_SIZE, "Bloco(s) Distribuido(s) para os Workers (%d)\n",  (si_numprocsMaster - 1));
          registerLog(agoLog, si_myidMaster);

          i_workerId = 1;

          while (i_workerId < (int) ui_sync2) {
            agoRecvDataFromWorker(agoDataPackageMaster, d_matrixC, ui_workerList, si_myidMaster, agoLog);
            d_countBlock++;
            i_workerId++;

            agoGetCount(&ui_timeSignal, i_numBlocksOrig, d_countBlock, d_masterTime100, da_masterTime, si_myidMaster, agoLog);
          }
          i_numBlocks = 0;
        }
#if TURN_ON_OFF_FAIL == 1
        if (reconfigWorker_ago_ft == 1) {
          i_numBlocks = 0;
        }
#endif
      }

#if TURN_ON_OFF_FAIL == 1
      i_idFail = agoPutFaultOnWorker(ui_timeSignal, agoLog);
#endif
    }
    // Termina o Thread para Verificar Falhas atraves de Socket
#if TURN_ON_OFF_FAIL == 1
    syncWorker_ago_ft = waitWorker_ago_ft = FLAG_STOP;
#endif

    // Se foi detectado erro (reconfigWorker_ago_ft = 1) reconfigure o Cluster
#if TURN_ON_OFF_FAIL == 1
    if (reconfigWorker_ago_ft == 1) {
      agoReconfigCluster(agoDataPackageMaster, d_matrixA, d_matrixB, d_matrixC, ui_workerList, i_numBlocksOrig, agoLog);
    }
#endif

    ui_loopMaster = FLAG_STOP;

  } while (ui_loopMaster);

  agoSignalWorkers(ui_workerList, NUM_WORKERS, FLAG_STOP, 1, si_myidMaster, workerStatus_ago_ft, agoLog);

  // Finaliza Contagem de Tempo do Processo Mestre
  d_masterTime100 = (MPI_Wtime() - d_masterTime100);

  (void) snprintf(agoLog->logMsg, LOG_SIZE, "Finalizado a Contagem do Tempo (%f) do Mestre Local\n", d_masterTime100);
  registerLog(agoLog, si_myidMaster);

#if TURN_ON_OFF_FAIL == 1
  // Termina o Thread o i_syncMaster (Servidor Sinalizacao)
  masterSocketLoop_ago_ft = FLAG_STOP;
#endif

  free(d_matrixA);
  free(d_matrixB);
  free(d_matrixC);
  free(agoDataPackageMaster);

#ifdef VERBOSE
  (void) snprintf(agoLog->logMsg, LOG_SIZE, "(agoMasterProcess) - Liberado (free) memoria alocada (A, B, C) - (VERBOSE)");
  registerLog(agoLog, si_myidMaster);
#endif

  (void) snprintf(agoLog->logMsg, LOG_SIZE,
                  "Tempo de Processamento\n - Tempo 25%%: %f\n - Tempo 50%%: %f\n - Tempo 75%%: %f\n - Tempo 95%%: %f",
                  da_masterTime[PERCENT_25], da_masterTime[PERCENT_50], da_masterTime[PERCENT_75], da_masterTime[PERCENT_95]);
  registerLog(agoLog, si_myidMaster);

  (void) snprintf(agoLog->logMsg, LOG_SIZE, "Finalizado - Tempo Total Local (100%%): %f", d_masterTime100);
  registerLog(agoLog, si_myidMaster);

#if TURN_ON_OFF_FAIL == 1
  if (reconfigWorker_ago_ft == 1) {
    (void) snprintf(agoLog->logMsg, LOG_SIZE, "Falha no id %d introduzida com (%d%%) do trabalho no tempo: %f",
                    i_idFailTmp, i_falhaPerc, d_timeFail);
    registerLog(agoLog, si_myidMaster);

    (void) snprintf(agoLog->logMsg, LOG_SIZE, "Finalizado - Tempo Total (100%%) Com Falha: %f", d_masterTime100);
    registerLog(agoLog, si_myidMaster);
  }
#endif

#ifdef VERBOSE
#if TURN_ON_OFF_FAIL == 1
  (void) snprintf(agoLog->logMsg, LOG_SIZE, "(agoMasterProcess) - Tolerancia a Falha Ativo - (VERBOSE)");
  registerLog(agoLog, si_myidMaster);
#else
  (void) snprintf(agoLog->logMsg, LOG_SIZE, "(agoMasterProcess) - Tolerancia a Falha Nao Ativo - (VERBOSE)");
  registerLog(agoLog, si_myidMaster);
#endif

  (void) snprintf(agoLog->logMsg, LOG_SIZE, "(agoMasterProcess) - Chamando MPI_Finalize - (VERBOSE)");
  registerLog(agoLog, si_myidMaster);
#endif

  closeLog(agoLog);
  free(agoLog);

  return(NULL);
}
Ejemplo n.º 14
0
// EXCEPTIONS: CProcessFailure
// TO DO:	clean up error reporting
//			use dialog to say we're busy and give a cancel button
void CPhonruleProcess::processDictionaries(CProcessStatus& status)
{
	CPathDescriptor sLOGPath;
	try
	{
		CModelFilesSet* pMFS = NULL;

		// do we operate on the src dicts or target dicts?
		CTypedPtrArray<CPtrArray, CPathDescriptor*>* pRootUnifiedDicts;
		switch(status.m_iCurrentSeqFunction)
		{
			case CProcess::kAnalysis:
				pRootUnifiedDicts = & status.m_pSrcDicts;
				pMFS =status.getInputMFS();
				if((*pRootUnifiedDicts).GetSize()==0)
					throw CProcessFailure(this, _T("There were no source dictionaries specified"));
				break;
			case CProcess::kSynthesis:
				pMFS =status.getOutputMFS();
				pRootUnifiedDicts = & status.m_pTarDicts;
				if((*pRootUnifiedDicts).GetSize()==0)
					throw CProcessFailure(this, _T("There were target dictionaries specified"));
				break;
			default: // the user should never be able to make this happen
				throw CProcessFailure(this, _T("Phonrule should only be called as part of analysis or synthesis"));
		}

		// combine all runs into one log
		sLOGPath = status.makeTempPath(pMFS->getAbrev() + _T("-phrl"), _T(".log"));
		sLOGPath.deleteFile();

		for(int iRootFileIndex = 0; iRootFileIndex< (*pRootUnifiedDicts).GetSize(); iRootFileIndex++)
		{

			CString sBaseName = (*pRootUnifiedDicts)[iRootFileIndex]->getFileName() + _T("-phrl");
			CPathDescriptor sOutputDictPath = status.makeTempPath(sBaseName,_T(".dic"));
			sOutputDictPath.deleteFile();

			USES_CONVERSION;
			char lpszErrorStr[1000];
			BOOL OK = setupProcess(lpszErrorStr,
						m_bTrace ||
						(status.m_pProcPrefs->m_dwFlags & CProcessingPrefs::kTrace), // jdh 11/11/99
						m_bMonitorRules,
						m_cCommentChar,
						T2CA(pMFS->getPhonrulePath()),			// lpszRulesPath
						T2CA((*pRootUnifiedDicts)[iRootFileIndex]->getFullPath()),	// lpszDictInPath
						T2CA(sOutputDictPath.getFullPath()),			// lpszDictOutPath
						T2CA(sLOGPath.getFullPath()),				// lpszLogFilePath
						TRUE); // append log

			if(!OK)
				throw(CProcessFailure(this, A2CT(lpszErrorStr)));


			BOOL bError = runProcess();

			WIN32_FIND_DATA fileInfo;
			if(INVALID_HANDLE_VALUE == FindFirstFile(sOutputDictPath.getFullPath(), &fileInfo))
				throw(CProcessFailure(this, _T("Phonrule DLL did not produce the expected dictionary.  Check the phonrule log for more information.")));

			// change the path so that latter processes will use what we produced
			(*(*pRootUnifiedDicts)[iRootFileIndex]) = sOutputDictPath;//.getFullPath();

			// make sure these are closed
			if(logfile)
				fclose(logfile);	// this is the same as errlogfile
			if(outfile)
				fclose(outfile);
		}

#ifndef rde279
#pragma message("I don't know if chopping this out is correct, but the logStream being created here is unused so it memory leaks")
#else
		CResultStreamFile* logStream =
			new CResultStreamFile(
					new CResultStreamDescriptor(this,
												_T("Phonrule Log"), //short description
												_T("Log of this process; read it for status and diagnostics."), // long description
												pMFS->getAbrev() + _T(" Phnrl Log")
											),
					sLOGPath.getFullPath(),
					status.getInputLang());
#endif
#ifndef hab241
		registerLog(status, sLOGPath, status.getInputLang());
#else // hab241
		status.registerResultStream(logStream);
#endif // hab241
	}
	catch(CProcessFailure failure)
	{
		if(logfile)
			fclose(logfile);	// this is the same as errlogfile
		if(outfile)
			fclose(outfile);

		registerLog(status, sLOGPath, status.getInputLang());
		throw(failure);
	}
	catch(CString sError)
	{
		if(logfile)
			fclose(logfile);	// this is the same as errlogfile
		if(outfile)
			fclose(outfile);
		registerLog(status, sLOGPath, status.getInputLang());
		throw(CProcessFailure(this, sError));
	}
}
Ejemplo n.º 15
0
void CSentransProcess::processANAFile(CProcessStatus& status)
{

// (jdh 6/99) i think this is now defunct; an impossible condition
// if((m_iFunction == kAdjustSrcGlossing)
//		&& (status.m_pProcPrefs->getGoal() != CProcessingPrefs::kGlossedInterlinear))
//		return;

	// skip this process if there is nothing to do
	switch(m_iFunction)
	{
		case kDisambig:
			if(status.getInputLang()->getSentransDisambigModel().m_rules.getSize() ==0)
				return;
			break;
		case kAdjustSrcGlossing:
			if(status.getInputLang()->getSentransGlossAdjustmentModel().m_rules.getSize() ==0)
				return;
			break;

		// JDH 6/2/99 Added Sentrans Adjust Rules Set for analysis
		case kAdjustAnalysis:
			if(status.getInputLang()->getSentransAnaAdjustmentModel().m_rules.getSize() ==0)
				return;
			break;

		case kOtherRuleFile:	// jdh 15June2000
			if(!m_sOtherRuleFilePath.fileExists())
			{
				CString sMsg;
				sMsg.Format("The external SENTRANS rule file could not be found.\n\"%s\"", LPCTSTR(m_sOtherRuleFilePath));
				AfxMessageBox(sMsg);
				return;
			}
			break;

		//case kTransfer:
			// haven't handled this because we would have to travers the transfer models (just a little more work, probabl)
	}

	// remember, we could be operating on ana from any process, including another sentrans process

	try
	{
		CString sBase = getTempFileNameBase(status);
		m_sOutPath = status.makeTempPath(sBase,	".ana" );
		m_sLOGPath = status.makeTempPath(sBase,	".log" );

		m_sInPath = status.sANAPath;
		m_sOutPath.deleteFile();
		m_sLOGPath.deleteFile();

		if(!executeTool(status))
		{		throw(CProcessFailure(this, "SentransProccess failed"));
		}

		waitForCompletion(&status, &m_sLOGPath, &m_sOutPath);

		// register ana output so the user can view it
		CString sShortDesc, sLongDesc, sTabLabel;
		CCarlaLanguage *pOutANALang=NULL;
		switch(m_iFunction)
		{
			case kDisambig:
				sShortDesc = "Disambiguated ANA";
				sLongDesc = "ANA of the source-language file, after filtering through Sentrans disambiguation rules.";
				sTabLabel = "ST-Disamb ANA";
				pOutANALang = status.getInputLang();
				break;
			case kAdjustSrcGlossing: sShortDesc = "Gloss Adjusted ANA";
				sLongDesc = "ANA of the source-language file, after performing 'adjustment' transfer for glossing purposes.";
				sTabLabel = "ST-Gloss-Adj ANA";
				pOutANALang = status.getInputLang();
				break;

			// JDH 6/2/99 Added Sentrans Adjust Rules Set for analysis
			case kAdjustAnalysis: sShortDesc = "Analysis Adjusted ANA";
				sLongDesc = "ANA of the source-language file, after performing 'adjustment' transfer for analysis purposes.";
				sTabLabel = "ST-Anal-Adj ANA";
				pOutANALang = status.getInputLang();
				break;

			// jdh 15June2000
			case kOtherRuleFile: sShortDesc = "Other Rule File ANA";
				sLongDesc.Format("ANA of the source-language file, after running through Sentrans using the file: %s",LPCTSTR(m_sOtherRuleFilePath));
				sTabLabel = "ST-Anal-Other ANA";
				pOutANALang = status.getInputLang();
				break;

			case kTransfer: sShortDesc = "Transfered ANA";
				sLongDesc = "ANA of the target-language file, after performing Sentrans transfer.";
				sTabLabel = "ST-Trans ANA";
				pOutANALang = status.getOutputLang();
				break;
			default: ASSERTX(FALSE); break;
		}
		CResultStreamFile* anaStream =
			new CResultStreamFile(
					new CResultStreamDescriptor(this,
												sShortDesc, //short description
												sLongDesc, // long description
												sTabLabel // tab label
											),
					m_sOutPath.getFullPath(),
					pOutANALang);
		status.registerResultStream(anaStream);

		// when we're doing transfer, the log could reasonably be in either language font,
		// but what to do?
		registerLog(status, m_sLOGPath, status.getInputLang());
		status.sANAPath = m_sOutPath;
	}
	catch(CProcessFailure failure)
	{
		registerLog(status, m_sLOGPath);
		throw(failure);
	}
	catch(CString sError)
	{
		registerLog(status, m_sLOGPath);
		throw(CProcessFailure(this, sError));
	}
}