You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@uima.apache.org by "Marshall Schor (JIRA)" <de...@uima.apache.org> on 2014/02/15 23:12:19 UTC

[jira] [Resolved] (UIMA-3619) improve Cas FS to JCas cover instance map

     [ 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)