GM je knihovna pro pĹ™enos zpráv po sĂti Myrinet. Procesy v GM vlastnĂ send a receive tokens, kterĂ© reprezentujĂ buffer na jednu zprávu. Adresace v GM pouĹľĂvá ID uzlĹŻ, která pĹ™idÄ›luje daemon souÄŤasnÄ› vyhledávajĂcĂ routes, programy pak k odesĂlánĂ pouĹľĂvajĂ porty, coĹľ jsou struktury v podstatÄ› reprezentujĂcĂ otevĹ™enĂ© spojenĂ na danĂ©m rozhranĂ.
K odeslánĂ zprávy se volá gm_send_with_callback (data, size, priority, callback, context, port, target ...), kterĂ© odebere jeden send token a asynchronnÄ› odešle zprávu, pak gm_receive (), kterĂ© ÄŤeká na GM událost, pĹ™i pĹ™Ăjmu správnĂ© události pak gm_unknown (), kterĂ© zpracovává default události, z nÄ›j GM zavolá callback (context, status ...) a vrátĂ jeden send token.
void gm_send_with_callback ( struct gm_port *p, void *message, unsigned int size, gm_size_t len, unsigned int priority, unsigned int target_node_id, unsigned int target_port_id, gm_send_completion_callback_t callback, void *context );
gm_recv_event_t *gm_receive ( gm_port_t *p); void gm_unknown ( gm_port_t *p, gm_recv_event_t *e );
K pĹ™ijetĂ zprávy konkrĂ©tnĂ dĂ©lky a priority se volá gm_provide_receive_buffer (port, buffer, size, priority ...), kterĂ© odebere jeden receive token, pak gm_receive (), kterĂ© ÄŤeká na GM událost, pĹ™i pĹ™Ăjmu správnĂ© události GM vyplnĂ buffer a vrátĂ jeden receive token.
void gm_provide_receive_buffer_with_tag ( gm_port_t *p, void *ptr, unsigned size, unsigned priority, unsigned int tag );
Od aplikacĂ se oÄŤekává, Ĺľe dajĂ GM vĹľdy nejmĂ©nÄ› jeden, lĂ©pe dva buffery, pro kaĹľdou dĂ©lku a prioritu zprávy, kterou mohou pĹ™ijmout. To dovoluje aplikaci vĹľdy jeden buffer zpracovávat, zatĂmco GM druhĂ˝ plnĂ. Všechny buffery musĂ bĂ˝t alokovány pomocĂ gm_dma_alloc (), aby je GM mohla efektivnÄ› pouĹľĂt.
HlavnĂ myšlenkou je rozhranĂ, kde se nemusĂ bÄ›hem komunikace nic dynamicky alokovat, coĹľ dovoluje dosáhnout minimálnĂ reĹľie knihovny.
http://www.myri.com/scs/GM/doc/html
http://www.myri.com/scs/GM-2/doc/html