| Type | Visibility | Attributes | Name | Initial | |||
|---|---|---|---|---|---|---|---|
| type(shared_rhash_t), | private | :: | shared_ht |
| procedure, public :: hash_function | |
| procedure, public :: alloc | |
| procedure, public :: dealloc | |
| procedure, public :: count_index | |
| procedure, public :: add_index | |
| procedure, public :: finalize_setup | |
| procedure, public :: setup_offsets | |
| procedure, public :: lookup | |
| procedure, public :: known_conflicts | |
| procedure, public :: sync |
Get the hash value for an arbitrary input value
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(index_rhash_t), | intent(in) | :: | this | |||
| integer(kind=int64), | intent(in) | :: | index |
input value to get the hash value for |
During initialisation, we can only start writing values once the offsets are known. This requires knowledge about the number of conflicts per hash value. This function tells us whether the conflicts have already been counted.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(index_rhash_t), | intent(in) | :: | this |
Allocate the internal (shared) memory
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(index_rhash_t), | intent(inout) | :: | this | |||
| integer(kind=int64), | intent(in) | :: | n_elem |
number of distinct values to store |
||
| integer(kind=int64), | intent(in) | :: | htsize |
range of the hash function |
Deallocate all arrays associated with this hash table object
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(index_rhash_t), | intent(inout) | :: | this |
Log the occurence of this index in the set of indices to be stored Does not add it, only updates the offsets
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(index_rhash_t), | intent(inout) | :: | this | |||
| integer(kind=int64), | intent(in) | :: | index |
index value to be logged |
For performance reasons, we cannot directly calculate the offsets, but instead first count the number of conflicts per hash value. Then, we sum these up cumulatively Directly counting the offsets is horrifically slow
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(index_rhash_t), | intent(inout) | :: | this |
Add an input value to the stored values, assuming we already know the offsets
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(index_rhash_t), | intent(inout) | :: | this | |||
| integer(kind=int64), | intent(in) | :: | index |
value to be stored |
||
| integer(kind=int64), | intent(out) | :: | pos |
on return, the position where this value was stored |
Dealloates temporary arrays used for initialisation
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(index_rhash_t) | :: | this |
Look up a value in this hash table. Returns whether the value is stored and if yes, where
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(index_rhash_t), | intent(in) | :: | this | |||
| integer(kind=int64), | intent(in) | :: | index |
value to be looked up |
||
| integer(kind=int64), | intent(out) | :: | pos |
on return, the position of index if found, else 0 |
||
| logical, | intent(out) | :: | t_found |
on return, true if and only if index was found |
For a MPI-3 shared memory array, synchronization is required after/before each read/write epoch
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(index_rhash_t), | intent(inout) | :: | this |