tsp-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Tsp-devel] Multitype comment?


From: Erk
Subject: [Tsp-devel] Multitype comment?
Date: Tue, 18 Apr 2006 01:01:40 +0200

Bon comme je vois que Stéphane
a vraiment envie d'afficher plus d'info
sur les provider et les symboles voici un peu d'info...

Lors d'un dialogue request_info/answer_sample
                                   ou request_sample/answer_sample

l'Answer sample contient désormais les infos
suivante (structure SSI):

struct TSP_sample_symbol_info_t {
        char *name;
        int provider_global_index;
        int provider_group_index;
        int provider_group_rank;
        TSP_datatype_t type;
        u_int dimension;
        u_int offset;
        u_int nelem;
        int period;
        int phase;
};


Où TSP_datatype_t est un enum:
enum TSP_datatype_t {
        TSP_TYPE_UNKNOWN = 0,
        TSP_TYPE_DOUBLE = 1,
        TSP_TYPE_FLOAT = 1 + 1,
        TSP_TYPE_INT8 = 1 + 2,
        TSP_TYPE_INT16 = 1 + 3,
        TSP_TYPE_INT32 = 1 + 4,
        TSP_TYPE_INT64 = 1 + 5,
        TSP_TYPE_UINT8 = 1 + 6,
        TSP_TYPE_UINT16 = 1 + 7,
        TSP_TYPE_UINT32 = 1 + 8,
        TSP_TYPE_UINT64 = 1 + 9,
        TSP_TYPE_CHAR = 1 + 10,
        TSP_TYPE_UCHAR = 1 + 11,
        TSP_TYPE_RAW = 1 + 12,
        TSP_TYPE_LAST = 1 + 13,
};

La dimension vaut > 1 si la chose est un tableau.
L'offset et nelem valent par defaut 0 et dimension
mais peuvent être différent si dans la request_sample
on a demande à sampler une partie du tableau
genre pour un tableau 'tab' de dimension 1000

si on demande offset = 100, nelem = 10
alors on aura  tab[100], tab[101], ... tab[109]
et l'answer sample contiendra:

dimension 1000
offset = 100
nelem = 10

!!! ATTENTION DESORMAIS !!!
TSP_consumer_read_sample renseigne
une structure TSP_sample_t suivante:

struct TSP_sample_t
{
  int time;
  int provider_global_index;
  int32_t array_index;
  TSP_datatype_t type;

  union {
    double        double_value;
    float         float_value;
    int8_t        int8_value;
    int16_t       int16_value;
    int32_t       int32_value;
    int64_t       int64_value;
    uint8_t       uint8_value;
    uint16_t      uint16_value;
    uint32_t      uint32_value;
    uint64_t      uint64_value;
    char          char_value;
    unsigned char uchar_value;
    int8_t        raw_value;
  } uvalue;

};

A vous de lire la bonne valeur de l'union
en fonction de type;.

A noter que pour un tableau on reçoit les éléments
1 par 1 (d'où le array_index) ce qui est très sous-optimal
mais on ne sait pas faire mieux sans soit:
   1) faire des malloc à la toc
   2) demander un buffer user

A noter que sur la socket on lit tout d'un coup donc
si on avait un buffer user on pourrait lire le (la tranche) de tableau
d'un bloc...

Pour ceux qui se demanderait comment au niveau de l'API
consumer on demande ces listes de sample:

Après un TSP_consumer_request_sample
on peut récupérer la liste via TSP_consumer_get_requested_sample

Après un TSP_consumer_request_info / filtered_info
on peut récupérer la liste via TSP_consumer_get_information.

Je fais un mail de plus sur les infos étendues....
--
Erk




reply via email to

[Prev in Thread] Current Thread [Next in Thread]