X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;f=tests%2Forg.simantics.db.tests%2Fsrc%2Forg%2Fsimantics%2Fdb%2Ftests%2Fperformance%2Fjava%2FSynchronizationTest.java;fp=tests%2Forg.simantics.db.tests%2Fsrc%2Forg%2Fsimantics%2Fdb%2Ftests%2Fperformance%2Fjava%2FSynchronizationTest.java;h=f47c61ddc225fcfe712eef9312686e3ba0f01416;hb=67fd62f9c742337ec80eef658192db198a0efaac;hp=0000000000000000000000000000000000000000;hpb=cde82ba81327d5515fdca362f7f4c70f5103ae80;p=simantics%2Fplatform.git diff --git a/tests/org.simantics.db.tests/src/org/simantics/db/tests/performance/java/SynchronizationTest.java b/tests/org.simantics.db.tests/src/org/simantics/db/tests/performance/java/SynchronizationTest.java new file mode 100644 index 000000000..f47c61ddc --- /dev/null +++ b/tests/org.simantics.db.tests/src/org/simantics/db/tests/performance/java/SynchronizationTest.java @@ -0,0 +1,268 @@ +/******************************************************************************* + * Copyright (c) 2007, 2010 Association for Decentralized Information Management + * in Industry THTH ry. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * VTT Technical Research Centre of Finland - initial API and implementation + *******************************************************************************/ +package org.simantics.db.tests.performance.java; + +import java.util.concurrent.CountDownLatch; +import java.util.concurrent.Semaphore; + +import org.simantics.db.testing.base.TestCommonPerf; + + +/** + * + */ +public class SynchronizationTest extends TestCommonPerf { + +// public void test() throws Exception { +// +// class CounterThread extends Thread { +// +// final private Semaphore start; +// final private AtomicInteger counter; +// final private CountDownLatch latch; +// +// public CounterThread(Semaphore start, CountDownLatch latch, AtomicInteger counter) { +// this.start = start; +// this.counter = counter; +// this.latch = latch; +// } +// +// @Override +// public void run() { +// +// try { +// start.acquire(); +// } catch (InterruptedException e) { +// e.printStackTrace(); +// } +// +// int work = 0; +// for(int i=0;i<10000000;i++) { +// counter.incrementAndGet(); +// for(int j=0;j<100;j++) work++; +// counter.decrementAndGet(); +// } +// +// latch.countDown(); +// +// System.out.println("work=" + work); +// +// } +// +// } +// +// CountDownLatch latch = new CountDownLatch(8); +// AtomicInteger counter = new AtomicInteger(0); +// Semaphore starter = new Semaphore(0); +// +// for(int i=0;i<8;i++) new CounterThread(starter, latch, counter).start(); +// +// Thread.sleep(500); +// +// starter.release(8); +// long start = System.nanoTime(); +// latch.await(); +// long duration = System.nanoTime() - start; +// +// System.out.println("counter=" + counter.get()); +// +// System.out.println("Finished in " + 1e-9*duration + "s."); +// +// } +// +// public void test2() throws Exception { +// +// class CounterThread extends Thread { +// +// final private int index; +// final private Semaphore start; +// final private AtomicIntegerArray counter; +// final private CountDownLatch latch; +// +// public CounterThread(int index, Semaphore start, CountDownLatch latch, AtomicIntegerArray counter) { +// this.index = index; +// this.start = start; +// this.counter = counter; +// this.latch = latch; +// } +// +// @Override +// public void run() { +// +// try { +// start.acquire(); +// } catch (InterruptedException e) { +// e.printStackTrace(); +// } +// +// for(int i=0;i<50000000;i++) { +// counter.incrementAndGet(index); +// } +// +// latch.countDown(); +// +// } +// +// } +// +// CountDownLatch latch = new CountDownLatch(4); +// AtomicIntegerArray counter = new AtomicIntegerArray(4); +// Semaphore starter = new Semaphore(0); +// +// for(int i=0;i<4;i++) new CounterThread(i, starter, latch, counter).start(); +// +// Thread.sleep(500); +// +// starter.release(4); +// long start = System.nanoTime(); +// latch.await(); +// long duration = System.nanoTime() - start; +// +// //System.out.println("counter=" + counter.get()); +// +// System.out.println("[counter=" + counter + "]: Finished in " + 1e-9*duration + "s."); +// +// } +// +// public void test3() throws Exception { +// +// class CounterThread extends Thread { +// +// final private int index; +// final private Semaphore start; +// final private AtomicInteger counter; +// final private CountDownLatch latch; +// +// public CounterThread(int index, Semaphore start, CountDownLatch latch, AtomicInteger counter) { +// this.index = index; +// this.start = start; +// this.counter = counter; +// this.latch = latch; +// } +// +// @Override +// public void run() { +// +// try { +// start.acquire(); +// } catch (InterruptedException e) { +// e.printStackTrace(); +// } +// +// for(int i=0;i<50000000;i++) { +// counter.incrementAndGet(); +// } +// +// latch.countDown(); +// +// } +// +// } +// +// CountDownLatch latch = new CountDownLatch(4); +// AtomicInteger counter = new AtomicInteger(0); +// Semaphore starter = new Semaphore(0); +// +// for(int i=0;i<4;i++) new CounterThread(i, starter, latch, counter).start(); +// +// Thread.sleep(500); +// +// starter.release(4); +// long start = System.nanoTime(); +// latch.await(); +// long duration = System.nanoTime() - start; +// +// //System.out.println("counter=" + counter.get()); +// +// System.out.println("[counter=" + counter + "]: Finished in " + 1e-9*duration + "s."); +// +// } + + public void test4() throws Exception { + + int size = 50000000; + + for(int i=0;i<2;i++) { + runTest3(1, size, 4); + runTest3(2, size, 4); + runTest3(4, size, 4); + runTest3(8, size, 4); + runTest3(16, size, 4); + runTest3(32, size, 4); + runTest3(64, size, 4); + runTest3(128, size, 4); + runTest3(256, size, 4); + runTest3(512, size, 4); + } + + } + + private void runTest3(final int STRIPE, final int size, final int threads) throws Exception { + + final int[] work = new int[STRIPE*threads]; + + class CounterThread extends Thread { + + final private int index; + final private Semaphore start; + final private CountDownLatch latch; + + public CounterThread(int index, Semaphore start, CountDownLatch latch) { + this.index = index; + this.start = start; + this.latch = latch; + } + + @Override + public void run() { + + try { + start.acquire(); + } catch (InterruptedException e) { + e.printStackTrace(); + } + + int offset = STRIPE*index; + + for(int i=0;i