TeeTime issueshttps://git.se.informatik.uni-kiel.de/teetime/teetime/-/issues2014-11-04T15:01:26+01:00https://git.se.informatik.uni-kiel.de/teetime/teetime/-/issues/8Introduce semantic annotations2014-11-04T15:01:26+01:00Christian WulfIntroduce semantic annotations* `<<IO>>`
* `<<stateless>>`
* `<<reduceable>>` (perhaps using an interface to access the `reduce()` method)
* ...* `<<IO>>`
* `<<stateless>>`
* `<<reduceable>>` (perhaps using an interface to access the `reduce()` method)
* ...https://git.se.informatik.uni-kiel.de/teetime/teetime/-/issues/9Implement an automatic concept to determine the semantic annotation(s) of a s...2014-08-07T07:57:10+02:00Christian WulfImplement an automatic concept to determine the semantic annotation(s) of a stagesee #8 see #8 https://git.se.informatik.uni-kiel.de/teetime/teetime/-/issues/10Introduce cardinality annotations2014-08-23T20:48:55+02:00Christian WulfIntroduce cardinality annotations* `0:1` (e.g., a `Clock`)
* `1:1`
* `1:n` (e.g., a `Directory2FilesReader`)
* `m:n`
* ...
Can help in choosing the optimal pipe implementation between two stages.
For example, consider two stages `a` and `b` where `a` produces ...* `0:1` (e.g., a `Clock`)
* `1:1`
* `1:n` (e.g., a `Directory2FilesReader`)
* `m:n`
* ...
Can help in choosing the optimal pipe implementation between two stages.
For example, consider two stages `a` and `b` where `a` produces at most 1 element per execution and `b` consumes at most 1 element per execution.
Let us assume that both stages are executed by the same thread.
Then, a pipe that connects both stages with each other does not need to be buffered.
Thus, in this case the optimal pipe implementation is an unbuffered and unsynchronized one.
`?(a)1 ---> 1(b)?`https://git.se.informatik.uni-kiel.de/teetime/teetime/-/issues/15Add license file for each dependency2014-08-31T22:19:59+02:00Nils Christian EhmkeAdd license file for each dependencyThe TeeTime directory should contain a lib folder with the correct license file for each dependency (just like in Kieker and Kieker's WebGUI). Furthermore: The TeeTime jar file with all dependencies contains a lot of different license fi...The TeeTime directory should contain a lib folder with the correct license file for each dependency (just like in Kieker and Kieker's WebGUI). Furthermore: The TeeTime jar file with all dependencies contains a lot of different license files, each reffering to another library (this is very confusing).https://git.se.informatik.uni-kiel.de/teetime/teetime/-/issues/35Implement a wait/notify mechanism2016-02-22T14:17:45+01:00Christian WulfImplement a wait/notify mechanismImplement a 'blocking pipe'Implement a 'blocking pipe'Version 2.1Christian WulfChristian Wulfhttps://git.se.informatik.uni-kiel.de/teetime/teetime/-/issues/36Implement an analysis config for evaluation purposes2016-02-22T14:19:04+01:00Christian WulfImplement an analysis config for evaluation purposesWe need a Pipes & Filters benchmark suite that provides conceptual benchmarks for at least the following scenarios
- an unsynchronized pipeline (single-threaded)
- to answer: efficiency
- a synchronized pipeline (single-threaded)
-...We need a Pipes & Filters benchmark suite that provides conceptual benchmarks for at least the following scenarios
- an unsynchronized pipeline (single-threaded)
- to answer: efficiency
- a synchronized pipeline (single-threaded)
- to answer: synchronization overhead (cp. single-threaded version)
- a synchronized pipeline (multi-threaded)
- to answer: scalability
- a looped pipeline
- to answer: applicability and efficiency
- a more complex analysis configuration that is not a pipeline
- to answer: applicability and efficiency
- an I/O-intensive analysis configuration
- to answer: efficiencyVersion 2.1Nelson Tavares de SousaNelson Tavares de Sousahttps://git.se.informatik.uni-kiel.de/teetime/teetime/-/issues/47How to pass signals within loops?2014-10-13T07:47:57+02:00Christian WulfHow to pass signals within loops?Problem:
Consider a stage with two input ports and two output ports. One of its output port is connnected with one of its input port. Thus, this stage contains a loop. If now the stage's semantics is defined to pass the termination sign...Problem:
Consider a stage with two input ports and two output ports. One of its output port is connnected with one of its input port. Thus, this stage contains a loop. If now the stage's semantics is defined to pass the termination signal only when it was received from each input port, this stage will never terminate because the input port with the loop will never receive the terminate signal.
The same problem arises when the loop extends over more than a single stage.https://git.se.informatik.uni-kiel.de/teetime/teetime/-/issues/54Add "Represents" Javadoc rule2016-02-22T14:19:04+01:00Christian WulfAdd "Represents" Javadoc ruleThis rule should ensure that the JavaDoc of all types (class, interface, and enum) starts with "Represents" + whitespaceThis rule should ensure that the JavaDoc of all types (class, interface, and enum) starts with "Represents" + whitespaceVersion 2.1Nelson Tavares de SousaNelson Tavares de Sousahttps://git.se.informatik.uni-kiel.de/teetime/teetime/-/issues/55What types of stateful dependencies do exist?2014-10-17T11:46:41+02:00Christian WulfWhat types of stateful dependencies do exist?### Shared field
- read to a shared field
- => stage can be duplicated
- write to a shared field; shared field is read not until the writing stage has completely finished its work (e.g., by triggering in ``onTerminating()``)
- => s...### Shared field
- read to a shared field
- => stage can be duplicated
- write to a shared field; shared field is read not until the writing stage has completely finished its work (e.g., by triggering in ``onTerminating()``)
- => stage can be duplicated
- recommendation: write should be performed on a unique set to reduce synchronization
- write to a shared field; shared field is read simultanenously
- => ???
### Private state field
- read and write a field without influencing the output ports, e.g., a counter
- => stage can be duplicated
- read and write a field with influencing the output ports
- => ???https://git.se.informatik.uni-kiel.de/teetime/teetime/-/issues/64Configure performance test job in jenkins2014-11-18T10:43:57+01:00Nelson Tavares de SousaConfigure performance test job in jenkinsThe project is deactivated for now.
* display performance tests as diagram (perhaps you need write your own jenkins plugin)The project is deactivated for now.
* display performance tests as diagram (perhaps you need write your own jenkins plugin)https://git.se.informatik.uni-kiel.de/teetime/teetime/-/issues/71Implement a generic aggregation filter2016-02-22T14:19:04+01:00Christian WulfImplement a generic aggregation filter- one input port of type ``T``, one output port of type ``AggregationContainer<T>``
- aggregation is performed with a user-defined aggregation function on instances of type ``T``
```java
class AggregationContainer<T> {
int count...- one input port of type ``T``, one output port of type ``AggregationContainer<T>``
- aggregation is performed with a user-defined aggregation function on instances of type ``T``
```java
class AggregationContainer<T> {
int count; // probably already accessible by the elements collection
? aggregatedBy
Collection<T> elements; // unordered or ordered?
}
```Version 2.1Nelson Tavares de SousaNelson Tavares de Sousahttps://git.se.informatik.uni-kiel.de/teetime/teetime/-/issues/101Disable PMD rule "CommentRequired" for getter/setter only2016-02-22T14:19:04+01:00Christian WulfDisable PMD rule "CommentRequired" for getter/setter only**Current state:**
The rule is completely excluded.
**Goal:**
The rule should be excluded for getter/setter methods only.
**Proposed solution:**
Write a new rule that exludes getter/setter methods.
``X get*()`` and ``void set...**Current state:**
The rule is completely excluded.
**Goal:**
The rule should be excluded for getter/setter methods only.
**Proposed solution:**
Write a new rule that exludes getter/setter methods.
``X get*()`` and ``void set*(X)``Version 2.1Nelson Tavares de SousaNelson Tavares de Sousahttps://git.se.informatik.uni-kiel.de/teetime/teetime/-/issues/105Optimize memory usage2015-02-12T16:58:51+01:00Nelson Tavares de SousaOptimize memory usage
* http://stackoverflow.com/questions/8923689/java-garbage-collector-get-the-deleted-objects
* https://docs.oracle.com/cd/E13150_01/jrockit_jvm/jrockit/tools/usingmmleak/index.html
* http://www.ibm.com/developerworks/library/j-leaks/
* http://stackoverflow.com/questions/8923689/java-garbage-collector-get-the-deleted-objects
* https://docs.oracle.com/cd/E13150_01/jrockit_jvm/jrockit/tools/usingmmleak/index.html
* http://www.ibm.com/developerworks/library/j-leaks/https://git.se.informatik.uni-kiel.de/teetime/teetime/-/issues/106Introduce load balancing strategy for the distributor2015-03-05T18:31:48+01:00Nelson Tavares de SousaIntroduce load balancing strategy for the distributorIt's possible to create a strategy which can monitor to pipes and determine which stage is faster.
Faster stages can receive a higher priority by sending more elements to the corresponding port.
Mainly, this is for demonstrating purp...It's possible to create a strategy which can monitor to pipes and determine which stage is faster.
Faster stages can receive a higher priority by sending more elements to the corresponding port.
Mainly, this is for demonstrating purposes, to show what's possible with teetime.https://git.se.informatik.uni-kiel.de/teetime/teetime/-/issues/117Create a TCP Pipe (or port?)2015-04-20T16:30:54+02:00Nelson Tavares de SousaCreate a TCP Pipe (or port?)Implement a prototype, which connects two different nodes.Implement a prototype, which connects two different nodes.https://git.se.informatik.uni-kiel.de/teetime/teetime/-/issues/119How to avoid null-checks in stages?2016-02-22T14:28:10+01:00Christian WulfHow to avoid null-checks in stages?**Current situation:**
The stage has to check for an empty input port.
If the input port is empty, the ``AbstractConsumerStage`` throws a cached ``EMPTY_INPUT_PORT_EXCEPTION``.
**Problem:**
The null-checks are uncomfortable an...**Current situation:**
The stage has to check for an empty input port.
If the input port is empty, the ``AbstractConsumerStage`` throws a cached ``EMPTY_INPUT_PORT_EXCEPTION``.
**Problem:**
The null-checks are uncomfortable and could be forgotten by the stage developer.
**A solution:**
Consider to invoke ``execute()`` only, if at least one input port has an element (for inter-thread scenarios).
Moreover, consider to also pass the input port via ``execute()`` to avoid null-checks.Version 2.1https://git.se.informatik.uni-kiel.de/teetime/teetime/-/issues/123Annotation for synched methods2015-03-23T10:58:20+01:00Nelson Tavares de SousaAnnotation for synched methodsIf a stage does contain a critical section which should only be executed sequentially, a user should mark it as such.
This would simplify the use of FDT techniques in future work, as it enables the calculation of the optimal number of t...If a stage does contain a critical section which should only be executed sequentially, a user should mark it as such.
This would simplify the use of FDT techniques in future work, as it enables the calculation of the optimal number of threads.
(FDT paper by Suleman -> SAT)https://git.se.informatik.uni-kiel.de/teetime/teetime/-/issues/125Automatically instantiate another worker thread if distributor terminates2016-02-22T14:28:10+01:00Christian WulfAutomatically instantiate another worker thread if distributor terminates- Either the distributor or a thread assignment scheduler instantiates the new worker.
- Either the distributor or the new worker thread steals elements from the other workers' pipes.
Work stealing is efficient if the theft is perfor...- Either the distributor or a thread assignment scheduler instantiates the new worker.
- Either the distributor or the new worker thread steals elements from the other workers' pipes.
Work stealing is efficient if the theft is performed not until the producer has finished.Version 2.1https://git.se.informatik.uni-kiel.de/teetime/teetime/-/issues/126Implement fibonacci experiment2016-02-22T14:28:10+01:00Christian WulfImplement fibonacci experiment```
FibonacciArgumentProducer(n) <- TODO
1->1
Distributor
1->* ---- thread bound ----
Fibonacci <- TODO
*->1 ---- thread bound ----
Merger
1->1
Adder <- TODO
...```
FibonacciArgumentProducer(n) <- TODO
1->1
Distributor
1->* ---- thread bound ----
Fibonacci <- TODO
*->1 ---- thread bound ----
Merger
1->1
Adder <- TODO
1->1
Collector
```Version 2.1https://git.se.informatik.uni-kiel.de/teetime/teetime/-/issues/127When and how to use loops in P&F architectures?2016-02-22T14:28:10+01:00Christian WulfWhen and how to use loops in P&F architectures?1. When is it absolutely necessary to model a loop?
1. If it is necessary, how should we realize loops, especially the termination of it?1. When is it absolutely necessary to model a loop?
1. If it is necessary, how should we realize loops, especially the termination of it?Version 2.1