From 9587ac67402b074d00dccaac6f6d6b8d285bc040 Mon Sep 17 00:00:00 2001 From: Benedikt Zoennchen Date: Tue, 28 Mar 2017 12:51:14 +0200 Subject: [PATCH] add simple javaCL test, which fails on os x and windows 10 --- .../models/density/IGaussianFilter.java | 1 - .../models/density/JGaussianFilter.java | 2 +- .../PedestrianDensityGaussianProcessor.java | 10 +++ .../PointDensityGaussianAlgorithm.java | 64 +++++++++---------- VadereUtils/pom.xml | 8 ++- .../org/vadere/util/math/CLConvolution.java | 3 +- .../src/org/vadere/util/math/Convolution.java | 2 +- .../org/vadere/util/opencl/TestJavaCL.java | 26 ++++++++ 8 files changed, 77 insertions(+), 39 deletions(-) create mode 100644 VadereUtils/tests/org/vadere/util/opencl/TestJavaCL.java diff --git a/VadereSimulator/src/org/vadere/simulator/models/density/IGaussianFilter.java b/VadereSimulator/src/org/vadere/simulator/models/density/IGaussianFilter.java index ad98d2114..9b57fdbd6 100644 --- a/VadereSimulator/src/org/vadere/simulator/models/density/IGaussianFilter.java +++ b/VadereSimulator/src/org/vadere/simulator/models/density/IGaussianFilter.java @@ -8,7 +8,6 @@ import java.util.function.BiFunction; import org.vadere.simulator.models.potential.timeCostFunction.loading.IPedestrianLoadingStrategy; import org.vadere.state.attributes.scenario.AttributesAgent; import org.vadere.state.scenario.Agent; -import org.vadere.state.scenario.Pedestrian; import org.vadere.state.scenario.Topography; /** diff --git a/VadereSimulator/src/org/vadere/simulator/models/density/JGaussianFilter.java b/VadereSimulator/src/org/vadere/simulator/models/density/JGaussianFilter.java index d19bbd0c6..92e3c725c 100644 --- a/VadereSimulator/src/org/vadere/simulator/models/density/JGaussianFilter.java +++ b/VadereSimulator/src/org/vadere/simulator/models/density/JGaussianFilter.java @@ -14,6 +14,6 @@ public class JGaussianFilter extends GaussianFilter { @Override public void filterImage() { - outputMatrix = Convolution.convolve(inputMatrix, kernel, matrixWidth, matrixHeight, kernelWidth); + outputMatrix = Convolution.convolveSeperate(inputMatrix, kernel, kernel, matrixWidth, matrixHeight, kernelWidth); } } diff --git a/VadereSimulator/src/org/vadere/simulator/projects/dataprocessing/processor/PedestrianDensityGaussianProcessor.java b/VadereSimulator/src/org/vadere/simulator/projects/dataprocessing/processor/PedestrianDensityGaussianProcessor.java index 92cf40319..3d335f889 100644 --- a/VadereSimulator/src/org/vadere/simulator/projects/dataprocessing/processor/PedestrianDensityGaussianProcessor.java +++ b/VadereSimulator/src/org/vadere/simulator/projects/dataprocessing/processor/PedestrianDensityGaussianProcessor.java @@ -2,6 +2,7 @@ package org.vadere.simulator.projects.dataprocessing.processor; import org.vadere.simulator.projects.dataprocessing.ProcessorManager; import org.vadere.state.attributes.processor.AttributesPedestrianDensityGaussianProcessor; +import org.vadere.state.attributes.processor.AttributesProcessor; /** * @author Mario Teixeira Parente @@ -19,4 +20,13 @@ public class PedestrianDensityGaussianProcessor extends PedestrianDensityProcess super.init(manager); } + + @Override + public AttributesProcessor getAttributes() { + if(super.getAttributes() == null) { + setAttributes(new AttributesPedestrianDensityGaussianProcessor()); + } + + return super.getAttributes(); + } } diff --git a/VadereSimulator/src/org/vadere/simulator/projects/dataprocessing/processor/PointDensityGaussianAlgorithm.java b/VadereSimulator/src/org/vadere/simulator/projects/dataprocessing/processor/PointDensityGaussianAlgorithm.java index 5fca32e4f..c0942e5ca 100644 --- a/VadereSimulator/src/org/vadere/simulator/projects/dataprocessing/processor/PointDensityGaussianAlgorithm.java +++ b/VadereSimulator/src/org/vadere/simulator/projects/dataprocessing/processor/PointDensityGaussianAlgorithm.java @@ -2,6 +2,8 @@ package org.vadere.simulator.projects.dataprocessing.processor; import org.vadere.simulator.control.SimulationState; import org.vadere.simulator.models.density.IGaussianFilter; +import org.vadere.simulator.models.potential.timeCostFunction.loading.IPedestrianLoadingStrategy; +import org.vadere.state.scenario.Pedestrian; import org.vadere.util.geometry.shapes.VPoint; /** @@ -35,37 +37,35 @@ public class PointDensityGaussianAlgorithm extends PointDensityAlgorithm { @Override public double getDensity(final VPoint pos, final SimulationState state) { -// if (state.getStep() > this.lastStep) { -// // obstacle will not change so we do it once. -// if (!this.filteredObstacles && this.isObstacleDensity) { -// this.obstacleFilter = IGaussianFilter.create( -// state.getTopography(), -// this.scale, -// this.standDev); -// this.obstacleFilter.filterImage(); -// this.filteredObstacles = true; -// } -// -// this.pedestrianFilter = IGaussianFilter.create( -// state.getTopography().getBounds(), -// state.getTopography().getElements(Pedestrian.class), -// this.scale, -// this.standDev, -// state.getTopography().getAttributesPedestrian(), -// IPedestrianLoadingStrategy.create()); -// this.pedestrianFilter.filterImage(); -// -// this.lastStep = state.getStep(); -// } -// -// double density = 0.0; -// if (this.isObstacleDensity) -// density = this.obstacleFilter.getFilteredValue(pos.x, pos.y); -// -// density += this.pedestrianFilter.getFilteredValue(pos.x, pos.y); -// -// return density; - - return 0.0; // TODO: uncomment above but wait until Bene fixed the OpenCL bug + if (state.getStep() > this.lastStep) { + // obstacle will not change so we do it once. + if (!this.filteredObstacles && this.isObstacleDensity) { + this.obstacleFilter = IGaussianFilter.create( + state.getTopography(), + this.scale, + this.standDev); + this.obstacleFilter.filterImage(); + this.filteredObstacles = true; + } + + this.pedestrianFilter = IGaussianFilter.create( + state.getTopography().getBounds(), + state.getTopography().getElements(Pedestrian.class), + this.scale, + this.standDev, + state.getTopography().getAttributesPedestrian(), + IPedestrianLoadingStrategy.create()); + this.pedestrianFilter.filterImage(); + + this.lastStep = state.getStep(); + } + + double density = 0.0; + if (this.isObstacleDensity) + density = this.obstacleFilter.getFilteredValue(pos.x, pos.y); + + density += this.pedestrianFilter.getFilteredValue(pos.x, pos.y); + + return density; } } diff --git a/VadereUtils/pom.xml b/VadereUtils/pom.xml index 8204383ad..c7b3fc6b2 100644 --- a/VadereUtils/pom.xml +++ b/VadereUtils/pom.xml @@ -92,7 +92,7 @@ - nativelibs4java + nativelibs4java-repo nativelibs4java Maven2 Repository http://nativelibs4java.sourceforge.net/maven @@ -101,13 +101,15 @@ com.nativelibs4java - libcl-bridj - 1.0-SNAPSHOT + bridj + 0.7.0 + compile com.nativelibs4java javacl 1.0.0-RC4 + compile diff --git a/VadereUtils/src/org/vadere/util/math/CLConvolution.java b/VadereUtils/src/org/vadere/util/math/CLConvolution.java index 766059f74..d3e3feb8c 100644 --- a/VadereUtils/src/org/vadere/util/math/CLConvolution.java +++ b/VadereUtils/src/org/vadere/util/math/CLConvolution.java @@ -14,7 +14,8 @@ public class CLConvolution { private Convolve gaussianFilter; public CLConvolution() throws IOException { - context = JavaCL.createBestContext(CLPlatform.DeviceFeature.GPU, CLPlatform.DeviceFeature.MaxComputeUnits); + //context = JavaCL.createBestContext(CLPlatform.DeviceFeature.CPU, CLPlatform.DeviceFeature.MaxComputeUnits); + context = JavaCL.createBestContext(); gaussianFilter = new Convolve(context); } diff --git a/VadereUtils/src/org/vadere/util/math/Convolution.java b/VadereUtils/src/org/vadere/util/math/Convolution.java index 643f2d054..6f771399c 100644 --- a/VadereUtils/src/org/vadere/util/math/Convolution.java +++ b/VadereUtils/src/org/vadere/util/math/Convolution.java @@ -129,7 +129,7 @@ public class Convolution { for (int yOut = 0; yOut < nHeight; yOut++) { for (int xOut = 0; xOut < nWidth; xOut++) { final int idxOut = yOut * nWidth + xOut; - outMatrix[idxOut] = convolveCol(tmpOutMatrix, rowVector, nWidth, nHeight, nFilterWidth, xOut, yOut); + outMatrix[idxOut] = convolveCol(tmpOutMatrix, colVector, nWidth, nHeight, nFilterWidth, xOut, yOut); } } return outMatrix; diff --git a/VadereUtils/tests/org/vadere/util/opencl/TestJavaCL.java b/VadereUtils/tests/org/vadere/util/opencl/TestJavaCL.java new file mode 100644 index 000000000..885e7ece7 --- /dev/null +++ b/VadereUtils/tests/org/vadere/util/opencl/TestJavaCL.java @@ -0,0 +1,26 @@ +package org.vadere.util.opencl; + +import com.nativelibs4java.opencl.CLContext; +import com.nativelibs4java.opencl.CLDevice; +import com.nativelibs4java.opencl.JavaCL; + +import org.junit.Test; + +/** + * @author Benedikt Zoennchen + */ +public class TestJavaCL { + + @Test + public void testContext() { + CLDevice device = JavaCL.getBestDevice(); + CLContext context = JavaCL.createContext(null, device); + /*for (int i = 0; i < devices.length; i++) { + System.err.println(i+": "+devices[i]); + }*/ + System.err.println("Now GC'ing"); + System.gc(); // crash here + System.err.println("GC'ed"); + } + +} -- GitLab