Exemplo n.º 1
0
void NewPoissonOp::residual(  FArrayBox& a_lhs, const FArrayBox& a_phi,
                              const FArrayBox& a_rhs, bool a_homogeneous)
{
  applyOp(a_lhs, a_phi, a_homogeneous);
  a_lhs*=-1.0;
  incr(a_lhs, a_rhs, 1);
}
Exemplo n.º 2
0
int
win_obj::accumulate(void *orgaddr, int orgcnt, MPI_Datatype orgtype,
                    MPI_Aint targdisp, int targcnt,
                    MPI_Datatype targtype, MPI_Op op) {
    applyOp(targtype, op, targcnt, (void*)((int*)baseAddr+targdisp) , (void*)orgaddr);
    return WIN_SUCCESS;
}
inline static void Execute(void* Arg) {
    ThreadState lobject_lock;
    long i, rnum;
    volatile long j;
    long id = (long) Arg;

    setThreadId(id);
    _thread_pin(id);
    simSRandom(id + 1L);
    threadStateInit(&lobject_lock, &object_lock, (int)id);
    if (id == N_THREADS - 1)
        d1 = getTimeMillis();
    // Synchronization point
    int rc = pthread_barrier_wait(&barr);
    if (rc != 0 && rc != PTHREAD_BARRIER_SERIAL_THREAD) {
        printf("Could not wait on barrier\n");
        exit(-1);
    }
    start_cpu_counters(id);
    for (i = 0; i < RUNS; i++) {
        // perform a fetchAndMultiply operation
        applyOp(&object_lock, &lobject_lock, fetchAndMultiply, (ArgVal) id, id);
        rnum = simRandomRange(1, MAX_WORK);
        for (j = 0; j < rnum; j++)
            ; 
    }
    stop_cpu_counters(id);
}
Exemplo n.º 4
0
void EBPoissonOp::
residual(LevelData<EBCellFAB>&       a_residual,
         const LevelData<EBCellFAB>& a_phi,
         const LevelData<EBCellFAB>& a_rhs,
         bool                        a_homogeneousPhysBC)
{
  CH_TIME("EBPoissonOp::residual");
  //this is a multigrid operator so only homogeneous CF BC
  //and null coar level
  CH_assert(a_residual.ghostVect() == m_ghostCellsRHS);
  CH_assert(a_phi.ghostVect() == m_ghostCellsPhi);
  DataIterator dit = a_residual.dataIterator();
  applyOp(a_residual,a_phi, a_homogeneousPhysBC, dit );
  axby(a_residual,a_residual,a_rhs,-1.0, 1.0);
}
Exemplo n.º 5
0
void APLUnaryFunction::applyWithArgs
(
    Expr& target,
    ListNode* args,
    Environment* rho
)
{
    APLValue* arg1 = args->at(0)->isAPLValue();
    if (!arg1)
    {
        target = error("non-apl value given to unary function");
        return;
    }
    applyOp(target, arg1);
}
/*
* Prototype: int evaluateExpression();

* Description: This method will evaluate the entered expression.

* How to call: This is method is called in parseExpression() to evaluate the expression.
ex: evaluateExpression();

* Pre-Conditions:
- A Calculator object must have been built.
- The expression must have been parsed.
- The expression must have been valid.

* Post-Conditions:
- This method returns an int as an error code.
0 = Success
2 = Not enough values to evaluate (e.g., 3++1)
3 = Too many values and not enough operators (e.g., 3(2+1), one must explicitly denote multiplication with '*'.
4 = Division by zero (e.g., 3/0)
*/
int Calculator::evaluateExpression()
{
	Queue<std::string> output2 = output; // Copy output into new queue so that printRPN() works
	while (!output2.empty())
	{
		const std::string token = output2.front();
		output2.dequeue();

		if (!isOperator(token))
			numbers.push(token);
		else
		{
			if (numbers.size() < 2)
				return 2; // Too few values
			else
			{
				double num1 = strtod(numbers.top().c_str(), NULL); // Rear number
				numbers.pop();
				double num2 = std::strtod(numbers.top().c_str(), NULL); // Leading number
				numbers.pop();

				if (token == "/" && num1 == 0)
					return 4; // Division by zero

				double result = applyOp(num2, num1, token);
				numbers.push(std::to_string(result));
			}
		}
	}
	if (numbers.size() == 1)
	{
		answer = std::strtod(numbers.top().c_str(), NULL);
		numbers.pop();
		return 0; // Success!
	}
	else
		return 3; // Too many values
}
Exemplo n.º 7
0
void APLBinaryFunction::applyWithArgs
(
    Expr& target,
    ListNode* args,
    Environment* rho
)
{
    if (args->length() != 2)
    {
        target = error("binary function given other than 2 arguments");
        return;
    }

    APLValue* arg1 = args->at(0)->isAPLValue();
    APLValue* arg2 = args->at(1)->isAPLValue();
    if ((!arg1) || (!arg2))
    {
        target = error("non-apl value given to binary function");
        return;
    }

    applyOp(target, arg1, arg2);
}
Exemplo n.º 8
0
    bool replset::InitialSync::oplogApplication(OplogReader& r, const Member* source,
        const OpTime& applyGTE, const OpTime& minValid) {

        const string hn = source->fullName();
        try {
            r.tailingQueryGTE( rsoplog, applyGTE );
            if ( !r.haveCursor() ) {
                log() << "replSet initial sync oplog query error" << rsLog;
                return false;
            }

            {
                if( !r.more() ) {
                    sethbmsg("replSet initial sync error reading remote oplog");
                    log() << "replSet initial sync error remote oplog (" << rsoplog << ") on host " << hn << " is empty?" << rsLog;
                    return false;
                }
                bo op = r.next();
                OpTime t = op["ts"]._opTime();
                r.putBack(op);

                if( op.firstElementFieldName() == string("$err") ) {
                    log() << "replSet initial sync error querying " << rsoplog << " on " << hn << " : " << op.toString() << rsLog;
                    return false;
                }

                uassert( 13508 , str::stream() << "no 'ts' in first op in oplog: " << op , !t.isNull() );
                if( t > applyGTE ) {
                    sethbmsg(str::stream() << "error " << hn << " oplog wrapped during initial sync");
                    log() << "replSet initial sync expected first optime of " << applyGTE << rsLog;
                    log() << "replSet initial sync but received a first optime of " << t << " from " << hn << rsLog;
                    return false;
                }

                sethbmsg(str::stream() << "initial oplog application from " << hn << " starting at "
                         << t.toStringPretty() << " to " << minValid.toStringPretty());
            }
        }
        catch(DBException& e) {
            log() << "replSet initial sync failing: " << e.toString() << rsLog;
            return false;
        }

        /* we lock outside the loop to avoid the overhead of locking on every operation. */
        writelock lk("");

        // todo : use exhaust
        OpTime ts;
        time_t start = time(0);
        unsigned long long n = 0;
        int fails = 0;
        while( ts < minValid ) {
            try {
                // There are some special cases with initial sync (see the catch block), so we
                // don't want to break out of this while until we've reached minvalid. Thus, we'll
                // keep trying to requery.
                if( !r.more() ) {
                    OCCASIONALLY log() << "replSet initial sync oplog: no more records" << endl;
                    sleepsecs(1);

                    r.resetCursor();
                    r.tailingQueryGTE(rsoplog, theReplSet->lastOpTimeWritten);
                    if ( !r.haveCursor() ) {
                        if (fails++ > 30) {
                            log() << "replSet initial sync tried to query oplog 30 times, giving up" << endl;
                            return false;
                        }
                    }

                    continue;
                }

                BSONObj o = r.nextSafe(); /* note we might get "not master" at some point */
                ts = o["ts"]._opTime();

                {
                    if( (source->state() != MemberState::RS_PRIMARY &&
                            source->state() != MemberState::RS_SECONDARY) ||
                            replSetForceInitialSyncFailure ) {

                        int f = replSetForceInitialSyncFailure;
                        if( f > 0 ) {
                            replSetForceInitialSyncFailure = f-1;
                            log() << "replSet test code invoked, replSetForceInitialSyncFailure" << rsLog;
                            throw DBException("forced error",0);
                        }
                        log() << "replSet we are now primary" << rsLog;
                        throw DBException("primary changed",0);
                    }

                    applyOp(o, applyGTE);
                }

                if ( ++n % 1000 == 0 ) {
                    time_t now = time(0);
                    if (now - start > 10) {
                        // simple progress metering
                        log() << "replSet initialSyncOplogApplication applied " << n << " operations, synced to "
                              << ts.toStringPretty() << rsLog;
                        start = now;
                    }
                }

                getDur().commitIfNeeded();
            }
            catch (DBException& e) {
                // Skip duplicate key exceptions.
                // These are relatively common on initial sync: if a document is inserted
                // early in the clone step, the insert will be replayed but the document
                // will probably already have been cloned over.
                if( e.getCode() == 11000 || e.getCode() == 11001 || e.getCode() == 12582) {
                    continue;
                }
                
                // handle cursor not found (just requery)
                if( e.getCode() == 13127 ) {
                    log() << "replSet requerying oplog after cursor not found condition, ts: " << ts.toStringPretty() << endl;
                    r.resetCursor();
                    r.tailingQueryGTE(rsoplog, ts);
                    if( r.haveCursor() ) {
                        continue;
                    }
                }

                // TODO: handle server restart

                if( ts <= minValid ) {
                    // didn't make it far enough
                    log() << "replSet initial sync failing, error applying oplog : " << e.toString() << rsLog;
                    return false;
                }

                // otherwise, whatever, we'll break out of the loop and catch
                // anything that's really wrong in syncTail
            }
        }
        return true;
    }