{"action":"closed","issue":{"url":"https://api.github.com/repos/ofi-cray/libfabric-cray/issues/645","repository_url":"https://api.github.com/repos/ofi-cray/libfabric-cray","labels_url":"https://api.github.com/repos/ofi-cray/libfabric-cray/issues/645/labels{/name}","comments_url":"https://api.github.com/repos/ofi-cray/libfabric-cray/issues/645/comments","events_url":"https://api.github.com/repos/ofi-cray/libfabric-cray/issues/645/events","html_url":"https://github.com/ofi-cray/libfabric-cray/issues/645","id":129514732,"number":645,"title":"accelerate VC lookup when using FI_AV_TABLE addressing","user":{"login":"hppritcha","id":7818666,"avatar_url":"https://avatars.githubusercontent.com/u/7818666?v=3","gravatar_id":"","url":"https://api.github.com/users/hppritcha","html_url":"https://github.com/hppritcha","followers_url":"https://api.github.com/users/hppritcha/followers","following_url":"https://api.github.com/users/hppritcha/following{/other_user}","gists_url":"https://api.github.com/users/hppritcha/gists{/gist_id}","starred_url":"https://api.github.com/users/hppritcha/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/hppritcha/subscriptions","organizations_url":"https://api.github.com/users/hppritcha/orgs","repos_url":"https://api.github.com/users/hppritcha/repos","events_url":"https://api.github.com/users/hppritcha/events{/privacy}","received_events_url":"https://api.github.com/users/hppritcha/received_events","type":"User","site_admin":false},"labels":[{"url":"https://api.github.com/repos/ofi-cray/libfabric-cray/labels/enhancement","name":"enhancement","color":"84b6eb"}],"state":"closed","locked":false,"assignee":{"login":"e-harvey","id":7410674,"avatar_url":"https://avatars.githubusercontent.com/u/7410674?v=3","gravatar_id":"","url":"https://api.github.com/users/e-harvey","html_url":"https://github.com/e-harvey","followers_url":"https://api.github.com/users/e-harvey/followers","following_url":"https://api.github.com/users/e-harvey/following{/other_user}","gists_url":"https://api.github.com/users/e-harvey/gists{/gist_id}","starred_url":"https://api.github.com/users/e-harvey/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/e-harvey/subscriptions","organizations_url":"https://api.github.com/users/e-harvey/orgs","repos_url":"https://api.github.com/users/e-harvey/repos","events_url":"https://api.github.com/users/e-harvey/events{/privacy}","received_events_url":"https://api.github.com/users/e-harvey/received_events","type":"User","site_admin":false},"milestone":null,"comments":2,"created_at":"2016-01-28T17:12:15Z","updated_at":"2016-04-07T21:25:58Z","closed_at":"2016-04-07T21:25:58Z","body":"Currently, the ```gnix_vc``` objects associated with a ```gnix_fid_ep``` instance are always stored in a hash table.  For each send/recv/rma/atomic operations posted to a``` FI_EP_RDM``` endpoint, the ```_gnix_ep_get_vc``` method must be invoked to lookup the VC associated with the target address.\r\n\r\nFor the case of FI_AV_TABLE., where the application is essentially providing an index in to a table of addresses, it would be more efficient to use a vector for storing pointers to the VC's.  This would allow  a bypass of much of the logic in the first part of ```__gnix_ep_rdm_get_vc```.  Rather than first checking with   ```_gnix_av_lookup```, creating the hash key from the av_entry, then doing a lookup in the hash table, the code could be more like\r\n\r\n```\r\n   if (av->type == FI_AV_TABLE) {\r\n        if (ep->vc_table[dest_addr] == NULL) {\r\n                /* code pretty much like exists to alloc/connect vc */\r\n                ep->vc_table[dest_addr] = vc;\r\n        } else \r\n               *vc_ptr = ep->vc_table[dest_addr];\r\n```\r\nThere's already a hook in the ```gnix_fid_ep```  for using a ```vc_table``` rather than a ```vc_ht```.\r\n\r\nThis should help PGAS models like SHMEM, etc (which tend to use FI_AV_TABLE) small RMA puts, etc. a lot."}}