root/oshmem/proc/proc_group_cache.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. oshmem_group_cache_init
  2. oshmem_group_cache_destroy
  3. oshmem_group_cache_find
  4. oshmem_group_cache_insert

   1 /*
   2  * Copyright (c) 2013-2018 Mellanox Technologies, Inc.
   3  *                         All rights reserved.
   4  * Copyright (c) 2015      Research Organization for Information Science
   5  *                         and Technology (RIST). All rights reserved.
   6  * $COPYRIGHT$
   7  *
   8  * Additional copyrights may follow
   9  *
  10  * $HEADER$
  11  */
  12 #include "oshmem/proc/proc_group_cache.h"
  13 #include "oshmem/constants.h"
  14 #include "oshmem/runtime/runtime.h"
  15 
  16 #define OSHMEM_GROUP_CACHE_SIZE 1024
  17 
  18 static opal_hash_table_t group_cache;
  19 
  20 typedef struct {
  21     int pe_start;
  22     int pe_size;
  23     int pe_stride;
  24 } oshmem_group_key_t;
  25 
  26 static int group_cache_n_hits;
  27 static int group_cache_n_lookups;
  28 
  29 int oshmem_group_cache_init(void)
  30 {
  31     OBJ_CONSTRUCT(&group_cache, opal_hash_table_t);
  32     if (OPAL_SUCCESS != opal_hash_table_init(&group_cache, OSHMEM_GROUP_CACHE_SIZE)) {
  33         return OSHMEM_ERROR;
  34     }
  35     return OSHMEM_SUCCESS;
  36 }
  37 
  38 void oshmem_group_cache_destroy(void)
  39 {
  40     OBJ_DESTRUCT(&group_cache);
  41 }
  42 
  43 oshmem_group_t *oshmem_group_cache_find(int pe_start, int pe_stride, int pe_size)
  44 {
  45     oshmem_group_key_t key;
  46     oshmem_group_t *group;
  47 
  48     if (!oshmem_group_cache_enabled()) {
  49         return NULL;
  50     }
  51 
  52     key.pe_start  = pe_start;
  53     key.pe_size   = pe_size;
  54     key.pe_stride = pe_stride;
  55 
  56     group_cache_n_lookups++;
  57 
  58     if (OPAL_SUCCESS != opal_hash_table_get_value_ptr(&group_cache, &key,
  59                                                       sizeof(key), (void **)&group)) {
  60         return NULL;
  61     }
  62 
  63     group_cache_n_hits++;
  64     return group;
  65 }
  66 
  67 int oshmem_group_cache_insert(oshmem_group_t *group, int pe_start,
  68                               int pe_stride, int pe_size)
  69 {
  70     oshmem_group_key_t key;
  71 
  72     if (!oshmem_group_cache_enabled()) {
  73         return OSHMEM_SUCCESS;
  74     }
  75 
  76     key.pe_start  = pe_start;
  77     key.pe_size   = pe_size;
  78     key.pe_stride = pe_stride;
  79 
  80     if (OPAL_SUCCESS != opal_hash_table_set_value_ptr(&group_cache, &key,
  81                                                       sizeof(key), group)) {
  82         return OSHMEM_ERROR;
  83     }
  84     return OSHMEM_SUCCESS;
  85 }
  86 

/* [<][>][^][v][top][bottom][index][help] */