[
https://issues.apache.org/jira/browse/UIMA-3619?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Marshall Schor resolved UIMA-3619.
----------------------------------
Resolution: Fixed
Changes: switched to internal hash code derived from murmurhash3 (in public
domain); this eliminates all volatile / atomic operations. Changed the hash
bucket collision algorithm to one that is more favorable to L1/L2/L3 caches -
using triangular numbers. For the case where a lookup fails, and then a new
cover instance is added to the table, avoided re-looking up to find the spot to
add the new item.
> improve Cas FS to JCas cover instance map
> -----------------------------------------
>
> Key: UIMA-3619
> URL: https://issues.apache.org/jira/browse/UIMA-3619
> Project: UIMA
> Issue Type: Improvement
> Components: Core Java Framework
> Affects Versions: 2.5.0SDK
> Reporter: Marshall Schor
> Assignee: Marshall Schor
> Priority: Minor
> Fix For: 2.5.1SDK
>
>
> In highly parallel environments running on multiple cores, profiling shows
> that the JCas map has performance issues due to volatile and atomic
> operations that are unneeded, but happen due to the use of the built-in Java
> Random function (which uses volatile and atomic operations, internally). This
> map doesn't need to support multi-threading operations - it is always used in
> a single-thread manner. Other optimizations are possible, due to the limited
> way this table is used. One of the common cases is an iterator fetching an
> existing FS from the CAS, and needing to supply the corresponding JCas object
> (if it exists). This operation first looks up in the Map using the address
> as the key, and if not found, then makes the JCas object, and then adds it to
> the map - an operation which repeats the same lookup in order to find the
> "empty slot" where it can store the item. This extra lookup can be
> eliminated.
--
This message was sent by Atlassian JIRA
(v6.1.5#6160)