diff --git a/VadereSimulator/src/org/vadere/simulator/models/density/IGaussianFilter.java b/VadereSimulator/src/org/vadere/simulator/models/density/IGaussianFilter.java index ad98d211481ebdc5ac6513c662d30acc610d3098..9b57fdbd63c6fef93b561d4524a48a15b0c98f9c 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 d19bbd0c6a4cc9b0bd9d53771167a43a33b4ef72..92e3c725cd7ea06ecfc5743abe4c414c64f9ce7e 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 92cf40319d68f17aa94a7c4469ea4c009a9fcd6d..3d335f889b73ecd11924b8041b61858ea53c04c2 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 5fca32e4f4f7b196d791ede6a2755e604d458b4f..c0942e5ca622075bca97eb081959c7454faa88a9 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 8204383adbf6841db5c839407651783108e6b4b2..c7b3fc6b2538bf0f4a8d2df492a97745cee810f6 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 766059f7449b5092fb3bc810aa403d277520344b..d3e3feb8cd1d4df36173049dcf68551af770eecf 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 643f2d054075e683cf7162a4f1271db92a1c7d90..6f771399c2a25e7b84514b1951ccb91ed9ace95f 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 0000000000000000000000000000000000000000..885e7ece76b85703a57d8bdf60bdde9a3ac07014 --- /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"); + } + +}