コード例 #1
0
ファイル: main.cpp プロジェクト: rafuck/barrier
int main(void){
	const size_t nThreads = std::thread::hardware_concurrency();
	printf("Concurency: %zu\n", nThreads);
	BarrierCounter bc(nThreads);
	Barrier b(nThreads);
	BarrierXOR bxor(nThreads);
	timer();

	#pragma omp parallel num_threads(nThreads)
	{
		size_t threadId = omp_get_thread_num();
		for(int i=0; i<nAttempts; ++i){
			if ((i%100) == 0) printf("%d", i);
			#pragma omp barrier
			if(threadId == 0 && (i%100) == 0){
				printf("\n");
			}
			#pragma omp barrier
		}
	}
	printf("OpenMP = %e s\n", timer());

	printf("barrier counter = %e s\n", testBarrier(bc, nThreads));
	printf("barrier XOR = %e s\n", testBarrier(bxor, nThreads));
	printf("barrier messages = %e s\n", testBarrier(b, nThreads));

	return EXIT_SUCCESS;
}
コード例 #2
0
ファイル: xor4.cpp プロジェクト: polux/snippets
    return e1->eval(a, b, c, d) ^ e2->eval(a, b, c, d);
  }
};

Expr* const ba() { return new A(); }
Expr* const bb() { return new B(); }
Expr* const bc() { return new C(); }
Expr* const bd() { return new D(); }
Expr* bnot(Expr* const e) { return new Not(e); }
Expr* band(Expr* const e1, Expr* const e2) { return new And(e1, e2); }
Expr* bor(Expr* const e1, Expr* const e2) { return new Or(e1, e2); }
Expr* bxor(Expr* const e1, Expr* const e2) { return new Xor(e1, e2); }

Expr* const knownXor4 =
  band(
      bor(bxor(ba(), bb()), bxor(bc(), bd())),
      bxor(bor(ba(), bb()), bor(bc(), bd())));

bool isXor4(Expr* const e) {
  return !e->eval(true, true, true, true)
      && !e->eval(false, true, true, true)
      && !e->eval(true, false, true, true)
      && !e->eval(false, false, true, true)
      && !e->eval(true, true, false, true)
      && !e->eval(false, true, false, true)
      && !e->eval(true, false, false, true)
      && e->eval(false, false, false, true)
      && !e->eval(true, true, true, false)
      && !e->eval(false, true, true, false)
      && !e->eval(true, false, true, false)
      && e->eval(false, false, true, false)