コード例 #1
0
/* initialize the stack */
StealStack* ss_init(int *argc, char ***argv)
{
	StealStack* s = &stealStack; //only one s per thread needed

	/* Start up MPI */
	MPI_Init(argc, argv);
	
	MPI_Comm_size(MPI_COMM_WORLD, &comm_size);
	MPI_Comm_rank(MPI_COMM_WORLD, &comm_rank);

        if (comm_rank == 0 && comm_size == 1)
          ss_error("Error: Worksharing requires 2 or more MPI processes (1 work server, >= 1 worker)", 1);

	/* Reset timestamps */
	msg_counter = 0;

        s->globalWork = 0;
        s->localWork  = 0;

	s->nNodes = 0;
        s->nLeaves = 0;
	s->nAcquire = 0;
	s->nRelease = 0;
	s->nSteal = 0;
	s->nFail = 0;

        s->maxStackDepth = 0;
        s->maxTreeDepth  = 0;

	localQueue = deq_create();
	globalQueue = deq_create();
	mkEmpty(s);

	return s;
}
コード例 #2
0
ファイル: app_ema.c プロジェクト: ArkShen/xcb
static int ema_exec(void *data, void *data2) {
	RAII_VAR(struct msg *, msg, (struct msg *)data, msg_decr);
	Quote *quote = (Quote *)msg->data;
	float *price;
	map_iter_t *iter = map_iter_create();
	deq_t *prices;
	int size;
	NOT_USED(data2);

	/* FIXME */
	if (fabs(quote->thyquote.m_dZXJ) <= 0.000001) {
		xcb_log(XCB_LOG_WARNING, "Invalid quote: '%d,%d,%s,%.2f'",
			quote->thyquote.m_nTime,
			quote->m_nMSec,
			quote->thyquote.m_cHYDM,
			quote->thyquote.m_dZXJ);
		goto end;
	}
	if ((price = ALLOC(sizeof (float))) == NULL) {
		xcb_log(XCB_LOG_WARNING, "Error allocating memory for price");
		goto end;
	}
	*price = quote->thyquote.m_dZXJ;
	pthread_mutex_lock(&conlock);
	map_find(iter, contracts, quote->thyquote.m_cHYDM);
	if (!map_iter_valid(iter, contracts)) {
		const char *contract;

		if ((contract = mem_strdup(quote->thyquote.m_cHYDM)) == NULL) {
			xcb_log(XCB_LOG_WARNING, "Error allocating memory for contract");
			pthread_mutex_unlock(&conlock);
			FREE(price);
			goto end;
		}
		prices = deq_create();
		map_insert(contracts, contract, prices);
	} else
		prices = map_iter_value(iter);
	deq_push_back(prices, price);
	if ((size = deq_size(prices)) == n) {
		int i;
		float ema = *((float *)deq_at(prices, 0));
		time_t t = (time_t)quote->thyquote.m_nTime;
		struct tm lt;
		char datestr[64], res[256];
		float *front;

		for (i = 1; i < size; ++i)
			ema = (2.0 / (n + 1)) * *((float *)deq_at(prices, i)) + (1 - (2.0 / (n + 1))) * ema;
		strftime(datestr, sizeof datestr, "%F %T", localtime_r(&t, &lt));
		snprintf(res, sizeof res, "EMA,%s.%03d,%s|%.2f",
			datestr,
			quote->m_nMSec,
			quote->thyquote.m_cHYDM,
			ema);
		out2rmp(res);
		front = deq_front(prices);
		FREE(front);
		deq_pop_front(prices);
	}
	pthread_mutex_unlock(&conlock);
	map_iter_destroy(iter);

end:
	return 0;
}