Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
V
vadere
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Locked Files
Issues
110
Issues
110
List
Boards
Labels
Service Desk
Milestones
Iterations
Merge Requests
3
Merge Requests
3
Requirements
Requirements
List
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Security & Compliance
Security & Compliance
Dependency List
License Compliance
Operations
Operations
Incidents
Environments
Analytics
Analytics
CI / CD
Code Review
Insights
Issue
Repository
Value Stream
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
vadere
vadere
Commits
3da97584
Commit
3da97584
authored
Jul 10, 2018
by
Benedikt Kleinmeier
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'develop' of gitlab.lrz.de:vadere/vadere into develop
parents
e52611ce
dbb6b563
Pipeline
#61292
failed with stage
in 21 seconds
Changes
13
Pipelines
1
Hide whitespace changes
Inline
Side-by-side
Showing
13 changed files
with
812 additions
and
55 deletions
+812
-55
VadereGui/src/org/vadere/gui/postvisualization/model/PostvisualizationModel.java
...e/gui/postvisualization/model/PostvisualizationModel.java
+1
-1
VadereGui/src/org/vadere/gui/projectview/view/TextView.java
VadereGui/src/org/vadere/gui/projectview/view/TextView.java
+2
-2
VadereSimulator/src/org/vadere/simulator/control/Simulation.java
...imulator/src/org/vadere/simulator/control/Simulation.java
+1
-1
VadereSimulator/src/org/vadere/simulator/entrypoints/ScenarioBuilder.java
...src/org/vadere/simulator/entrypoints/ScenarioBuilder.java
+4
-4
VadereSimulator/src/org/vadere/simulator/models/MainModelBuilder.java
...tor/src/org/vadere/simulator/models/MainModelBuilder.java
+3
-3
VadereSimulator/src/org/vadere/simulator/projects/Scenario.java
...Simulator/src/org/vadere/simulator/projects/Scenario.java
+20
-26
VadereSimulator/src/org/vadere/simulator/projects/ScenarioRun.java
...ulator/src/org/vadere/simulator/projects/ScenarioRun.java
+4
-4
VadereSimulator/src/org/vadere/simulator/projects/ScenarioStore.java
...ator/src/org/vadere/simulator/projects/ScenarioStore.java
+54
-5
VadereSimulator/src/org/vadere/simulator/projects/io/JsonConverter.java
...r/src/org/vadere/simulator/projects/io/JsonConverter.java
+8
-8
VadereUtils/resources/BitonicSort.cl
VadereUtils/resources/BitonicSort.cl
+241
-0
VadereUtils/src/org/vadere/util/opencl/CLBitonicSort.java
VadereUtils/src/org/vadere/util/opencl/CLBitonicSort.java
+374
-0
VadereUtils/src/org/vadere/util/opencl/CLUtils.java
VadereUtils/src/org/vadere/util/opencl/CLUtils.java
+23
-1
VadereUtils/tests/org/vadere/util/math/TestBitonicSort.java
VadereUtils/tests/org/vadere/util/math/TestBitonicSort.java
+77
-0
No files found.
VadereGui/src/org/vadere/gui/postvisualization/model/PostvisualizationModel.java
View file @
3da97584
...
...
@@ -300,7 +300,7 @@ public class PostvisualizationModel extends SimulationModel<PostvisualizationCon
private
double
getSimTimeInSec
(
final
Step
step
)
{
return
step
.
getSimTimeInSec
()
.
orElse
(
step
.
getStepNumber
()
*
vadere
.
getScenarioStore
().
attributesSimulation
.
getSimTimeStepLength
());
.
orElse
(
step
.
getStepNumber
()
*
vadere
.
getScenarioStore
().
getAttributesSimulation
()
.
getSimTimeStepLength
());
}
public
synchronized
void
setPotentialFieldContainer
(
final
PotentialFieldContainer
container
)
{
...
...
VadereGui/src/org/vadere/gui/projectview/view/TextView.java
View file @
3da97584
...
...
@@ -173,7 +173,7 @@ public class TextView extends JPanel implements IJsonView {
switch
(
attributeType
)
{
case
MODEL:
ModelDefinition
modelDefinition
=
JsonConverter
.
deserializeModelDefinition
(
json
);
currentScenario
.
getScenarioStore
().
mainModel
=
modelDefinition
.
getMainModel
(
);
currentScenario
.
getScenarioStore
().
setMainModel
(
modelDefinition
.
getMainModel
()
);
currentScenario
.
setAttributesModel
(
modelDefinition
.
getAttributesList
());
break
;
case
SIMULATION:
...
...
@@ -220,7 +220,7 @@ public class TextView extends JPanel implements IJsonView {
switch
(
attributeType
)
{
case
MODEL:
txtrTextfiletextarea
.
setText
(
StateJsonConverter
.
serializeMainModelAttributesModelBundle
(
scenario
.
getModelAttributes
(),
scenario
.
getScenarioStore
().
mainModel
));
scenario
.
getModelAttributes
(),
scenario
.
getScenarioStore
().
getMainModel
()
));
break
;
case
SIMULATION:
txtrTextfiletextarea
...
...
VadereSimulator/src/org/vadere/simulator/control/Simulation.java
View file @
3da97584
...
...
@@ -67,7 +67,7 @@ public class Simulation {
this
.
name
=
name
;
this
.
mainModel
=
mainModel
;
this
.
scenarioStore
=
scenarioStore
;
this
.
attributesSimulation
=
scenarioStore
.
attributesSimulation
;
this
.
attributesSimulation
=
scenarioStore
.
getAttributesSimulation
()
;
this
.
attributesAgent
=
scenarioStore
.
getTopography
().
getAttributesPedestrian
();
this
.
sourceControllers
=
new
LinkedList
<>();
this
.
targetControllers
=
new
LinkedList
<>();
...
...
VadereSimulator/src/org/vadere/simulator/entrypoints/ScenarioBuilder.java
View file @
3da97584
...
...
@@ -61,9 +61,9 @@ public class ScenarioBuilder {
// TODO: duplicated code
if
(
AttributesSimulation
.
class
==
clazz
){
builder
=
new
AttributesBuilder
<>((
E
)
store
.
attributesSimulation
);
builder
=
new
AttributesBuilder
<>((
E
)
store
.
getAttributesSimulation
()
);
builder
.
setField
(
fieldName
,
value
);
store
.
attributesSimulation
=
(
AttributesSimulation
)
builder
.
build
(
);
store
.
setAttributesSimulation
((
AttributesSimulation
)
builder
.
build
()
);
}
else
if
(
AttributesAgent
.
class
==
clazz
){
builder
=
new
AttributesBuilder
<>((
E
)
store
.
getTopography
().
getAttributesPedestrian
());
...
...
@@ -84,8 +84,8 @@ public class ScenarioBuilder {
else
{
builder
=
new
AttributesBuilder
<>(
store
.
getAttributes
(
clazz
));
builder
.
setField
(
fieldName
,
value
);
store
.
attributesList
.
remove
If
(
attributes
->
attributes
.
getClass
()
==
clazz
);
store
.
a
ttributesList
.
add
(
builder
.
build
());
store
.
removeAttributes
If
(
attributes
->
attributes
.
getClass
()
==
clazz
);
store
.
a
ddAttributes
(
builder
.
build
());
}
}
...
...
VadereSimulator/src/org/vadere/simulator/models/MainModelBuilder.java
View file @
3da97584
...
...
@@ -25,7 +25,7 @@ public class MainModelBuilder {
public
void
createModelAndRandom
()
throws
ClassNotFoundException
,
InstantiationException
,
IllegalAccessException
{
final
AttributesSimulation
attributesSimulation
=
scenarioStore
.
attributesSimulation
;
final
AttributesSimulation
attributesSimulation
=
scenarioStore
.
getAttributesSimulation
()
;
if
(
attributesSimulation
.
isUseRandomSeed
())
{
random
=
new
Random
(
attributesSimulation
.
getRandomSeed
());
}
else
{
...
...
@@ -45,10 +45,10 @@ public class MainModelBuilder {
}
private
MainModel
instantiateMainModel
(
Random
random
)
{
String
mainModelName
=
scenarioStore
.
mainModel
;
String
mainModelName
=
scenarioStore
.
getMainModel
()
;
DynamicClassInstantiator
<
MainModel
>
instantiator
=
new
DynamicClassInstantiator
<>();
MainModel
mainModel
=
instantiator
.
createObject
(
mainModelName
);
mainModel
.
initialize
(
scenarioStore
.
attributesList
,
scenarioStore
.
getTopography
(),
mainModel
.
initialize
(
scenarioStore
.
getAttributesList
()
,
scenarioStore
.
getTopography
(),
scenarioStore
.
getTopography
().
getAttributesPedestrian
(),
random
);
return
mainModel
;
}
...
...
VadereSimulator/src/org/vadere/simulator/projects/Scenario.java
View file @
3da97584
...
...
@@ -11,6 +11,7 @@ import java.util.List;
import
org.apache.log4j.LogManager
;
import
org.apache.log4j.Logger
;
import
org.jetbrains.annotations.NotNull
;
import
org.vadere.simulator.projects.dataprocessing.DataProcessingJsonManager
;
import
org.vadere.simulator.projects.io.JsonConverter
;
import
org.vadere.state.attributes.Attributes
;
...
...
@@ -32,24 +33,17 @@ import difflib.DiffUtils;
public
class
Scenario
{
private
static
Logger
logger
=
LogManager
.
getLogger
(
Scenario
.
class
);
private
ScenarioStore
scenarioStore
;
private
DataProcessingJsonManager
dataProcessingJsonManager
;
private
String
savedStateSerialized
;
private
String
currentStateSerialized
;
public
Scenario
(
final
String
name
)
{
this
(
name
,
new
ScenarioStore
(
name
));
}
public
Scenario
(
final
ScenarioStore
store
)
{
this
(
store
.
name
,
store
);
this
(
new
ScenarioStore
(
name
));
}
public
Scenario
(
final
String
name
,
final
ScenarioStore
store
)
{
public
Scenario
(
@NotNull
final
ScenarioStore
store
)
{
this
.
scenarioStore
=
store
;
this
.
dataProcessingJsonManager
=
new
DataProcessingJsonManager
();
...
...
@@ -88,7 +82,7 @@ public class Scenario {
}
public
String
getName
()
{
return
scenarioStore
.
name
;
return
scenarioStore
.
getName
()
;
}
public
ScenarioStore
getScenarioStore
()
{
...
...
@@ -96,7 +90,7 @@ public class Scenario {
}
public
List
<
Attributes
>
getModelAttributes
()
{
return
scenarioStore
.
attributesList
;
return
scenarioStore
.
getAttributesList
()
;
}
public
AttributesAgent
getAttributesPedestrian
()
{
...
...
@@ -104,26 +98,26 @@ public class Scenario {
}
public
AttributesSimulation
getAttributesSimulation
()
{
return
scenarioStore
.
attributesSimulation
;
return
scenarioStore
.
getAttributesSimulation
()
;
}
public
Topography
getTopography
()
{
return
scenarioStore
.
getTopography
();
}
public
void
setName
(
String
name
)
{
this
.
scenarioStore
.
name
=
name
;
public
void
setName
(
@NotNull
final
String
name
)
{
this
.
scenarioStore
.
setName
(
name
)
;
}
public
void
setAttributesModel
(
List
<
Attributes
>
attributesList
)
{
scenarioStore
.
attributesList
=
attributesList
;
public
void
setAttributesModel
(
@NotNull
final
List
<
Attributes
>
attributesList
)
{
scenarioStore
.
setAttributesList
(
attributesList
)
;
}
public
void
setAttributesSimulation
(
AttributesSimulation
attributesSimulation
)
{
this
.
scenarioStore
.
attributesSimulation
=
attributesSimulation
;
public
void
setAttributesSimulation
(
@NotNull
final
AttributesSimulation
attributesSimulation
)
{
this
.
scenarioStore
.
setAttributesSimulation
(
attributesSimulation
)
;
}
public
void
setTopography
(
final
Topography
topography
)
{
public
void
setTopography
(
@NotNull
final
Topography
topography
)
{
scenarioStore
.
setTopography
(
topography
);
}
...
...
@@ -142,7 +136,7 @@ public class Scenario {
}
public
String
getDisplayName
()
{
return
scenarioStore
.
name
+
(
hasUnsavedChanges
()
?
"*"
:
""
);
return
scenarioStore
.
getName
()
+
(
hasUnsavedChanges
()
?
"*"
:
""
);
}
public
void
discardChanges
()
{
...
...
@@ -157,16 +151,16 @@ public class Scenario {
}
public
String
getDescription
()
{
return
scenarioStore
.
description
;
return
scenarioStore
.
getDescription
()
;
}
public
void
setDescription
(
String
description
)
{
scenarioStore
.
description
=
description
;
scenarioStore
.
setDescription
(
description
)
;
}
public
String
readyToRunResponse
()
{
// TODO [priority=medium] [task=check] add more conditions
if
(
scenarioStore
.
mainModel
==
null
)
{
return
scenarioStore
.
name
+
": no mainModel is set"
;
if
(
scenarioStore
.
getMainModel
()
==
null
)
{
return
scenarioStore
.
getName
()
+
": no mainModel is set"
;
}
return
null
;
}
...
...
@@ -175,11 +169,11 @@ public class Scenario {
return
dataProcessingJsonManager
;
}
public
void
setDataProcessingJsonManager
(
final
DataProcessingJsonManager
manager
)
{
public
void
setDataProcessingJsonManager
(
@NotNull
final
DataProcessingJsonManager
manager
)
{
this
.
dataProcessingJsonManager
=
manager
;
}
public
void
saveToOutputPath
(
final
Path
outputPath
)
{
public
void
saveToOutputPath
(
@NotNull
final
Path
outputPath
)
{
try
(
PrintWriter
out
=
new
PrintWriter
(
Paths
.
get
(
outputPath
.
toString
(),
getName
()
+
IOUtils
.
SCENARIO_FILE_EXTENSION
).
toString
()))
{
out
.
println
(
JsonConverter
.
serializeScenarioRunManager
(
this
,
true
));
}
catch
(
IOException
e
)
{
...
...
VadereSimulator/src/org/vadere/simulator/projects/ScenarioRun.java
View file @
3da97584
...
...
@@ -84,7 +84,7 @@ public class ScenarioRun implements Runnable {
final
Random
random
=
modelBuilder
.
getRandom
();
// prepare processors and simulation data writer
if
(
scenarioStore
.
attributesSimulation
.
isWriteSimulationData
())
{
if
(
scenarioStore
.
getAttributesSimulation
()
.
isWriteSimulationData
())
{
processorManager
=
dataProcessingJsonManager
.
createProcessorManager
(
mainModel
);
}
...
...
@@ -97,7 +97,7 @@ public class ScenarioRun implements Runnable {
sealAllAttributes
();
// Run simulation main loop from start time = 0 seconds
simulation
=
new
Simulation
(
mainModel
,
0
,
scenarioStore
.
name
,
scenarioStore
,
passiveCallbacks
,
random
,
processorManager
);
simulation
=
new
Simulation
(
mainModel
,
0
,
scenarioStore
.
getName
()
,
scenarioStore
,
passiveCallbacks
,
random
,
processorManager
);
}
simulation
.
run
();
...
...
@@ -165,8 +165,8 @@ public class ScenarioRun implements Runnable {
}
public
String
readyToRunResponse
()
{
// TODO [priority=medium] [task=check] add more conditions
if
(
scenarioStore
.
mainModel
==
null
)
{
return
scenarioStore
.
name
+
": no mainModel is set"
;
if
(
scenarioStore
.
getMainModel
()
==
null
)
{
return
scenarioStore
.
getName
()
+
": no mainModel is set"
;
}
return
null
;
}
...
...
VadereSimulator/src/org/vadere/simulator/projects/ScenarioStore.java
View file @
3da97584
...
...
@@ -3,6 +3,7 @@ package org.vadere.simulator.projects;
import
java.io.IOException
;
import
java.util.ArrayList
;
import
java.util.List
;
import
java.util.function.Predicate
;
import
org.apache.commons.codec.digest.DigestUtils
;
import
org.apache.log4j.LogManager
;
...
...
@@ -28,11 +29,11 @@ import com.fasterxml.jackson.core.JsonProcessingException;
public
class
ScenarioStore
{
private
static
Logger
logger
=
LogManager
.
getLogger
(
ScenarioStore
.
class
);
p
ublic
String
name
;
p
ublic
String
description
;
p
ublic
String
mainModel
;
p
ublic
List
<
Attributes
>
attributesList
;
p
ublic
AttributesSimulation
attributesSimulation
;
p
rivate
String
name
;
p
rivate
String
description
;
p
rivate
String
mainModel
;
p
rivate
List
<
Attributes
>
attributesList
;
p
rivate
AttributesSimulation
attributesSimulation
;
private
Topography
topography
;
public
ScenarioStore
(
final
String
name
,
final
String
description
,
final
String
mainModel
,
final
List
<
Attributes
>
attributesModel
,
...
...
@@ -85,4 +86,52 @@ public class ScenarioStore {
public
<
T
extends
Attributes
>
T
getAttributes
(
@NotNull
final
Class
<
T
>
clazz
)
{
return
FindByClass
.
findSingleObjectOfClass
(
attributesList
,
clazz
);
}
public
void
setAttributesList
(
final
List
<
Attributes
>
attributesList
)
{
this
.
attributesList
=
attributesList
;
}
public
void
setAttributesSimulation
(
final
AttributesSimulation
attributesSimulation
)
{
this
.
attributesSimulation
=
attributesSimulation
;
}
public
void
removeAttributesIf
(
@NotNull
final
Predicate
<
Attributes
>
predicate
)
{
attributesList
.
removeIf
(
predicate
);
}
public
void
addAttributes
(
@NotNull
final
Attributes
attributes
)
{
attributesList
.
add
(
attributes
);
}
public
void
setDescription
(
final
String
description
)
{
this
.
description
=
description
;
}
public
void
setMainModel
(
final
String
mainModel
)
{
this
.
mainModel
=
mainModel
;
}
public
void
setName
(
final
String
name
)
{
this
.
name
=
name
;
}
public
AttributesSimulation
getAttributesSimulation
()
{
return
attributesSimulation
;
}
public
List
<
Attributes
>
getAttributesList
()
{
return
attributesList
;
}
public
String
getDescription
()
{
return
description
;
}
public
String
getMainModel
()
{
return
mainModel
;
}
public
String
getName
()
{
return
name
;
}
}
VadereSimulator/src/org/vadere/simulator/projects/io/JsonConverter.java
View file @
3da97584
...
...
@@ -87,8 +87,8 @@ public class JsonConverter {
}
private
static
void
serializeMeta
(
ObjectNode
node
,
boolean
commitHashIncluded
,
ScenarioStore
scenarioStore
)
{
node
.
put
(
"name"
,
scenarioStore
.
name
);
node
.
put
(
"description"
,
scenarioStore
.
description
);
node
.
put
(
"name"
,
scenarioStore
.
getName
()
);
node
.
put
(
"description"
,
scenarioStore
.
getDescription
()
);
node
.
put
(
"release"
,
HashGenerator
.
releaseNumber
());
if
(
commitHashIncluded
)
node
.
put
(
"commithash"
,
HashGenerator
.
commitHash
());
...
...
@@ -97,14 +97,14 @@ public class JsonConverter {
private
static
ObjectNode
serializeVadereNode
(
ScenarioStore
scenarioStore
)
{
ObjectNode
vadereNode
=
StateJsonConverter
.
createObjectNode
();
vadereNode
.
put
(
StateJsonConverter
.
MAIN_MODEL_KEY
,
scenarioStore
.
mainModel
);
vadereNode
.
put
(
StateJsonConverter
.
MAIN_MODEL_KEY
,
scenarioStore
.
getMainModel
()
);
// vadere > attributesModel
ObjectNode
attributesModelNode
=
StateJsonConverter
.
serializeAttributesModelToNode
(
scenarioStore
.
attributesList
);
ObjectNode
attributesModelNode
=
StateJsonConverter
.
serializeAttributesModelToNode
(
scenarioStore
.
getAttributesList
()
);
vadereNode
.
set
(
"attributesModel"
,
attributesModelNode
);
// vadere > attributesSimulation
vadereNode
.
set
(
"attributesSimulation"
,
StateJsonConverter
.
convertValue
(
scenarioStore
.
attributesSimulation
,
JsonNode
.
class
));
vadereNode
.
set
(
"attributesSimulation"
,
StateJsonConverter
.
convertValue
(
scenarioStore
.
getAttributesSimulation
()
,
JsonNode
.
class
));
// vadere > topography
ObjectNode
topographyNode
=
StateJsonConverter
.
serializeTopographyToNode
(
scenarioStore
.
getTopography
());
...
...
@@ -119,10 +119,10 @@ public class JsonConverter {
}
public
static
ScenarioStore
cloneScenarioStore
(
ScenarioStore
scenarioStore
)
throws
IOException
{
JsonNode
attributesSimulationNode
=
StateJsonConverter
.
convertValue
(
scenarioStore
.
attributesSimulation
,
JsonNode
.
class
);
ObjectNode
attributesModelNode
=
StateJsonConverter
.
serializeAttributesModelToNode
(
scenarioStore
.
attributesList
);
JsonNode
attributesSimulationNode
=
StateJsonConverter
.
convertValue
(
scenarioStore
.
getAttributesSimulation
()
,
JsonNode
.
class
);
ObjectNode
attributesModelNode
=
StateJsonConverter
.
serializeAttributesModelToNode
(
scenarioStore
.
getAttributesList
()
);
ObjectNode
topographyNode
=
StateJsonConverter
.
serializeTopographyToNode
(
scenarioStore
.
getTopography
());
return
new
ScenarioStore
(
scenarioStore
.
name
,
scenarioStore
.
description
,
scenarioStore
.
mainModel
,
return
new
ScenarioStore
(
scenarioStore
.
getName
(),
scenarioStore
.
getDescription
(),
scenarioStore
.
getMainModel
()
,
StateJsonConverter
.
deserializeAttributesListFromNode
(
attributesModelNode
),
StateJsonConverter
.
deserializeAttributesSimulationFromNode
(
attributesSimulationNode
),
StateJsonConverter
.
deserializeTopographyFromNode
(
topographyNode
));
...
...
VadereUtils/resources/BitonicSort.cl
0 → 100644
View file @
3da97584
/*
*
Copyright
1993-2010
NVIDIA
Corporation.
All
rights
reserved.
*
*
Please
refer
to
the
NVIDIA
end
user
license
agreement
(
EULA
)
associated
*
with
this
source
code
for
terms
and
conditions
that
govern
your
use
of
*
this
software.
Any
use,
reproduction,
disclosure,
or
distribution
of
*
this
software
and
related
documentation
outside
the
terms
of
the
EULA
*
is
strictly
prohibited.
*
*/
#
define
LOCAL_SIZE_LIMIT
16U
inline
void
ComparatorPrivate
(
uint
*keyA,
uint
*valA,
uint
*keyB,
uint
*valB,
uint
dir
)
{
if
(
(
*keyA
>
*keyB
)
==
dir
)
{
uint
t
;
t
=
*keyA
; *keyA = *keyB; *keyB = t;
t
=
*valA
; *valA = *valB; *valB = t;
}
}
inline
void
ComparatorLocal
(
__local
uint
*keyA,
__local
uint
*valA,
__local
uint
*keyB,
__local
uint
*valB,
uint
dir
)
{
if
(
(
*keyA
>
*keyB
)
==
dir
)
{
uint
t
;
t
=
*keyA
; *keyA = *keyB; *keyB = t;
t
=
*valA
; *valA = *valB; *valB = t;
}
}
////////////////////////////////////////////////////////////////////////////////
//
Monolithic
bitonic
sort
kernel
for
short
arrays
fitting
into
local
memory
////////////////////////////////////////////////////////////////////////////////
__kernel
void
bitonicSortLocal
(
__global
uint
*d_DstKey,
__global
uint
*d_DstVal,
__global
uint
*d_SrcKey,
__global
uint
*d_SrcVal,
uint
arrayLength,
uint
dir
)
{
__local
uint
l_key[LOCAL_SIZE_LIMIT]
;
__local
uint
l_val[LOCAL_SIZE_LIMIT]
;
//Offset
to
the
beginning
of
subbatch
and
load
data
d_SrcKey
+=
get_group_id
(
0
)
*
LOCAL_SIZE_LIMIT
+
get_local_id
(
0
)
;
d_SrcVal
+=
get_group_id
(
0
)
*
LOCAL_SIZE_LIMIT
+
get_local_id
(
0
)
;
d_DstKey
+=
get_group_id
(
0
)
*
LOCAL_SIZE_LIMIT
+
get_local_id
(
0
)
;
d_DstVal
+=
get_group_id
(
0
)
*
LOCAL_SIZE_LIMIT
+
get_local_id
(
0
)
;
l_key[get_local_id
(
0
)
+
0]
=
d_SrcKey[
0]
;
l_val[get_local_id
(
0
)
+
0]
=
d_SrcVal[
0]
;
l_key[get_local_id
(
0
)
+
(
LOCAL_SIZE_LIMIT
/
2
)
]
=
d_SrcKey[
(
LOCAL_SIZE_LIMIT
/
2
)
]
;
l_val[get_local_id
(
0
)
+
(
LOCAL_SIZE_LIMIT
/
2
)
]
=
d_SrcVal[
(
LOCAL_SIZE_LIMIT
/
2
)
]
;
for
(
uint
size
=
2
; size < arrayLength; size <<= 1){
//Bitonic
merge
uint
ddd
=
dir
^
(
(
get_local_id
(
0
)
&
(
size
/
2
))
!=
0
)
;
for
(
uint
stride
=
size
/
2
; stride > 0; stride >>= 1){
barrier
(
CLK_LOCAL_MEM_FENCE
)
;
uint
pos
=
2
*
get_local_id
(
0
)
-
(
get_local_id
(
0
)
&
(
stride
-
1
))
;
ComparatorLocal
(
&l_key[pos
+
0],
&l_val[pos
+
0],
&l_key[pos
+
stride],
&l_val[pos
+
stride],
ddd
)
;
}
}
//ddd
==
dir
for
the
last
bitonic
merge
step
{
for
(
uint
stride
=
arrayLength
/
2
; stride > 0; stride >>= 1){
barrier
(
CLK_LOCAL_MEM_FENCE
)
;
uint
pos
=
2
*
get_local_id
(
0
)
-
(
get_local_id
(
0
)
&
(
stride
-
1
))
;
ComparatorLocal
(
&l_key[pos
+
0],
&l_val[pos
+
0],
&l_key[pos
+
stride],
&l_val[pos
+
stride],
dir
)
;
}
}
barrier
(
CLK_LOCAL_MEM_FENCE
)
;
d_DstKey[
0]
=
l_key[get_local_id
(
0
)
+
0]
;
d_DstVal[
0]
=
l_val[get_local_id
(
0
)
+
0]
;
d_DstKey[
(
LOCAL_SIZE_LIMIT
/
2
)
]
=
l_key[get_local_id
(
0
)
+
(
LOCAL_SIZE_LIMIT
/
2
)
]
;
d_DstVal[
(
LOCAL_SIZE_LIMIT
/
2
)
]
=
l_val[get_local_id
(
0
)
+
(
LOCAL_SIZE_LIMIT
/
2
)
]
;
}
////////////////////////////////////////////////////////////////////////////////
//
Bitonic
sort
kernel
for
large
arrays
(
not
fitting
into
local
memory
)
////////////////////////////////////////////////////////////////////////////////
//Bottom-level
bitonic
sort
//Almost
the
same
as
bitonicSortLocal
with
the
only
exception
//of
even
/
odd
subarrays
(
of
LOCAL_SIZE_LIMIT
points
)
being
//sorted
in
opposite
directions
__kernel
void
bitonicSortLocal1
(
__global
uint
*d_DstKey,
__global
uint
*d_DstVal,
__global
uint
*d_SrcKey,
__global
uint
*d_SrcVal
)
{
__local
uint
l_key[LOCAL_SIZE_LIMIT]
;
__local
uint
l_val[LOCAL_SIZE_LIMIT]
;
//Offset
to
the
beginning
of
subarray
and
load
data
d_SrcKey
+=
get_group_id
(
0
)
*
LOCAL_SIZE_LIMIT
+
get_local_id
(
0
)
;
d_SrcVal
+=
get_group_id
(
0
)
*
LOCAL_SIZE_LIMIT
+
get_local_id
(
0
)
;
d_DstKey
+=
get_group_id
(
0
)
*
LOCAL_SIZE_LIMIT
+
get_local_id
(
0
)
;
d_DstVal
+=
get_group_id
(
0
)
*
LOCAL_SIZE_LIMIT
+
get_local_id
(
0
)
;
l_key[get_local_id
(
0
)
+
0]
=
d_SrcKey[
0]
;
l_val[get_local_id
(
0
)
+
0]
=
d_SrcVal[
0]
;
l_key[get_local_id
(
0
)
+
(
LOCAL_SIZE_LIMIT
/
2
)
]
=
d_SrcKey[
(
LOCAL_SIZE_LIMIT
/
2
)
]
;
l_val[get_local_id
(
0
)
+
(
LOCAL_SIZE_LIMIT
/
2
)
]
=
d_SrcVal[
(
LOCAL_SIZE_LIMIT
/
2
)
]
;
uint
comparatorI
=
get_global_id
(
0
)
&
((
LOCAL_SIZE_LIMIT
/
2
)
-
1
)
;
for
(
uint
size
=
2
; size < LOCAL_SIZE_LIMIT; size <<= 1){
//Bitonic
merge
uint
ddd
=
(
comparatorI
&
(
size
/
2
))
!=
0
;
for
(
uint
stride
=
size
/
2
; stride > 0; stride >>= 1){
barrier
(
CLK_LOCAL_MEM_FENCE
)
;
uint
pos
=
2
*
get_local_id
(
0
)
-
(
get_local_id
(
0
)
&
(
stride
-
1
))
;
ComparatorLocal
(
&l_key[pos
+
0],
&l_val[pos
+
0],
&l_key[pos
+
stride],
&l_val[pos
+
stride],
ddd
)
;
}
}
//Odd
/
even
arrays
of
LOCAL_SIZE_LIMIT
elements
//sorted
in
opposite
directions
{
uint
ddd
=
(
get_group_id
(
0
)
&
1
)
;
for
(
uint
stride
=
LOCAL_SIZE_LIMIT
/
2
; stride > 0; stride >>= 1){
barrier
(
CLK_LOCAL_MEM_FENCE
)
;
uint
pos
=
2
*
get_local_id
(
0
)
-
(
get_local_id
(
0
)
&
(
stride
-
1
))
;
ComparatorLocal
(
&l_key[pos
+
0],
&l_val[pos
+
0],
&l_key[pos
+
stride],
&l_val[pos
+
stride],
ddd
)
;
}
}
barrier
(
CLK_LOCAL_MEM_FENCE
)
;
d_DstKey[
0]
=
l_key[get_local_id
(
0
)
+
0]
;
d_DstVal[
0]
=
l_val[get_local_id
(
0
)
+
0]
;
d_DstKey[
(
LOCAL_SIZE_LIMIT
/
2
)
]
=
l_key[get_local_id
(
0
)
+
(
LOCAL_SIZE_LIMIT
/
2
)
]
;
d_DstVal[
(
LOCAL_SIZE_LIMIT
/
2
)
]
=
l_val[get_local_id
(
0
)
+
(
LOCAL_SIZE_LIMIT
/
2
)
]
;
}
//Bitonic
merge
iteration
for
'stride
'
>=
LOCAL_SIZE_LIMIT
__kernel
void
bitonicMergeGlobal
(
__global
uint
*d_DstKey,
__global
uint
*d_DstVal,
__global
uint
*d_SrcKey,
__global
uint
*d_SrcVal,
uint
arrayLength,
uint
size,
uint
stride,
uint
dir
)
{
uint
global_comparatorI
=
get_global_id
(
0
)
;
uint
comparatorI
=
global_comparatorI
&
(
arrayLength
/
2
-
1
)
;
//Bitonic
merge
uint
ddd
=
dir
^
(
(
comparatorI
&
(
size
/
2
))
!=
0
)
;
uint
pos
=
2
*
global_comparatorI
-
(
global_comparatorI
&
(
stride
-
1
))
;
uint
keyA
=
d_SrcKey[pos
+
0]
;
uint
valA
=
d_SrcVal[pos
+
0]
;
uint
keyB
=
d_SrcKey[pos
+
stride]
;
uint
valB
=
d_SrcVal[pos
+
stride]
;
ComparatorPrivate
(
&keyA,
&valA,
&keyB,
&valB,
ddd
)
;
d_DstKey[pos
+
0]
=
keyA
;
d_DstVal[pos
+
0]
=
valA
;
d_DstKey[pos
+
stride]
=
keyB
;
d_DstVal[pos
+
stride]
=
valB
;
}
//Combined
bitonic
merge
steps
for
//
'size
'
>
LOCAL_SIZE_LIMIT
and
'stride
'
=
[1
..
LOCAL_SIZE_LIMIT
/
2]
__kernel
void
bitonicMergeLocal
(
__global
uint
*d_DstKey,
__global
uint
*d_DstVal,
__global
uint
*d_SrcKey,
__global
uint
*d_SrcVal,
uint
arrayLength,
uint
stride,
uint
size,
uint
dir
)
{
__local
uint
l_key[LOCAL_SIZE_LIMIT]
;
__local
uint
l_val[LOCAL_SIZE_LIMIT]
;
d_SrcKey
+=
get_group_id
(
0
)
*
LOCAL_SIZE_LIMIT
+
get_local_id
(
0
)
;
d_SrcVal
+=
get_group_id
(
0
)
*
LOCAL_SIZE_LIMIT
+
get_local_id
(
0
)
;
d_DstKey
+=
get_group_id
(
0
)
*
LOCAL_SIZE_LIMIT
+
get_local_id
(
0
)
;
d_DstVal
+=
get_group_id
(
0
)
*
LOCAL_SIZE_LIMIT
+
get_local_id
(
0
)
;
l_key[get_local_id
(
0
)
+
0]
=
d_SrcKey[
0]
;
l_val[get_local_id
(
0
)
+
0]
=
d_SrcVal[
0]
;
l_key[get_local_id
(
0
)
+
(
LOCAL_SIZE_LIMIT
/
2
)
]
=
d_SrcKey[
(
LOCAL_SIZE_LIMIT
/
2
)
]
;
l_val[get_local_id
(
0
)
+
(
LOCAL_SIZE_LIMIT
/
2
)
]
=
d_SrcVal[
(
LOCAL_SIZE_LIMIT
/
2
)
]
;
//Bitonic
merge
uint
comparatorI
=
get_global_id
(
0
)
&
((
arrayLength
/
2
)
-
1
)
;
uint
ddd
=
dir
^
(
(
comparatorI
&
(
size
/
2
))
!=
0
)
;
for
(
; stride > 0; stride >>= 1){
barrier
(
CLK_LOCAL_MEM_FENCE
)
;
uint
pos
=
2
*
get_local_id
(
0
)
-
(
get_local_id
(
0
)
&
(
stride
-
1
))
;
ComparatorLocal
(
&l_key[pos
+
0],
&l_val[pos
+
0],
&l_key[pos
+
stride],
&l_val[pos
+
stride],
ddd
)
;
}
barrier
(
CLK_LOCAL_MEM_FENCE
)
;
d_DstKey[
0]
=
l_key[get_local_id
(
0
)
+
0]
;
d_DstVal[
0]
=
l_val[get_local_id
(
0
)
+
0]
;
d_DstKey[
(
LOCAL_SIZE_LIMIT
/
2
)
]
=
l_key[get_local_id
(
0
)
+
(
LOCAL_SIZE_LIMIT
/
2
)
]
;
d_DstVal[
(
LOCAL_SIZE_LIMIT
/
2
)
]
=
l_val[get_local_id
(
0
)
+
(