Subrotina LAPI_Xfer
Propósito
Serve como uma função de wrapper para funções de transferência de dados LAPI.
Biblioteca
Biblioteca de Disponibilidade (liblapi_r.a)
Sintaxe C
#include <lapi.h>
int LAPI_Xfer(hndl, xfer_cmd)
lapi_handle_t hndl;
lapi_xfer_t *xfer_cmd;
typedef struct {
uint src; /* Target task ID */
uint reason; /* LAPI return codes */
ulong reserve[6]; /* Reserved */
} lapi_sh_info_t;
typedef void (scompl_hndlr_t)(lapi_handle_t *hndl, void *completion_param,
lapi_sh_info_t *info);
Sintaxe FORTRAN
include 'lapif.h'
LAPI_XFER(hndl, xfer_cmd, ierror)
INTEGER hndl
TYPE (fortran_xfer_type) :: xfer_cmd
INTEGER ierrorDescrição
Type of call: comunicação ponto-a-ponto (sem bloqueio)
O subroutine LAPI_Xfer fornece um superconjunto da funcionalidade dessas subroutines: LAPI_Amsend, LAPI_Amsendv, LAPI_Put, LAPI_Putv, LAPI_Get, LAPI_Getve LAPI_Rmw. Além disso, LAPI_Xfer fornece transferência de mensagens de coleta de dados / programa de dispersão de dados (DGSP).
Em C, o comando LAPI_Xfer é passado um ponteiro para um sindicato. Ele examina o primeiro membro do sindicato, Xfer_type, para determinar o tipo de transferência, e para determinar qual membro do sindicato foi passado. LAPI_Xfer espera que cada campo do membro do sindicato identificado seja configurado. Ele não examia ou modifica qualquer memória fora do membro do sindicato identificado. LAPI_Xfer trata todos os membros do sindicato (exceto status) como dados de leitura.
- Os campos de endereço remoto são expandidos para serem do tipo lapi_long_t, o que é longo o suficiente para um endereço de 64-bit bits. Isso permite que uma tarefa de 32-bit envie dados para 64-bit endereços, o que pode ser importante em programas cliente / servidor.
- LAPI_Xfer permite que o contador de origem seja substituído por um callback de conclusão de envio.
- LAPI_Xfer é usado para transferir dados usando a interface de coleta / dispersão de dados da LAPI (DGSP).
typedef union {
lapi_xfer_type_t Xfer_type;
lapi_get_t Get;
lapi_am_t Am;
lapi_rmw_t Rmw;
lapi_put_t Put;
lapi_getv_t Getv;
lapi_putv_t Putv;
lapi_amv_t Amv;
lapi_amdgsp_t Dgsp;
} lapi_xfer_t;Apesar de a estrutura lapi_xfer_t se aplicar apenas à versão C de LAPI_Xfer, as tabelas a seguir incluem os equivalentes FORTRAN dos datatipos C.| Valor de Xfer_type (C ou FORTRAN) | Membro do sindicato como interpretado por LAPI_Xfer (C) | Valor de fortran_xfer_type (FORTRAN) |
|---|---|---|
| LAPI_AM_XFER | lapi_am_t | LAPI_AM_T |
| LAPI_AMV_XFER | lapi_amv_t | LAPI_AMV_T |
| LAPI_DGSP_XFER | lapi_amdgsp_t | LAPI_AMDGSP_T |
| LAPI_GET_XFER | lapi_get_t | LAPI_GET_T |
| LAPI_GETV_XFER | lapi_getv_t | LAPI_GETV_T |
| LAPI_PUT_XFER | lapi_put_t | LAPI_PUT_T |
| LAPI_PUTV_XFER | lapi_putv_t | LAPI_PUTV_T |
| LAPI_RMW_XFER | lapi_rmw_t | LAPI_RMW_T |
detalhes lapi_am_t
| nome do campo lapi_am_t (C) | tipo de campo lapi_am_t (C) | Tipo de datatipo FORTRAN equivalente | Parâmetro LAPI_Amsend equivalente |
|---|---|---|---|
| Xfer_type | lapi_xfer_type_t | INTEGER(KIND = 4) | implícito em C LAPI_Xfer valor no FORTRAN: LAPI_AM_XFER |
| bandeiras | int | INTEGER(KIND = 4) | Nenhum LAPI_Xfer parâmetro em FORTRAN: flags |
| tgt | uint | INTEGER(KIND = 4) | tgt |
| Nenhum | Nenhum | INTEGER(KIND = 4) | LAPI_Xfer parâmetro no FORTRAN: pad |
| hdr_hdl | lapi_long_t | INTEGER(KIND = 8) | hdr_hdl |
| uhdr_len | uint | INTEGER(KIND = 4) | uhdr_len |
| Nenhum | Nenhum | INTEGER(KIND = 4) | LAPI_Xfer parâmetro em FORTRAN (64-bit): pad2 |
| uhdr | void * | INTEGER(KIND = 4) (32 bits)
INTEGER(KIND = 8) (64 bits) |
uhdr |
| udata | void * | INTEGER(KIND = 4) (32 bits)
INTEGER(KIND = 8) (64 bits) |
udata |
| udata_len | ulong | INTEGER(KIND = 4) (32 bits)
INTEGER(KIND = 8) (64 bits) |
udata_len |
| shdlr | scompl_hndlr_t * | INTEGER(KIND = 4) (32 bits)
INTEGER(KIND = 8) (64 bits) |
Nenhum LAPI_Xfer parâmetro em FORTRAN: shdlr |
| sinfo | void * | INTEGER(KIND = 4) (32 bits)
INTEGER(KIND = 8) (64 bits) |
Nenhum LAPI_Xfer parâmetro em FORTRAN: sinfo |
| tgt_cntr | lapi_long_t | INTEGER(KIND = 8) | tgt_cntr |
| org_cntr | lapi_cntr_t * | INTEGER(KIND = 4) (32 bits)
INTEGER(KIND = 8) (64 bits) |
org_cntr |
| cmpl_cntr | lapi_cntr_t * | INTEGER(KIND = 4) (32 bits)
INTEGER(KIND = 8) (64 bits) |
cmpl_cntr |
detalhes lapi_amv_t
| nome do campo lapi_amv_t (C) | lapi_amv_t tipo de campo (C) | Tipo de datatipo FORTRAN equivalente | Parâmetro LAPI_Amsendv equivalente |
|---|---|---|---|
| Xfer_type | lapi_xfer_type_t | INTEGER(KIND = 4) | implícito em C LAPI_Xfer valor no FORTRAN: LAPI_AMV_XFER |
| bandeiras | int | INTEGER(KIND = 4) | Nenhum LAPI_Xfer parâmetro em FORTRAN: flags |
| tgt | uint | INTEGER(KIND = 4) | tgt |
| Nenhum | Nenhum | INTEGER(KIND = 4) | LAPI_Xfer parâmetro no FORTRAN: pad |
| hdr_hdl | lapi_long_t | INTEGER(KIND = 8) | hdr_hdl |
| uhdr_len | uint | INTEGER(KIND = 4) | uhdr_len |
| Nenhum | Nenhum | INTEGER(KIND = 4) | LAPI_Xfer parâmetro em FORTRAN (64-bit): pad2 |
| uhdr | void * | INTEGER(KIND = 4) (32 bits)
INTEGER(KIND = 8) (64 bits) |
uhdr |
| shdlr | scompl_hndlr_t * | INTEGER(KIND = 4) (32 bits)
INTEGER(KIND = 8) (64 bits) |
Nenhum LAPI_Xfer parâmetro em FORTRAN: shdlr |
| sinfo | void * | INTEGER(KIND = 4) (32 bits)
INTEGER(KIND = 8) (64 bits) |
Nenhum LAPI_Xfer parâmetro em FORTRAN: sinfo |
| org_vec | lapi_vec_t * | INTEGER(KIND = 4) (32 bits)
INTEGER(KIND = 8) (64 bits) |
org_vec |
| Nenhum | Nenhum | INTEGER(KIND = 4) | LAPI_Xfer parâmetro em FORTRAN (32-bit): pad2 |
| tgt_cntr | lapi_long_t | INTEGER(KIND = 8) | tgt_cntr |
| org_cntr | lapi_cntr_t * | INTEGER(KIND = 4) (32 bits)
INTEGER(KIND = 8) (64 bits) |
org_cntr |
| cmpl_cntr | lapi_cntr_t * | INTEGER(KIND = 4) (32 bits)
INTEGER(KIND = 8) (64 bits) |
cmpl_cntr |
detalhes lapi_amdgsp_t
| nome do campo lapi_amdgsp_t (C) | lapi_amdgsp_t tipo de campo (C) | Tipo de datatipo FORTRAN equivalente | Uso LAPI_Xfer |
|---|---|---|---|
| Xfer_type | lapi_xfer_type_t | INTEGER(KIND = 4) | LAPI_DGSP_XFER |
| bandeiras | int | INTEGER(KIND = 4) | Este campo permite que os usuários especificam diretivas ou sugestões ao LAPI. Se você não quiser usar nenhuma diretiva ou hints, você deve configurar este campo para 0. Veja O campo de bandeiras lapi_amdgsp_t para obter mais informações. |
| tgt | uint | INTEGER(KIND = 4) | tarefa de destino |
| Nenhum | Nenhum | INTEGER(KIND = 4) | pad (alinhamento de preenchimento apenas para FORTRAN) |
| hdr_hdl | lapi_long_t | INTEGER(KIND = 8) | manipulador de cabeçalho para chamar no destino |
| uhdr_len | uint | INTEGER(KIND = 4) | comprimento do cabeçalho do usuário (múltiplo do tamanho do doubleword do processador) |
| Nenhum | Nenhum | INTEGER(KIND = 4) | pad2 (alinhamento de preenchimento para 64-bit apenas FORTRAN) |
| uhdr | void * | INTEGER(KIND = 4) (32 bits)
INTEGER(KIND = 8) (64 bits) |
ponteiro para cabeçalho do usuário |
| udata | void * | INTEGER(KIND = 4) (32 bits)
INTEGER(KIND = 8) (64 bits) |
ponteiro para dados do usuário |
| udata_len | ulong | INTEGER(KIND = 4) (32 bits)
INTEGER(KIND = 8) (64 bits) |
Comprimento dos Dados de Usuár |
| shdlr | scompl_hndlr_t * | INTEGER(KIND = 4) (32 bits)
INTEGER(KIND = 8) (64 bits) |
manipulador de conclusão de envio (opcional) |
| sinfo | void * | INTEGER(KIND = 4) (32 bits)
INTEGER(KIND = 8) (64 bits) |
ponteiro de dados para passar para o manipulador de conclusão de envio (opcional) |
| tgt_cntr | lapi_long_t | INTEGER(KIND = 8) | contador de destino (opcional) |
| org_cntr | lapi_cntr_t * | INTEGER(KIND = 4) (32 bits)
INTEGER(KIND = 8) (64 bits) |
contador de origem (opcional) |
| cmpl_cntr | lapi_cntr_t * | INTEGER(KIND = 4) (32 bits)
INTEGER(KIND = 8) (64 bits) |
contador de conclusão (opcional) |
| dgsp | lapi_dg_handle_t | INTEGER(KIND = 4) (32 bits)
INTEGER(KIND = 8) (64 bits) |
Manejo de um DGSP registrado |
| status | lapi_status_t | INTEGER(KIND = 4) (32 bits)
INTEGER(KIND = 8) (64 bits) |
Status para retornar (uso futuro) |
| Nenhum | Nenhum | INTEGER(KIND = 4) | pad3 (alinhamento de preenchimento para 64-bit apenas FORTRAN) |
Quando o buffer de dados de origem é livre para ser modificado, o manipulador de conclusão de envio (shdlr) é chamado com os dados de conclusão de envio (sinfo), se shdlr não for um ponteiro NULL (em C) ou LAPI_ADDR_NULL (em FORTRAN).
Veja Usando lapi_am_dgsp_t para processamento de DGSP de lado de dispersão para obter mais informações.
O campo de bandeiras lapi_amdgsp_t
Uma ou mais bandeiras podem ser definidas usando o operador | (bitwise ou). As diretivas do usuário são sempre seguidas e poderiam resultar em resultados incorretos se usados impropriamente. As sugestões apropriadas podem melhorar o desempenho, mas podem ser ignoradas pelo LAPI. As sugestões inadequadas podem degradar o desempenho, mas não causarão resultados incorretos.
- USE_TGT_VEC_TYPE
- Instrui LAPI a utilizar o tipo de vetor do vetor de destino (tgt_vec). Em outras palavras, tgt_vec deve ser interpretado como tipo lapi_vec_t; caso contrário, ele é interpretado como tipo lapi_lvec_t. O tipo lapi_lvec_t usa lapi_long_t. O tipo lapi_vec_t usa void * ou long. Resultados incorretos ocorrerão se um tipo for usado no lugar do outro.
- BUFFER_BOTH_CONTIGUOUS
- Instrui LAPI a tratar todos os dados a serem transferidos como contiguosos, o que pode melhorar o desempenho. Se esta sinalização for definida quando dados não contíguos são enviados, provavelmente os dados serão corrompidos.
- LAPI_NOT_USE_BULK_XFER
- Instrui LAPI a não utilizar transferência a granel, independente da configuração atual para a tarefa.
- LAPI_USE_BULK_XFER
- Instrui LAPI a utilizar transferência a granel, independente da configuração atual para a tarefa.
Essas dicas podem ou não ser honradas pela biblioteca de comunicação.
Usando lapi_am_dgsp_t para processamento de DGSP de lado de dispersão
O LAPI permite que informações adicionais sejam retornadas do manipulador de cabeçalho através do uso do datatype lapi_return_info_t . Veja RSCT para AIX 5L: Guia de Programação LAPI para obter mais informações sobre lapi_return_info_t. No caso do tipo de transferência lapi_am_dgsp_t, este mecanismo pode ser usado para instruir LAPI a executar um DGSP de usuário para espalhar dados no lado de recebimento.
Para usar este mecanismo, passe um ponteiro lapi_return_info_t * de volta para LAPI por meio do membro msg_len do manipulador de cabeçalho do usuário. O membro dgsp_handle da estrutura passada deve apontar para uma descrição do DGSP que foi registrada no lado do recebimento. Veja LAPI_Util e RSCT para AIX 5L: Guia de Programação LAPI para obter detalhes sobre construção e registro de DGSPs.
detalhes lapi_get_t
| lapi_get_t nome do campo (C) | lapi_get_t tipo de campo (C) | Tipo de datatipo FORTRAN equivalente | Parâmetro LAPI_Get equivalente |
|---|---|---|---|
| Xfer_type | lapi_xfer_type_t | INTEGER(KIND = 4) | implícito em C LAPI_Xfer valor no FORTRAN: LAPI_GET_XFER |
| bandeiras | int | INTEGER(KIND = 4) | Nenhum LAPI_Xfer parâmetro em FORTRAN: flags |
| tgt | uint | INTEGER(KIND = 4) | tgt |
| Nenhum | Nenhum | INTEGER(KIND = 4) | LAPI_Xfer parâmetro no FORTRAN: pad |
| tgt_addr | lapi_long_t | INTEGER(KIND = 8) | tgt_addr |
| endereço orgânico | void * | INTEGER(KIND = 4) (32 bits)
INTEGER(KIND = 8) (64 bits) |
endereço orgânico |
| len | ulong | INTEGER(KIND = 4) (32 bits)
INTEGER(KIND = 8) (64 bits) |
len |
| tgt_cntr | lapi_long_t | INTEGER(KIND = 8) | tgt_cntr |
| org_cntr | lapi_cntr_t * | INTEGER(KIND = 4) (32 bits)
INTEGER(KIND = 8) (64 bits) |
org_cntr |
| chndlr | compl_hndlr_t * | INTEGER(KIND = 4) (32 bits)
INTEGER(KIND = 8) (64 bits) |
Nenhum LAPI_Xfer parâmetro no FORTRAN: chndlr |
| cinfo | void * | INTEGER(KIND = 4) (32 bits)
INTEGER(KIND = 8) (64 bits) |
Nenhum LAPI_Xfer parâmetro no FORTRAN: cinfo |
detalhes lapi_getv_t
| lapi_getv_t nome do campo (C) | lapi_getv_t tipo de campo (C) | Tipo de datatipo FORTRAN equivalente | Parâmetro LAPI_Getv equivalente |
|---|---|---|---|
| Xfer_type | lapi_xfer_type_t | INTEGER(KIND = 4) | implícito em C LAPI_Xfer valor no FORTRAN: LAPI_GETV_XFER |
| bandeiras | int | INTEGER(KIND = 4) | Nenhum LAPI_Xfer parâmetro em FORTRAN: flags |
| tgt | uint | INTEGER(KIND = 4) | tgt |
| Nenhum | Nenhum | INTEGER(KIND = 4) | LAPI_Xfer parâmetro em FORTRAN (64-bit): pad |
| org_vec | lapi_vec_t * | INTEGER(KIND = 4) (32 bits)
INTEGER(KIND = 8) (64 bits) |
org_vec |
| tgt_vec | void * | INTEGER(KIND = 4) (32 bits)
INTEGER(KIND = 8) (64 bits) |
tgt_vec |
| Nenhum | Nenhum | INTEGER(KIND = 4) | LAPI_Xfer parâmetro em FORTRAN (32-bit): pad |
| tgt_cntr | lapi_long_t | INTEGER(KIND = 8) | tgt_cntr |
| org_cntr | lapi_cntr_t * | INTEGER(KIND = 4) (32 bits)
INTEGER(KIND = 8) (64 bits) |
org_cntr |
| chndlr | compl_hndlr_t * | INTEGER(KIND = 4) (32 bits)
INTEGER(KIND = 8) (64 bits) |
Nenhum LAPI_Xfer parâmetro no FORTRAN: chndlr |
| cinfo | void * | INTEGER(KIND = 4) (32 bits)
INTEGER(KIND = 8) (64 bits) |
Nenhum LAPI_Xfer parâmetro no FORTRAN: cinfo |
| Nenhum | Nenhum | INTEGER(KIND = 4) | LAPI_Xfer parâmetro em FORTRAN (32-bit): pad2 |
Quando o buffer de dados de origem tiver chegado completamente, o ponteiro para o manipulador de conclusão (chndlr) é chamado com os dados de conclusão (cinfo) se chndlr não for um ponteiro NULL (em C) ou LAPI_ADDR_NULL (em FORTRAN). Caso contrário, o comportamento é idêntico ao de LAPI_Getv.
detalhes lapi_put_t
| nome do campo lapi_put_t (C) | tipo de campo lapi_put_t (C) | Tipo de datatipo FORTRAN equivalente | Parâmetro LAPI_Put equivalente |
|---|---|---|---|
| Xfer_type | lapi_xfer_type_t | INTEGER(KIND = 4) | implícito em C LAPI_Xfer valor no FORTRAN: LAPI_PUT_XFER |
| bandeiras | int | INTEGER(KIND = 4) | Nenhum LAPI_Xfer parâmetro em FORTRAN: flags |
| tgt | uint | INTEGER(KIND = 4) | tgt |
| Nenhum | Nenhum | INTEGER(KIND = 4) | LAPI_Xfer parâmetro no FORTRAN: pad |
| tgt_addr | lapi_long_t | INTEGER(KIND = 8) | tgt_addr |
| endereço orgânico | void * | INTEGER(KIND = 4) (32 bits)
INTEGER(KIND = 8) (64 bits) |
endereço orgânico |
| len | ulong | INTEGER(KIND = 4) (32 bits)
INTEGER(KIND = 8) (64 bits) |
len |
| shdlr | scompl_hndlr_t * | INTEGER(KIND = 4) (32 bits)
INTEGER(KIND = 8) (64 bits) |
Nenhum LAPI_Xfer parâmetro em FORTRAN: shdlr |
| sinfo | void * | INTEGER(KIND = 4) (32 bits)
INTEGER(KIND = 8) (64 bits) |
Nenhum LAPI_Xfer parâmetro em FORTRAN: sinfo |
| tgt_cntr | lapi_long_t | INTEGER(KIND = 8) | tgt_cntr |
| org_cntr | lapi_cntr_t * | INTEGER(KIND = 4) (32 bits)
INTEGER(KIND = 8) (64 bits) |
org_cntr |
| cmpl_cntr | lapi_cntr_t * | INTEGER(KIND = 4) (32 bits)
INTEGER(KIND = 8) (64 bits) |
cmpl_cntr |
detalhes lapi_putv_t
| lapi_putv_t nome do campo (C) | lapi_putv_t tipo de campo (C) | Tipo de datatipo FORTRAN equivalente | Parâmetro LAPI_Putv equivalente |
|---|---|---|---|
| Xfer_type | lapi_xfer_type_t | INTEGER(KIND = 4) | implícito em C LAPI_Xfer valor no FORTRAN: LAPI_PUT_XFER |
| bandeiras | int | INTEGER(KIND = 4) | Nenhum LAPI_Xfer parâmetro em FORTRAN: flags |
| tgt | uint | INTEGER(KIND = 4) | tgt |
| Nenhum | Nenhum | INTEGER(KIND = 4) | LAPI_Xfer parâmetro em FORTRAN (64-bit): pad |
| shdlr | scompl_hndlr_t * | INTEGER(KIND = 4) (32 bits)
INTEGER(KIND = 8) (64 bits) |
Nenhum LAPI_Xfer parâmetro em FORTRAN: shdlr |
| sinfo | void * | INTEGER(KIND = 4) (32 bits)
INTEGER(KIND = 8) (64 bits) |
Nenhum LAPI_Xfer parâmetro em FORTRAN: sinfo |
| org_vec | lapi_vec_t * | INTEGER(KIND = 4) (32 bits)
INTEGER(KIND = 8) (64 bits) |
org_vec |
| tgt_vec | void * | INTEGER(KIND = 4) (32 bits)
INTEGER(KIND = 8) (64 bits) |
tgt_vec |
| Nenhum | Nenhum | INTEGER(KIND = 4) | LAPI_Xfer parâmetro em FORTRAN (32-bit): pad |
| tgt_cntr | lapi_long_t | INTEGER(KIND = 8) | tgt_cntr |
| org_cntr | lapi_cntr_t * | INTEGER(KIND = 4) (32 bits)
INTEGER(KIND = 8) (64 bits) |
org_cntr |
| cmpl_cntr | lapi_cntr_t * | INTEGER(KIND = 4) (32 bits)
INTEGER(KIND = 8) (64 bits) |
cmpl_cntr |
Quando o buffer de dados de origem estiver livre para ser modificado, o ponteiro para o manipulador de conclusão de envio (shdlr) é chamado com os dados de conclusão de envio (sinfo), se shdlr não for um ponteiro NULL (em C) ou LAPI_ADDR_NULL (em FORTRAN). Caso contrário, o comportamento é idêntico ao de LAPI_Putv.
detalhes lapi_rmw_t
| lapi_rmw_t nome do campo (C) | lapi_rmw_t tipo de campo (C) | Tipo de datatipo FORTRAN equivalente | Parâmetro LAPI_Rmw equivalente |
|---|---|---|---|
| Xfer_type | lapi_xfer_type_t | INTEGER(KIND = 4) | implícito em C LAPI_Xfer valor no FORTRAN: LAPI_RMW_XFER |
| op | Rmw_ops_t | INTEGER(KIND = 4) | op |
| tgt | uint | INTEGER(KIND = 4) | tgt |
| tamanho | uint | INTEGER(KIND = 4) | implícito em C LAPI_Xfer parâmetro em FORTRAN: size (deve ser 32 ou 64) |
| tgt_var | lapi_long_t | INTEGER(KIND = 8) | tgt_var |
| in_val | void * | INTEGER(KIND = 4) (32 bits)
INTEGER(KIND = 8) (64 bits) |
in_val |
| valor_prev_tgt | void * | INTEGER(KIND = 4) (32 bits)
INTEGER(KIND = 8) (64 bits) |
valor_prev_tgt |
| org_cntr | lapi_cntr t * | INTEGER(KIND = 4) (32 bits)
INTEGER(KIND = 8) (64 bits) |
org_cntr |
| shdlr | scompl_hndlr_t * | INTEGER(KIND = 4) (32 bits)
INTEGER(KIND = 8) (64 bits) |
Nenhum LAPI_Xfer parâmetro em FORTRAN: shdlr |
| sinfo | void * | INTEGER(KIND = 4) (32 bits)
INTEGER(KIND = 8) (64 bits) |
Nenhum LAPI_Xfer parâmetro em FORTRAN: shdlr |
| Nenhum | Nenhum | INTEGER(KIND = 4) | LAPI_Xfer parâmetro em FORTRAN (32-bit): pad |
Parâmetros
- INPUT
- hndl
- Especifica a alça LAPI.
- xfer_cmd
- Especifica o nome e os parâmetros da função de transferência de dados.
- SAÍDA
- ierro
- Especifica um código de retorno FORTRAN. Este é sempre o último parâmetro.
Valores De Retorno
- LAPI_SUCESSO
- Indica que a chamada de função foi concluída com sucesso.
- LAPI_ERR_DATA_LEN
- Indica que o valor de udata_len ou len é maior do que o valor da constante LAPI LAPI_MAX_MSG_SZ.
- LAPI_ERR_DGSP
- Indica que o DGSP que foi passado em é NULL (em C) ou LAPI_ADDR_NULL (no FORTRAN) ou não é um DGSP registrado.
- LAPI_ERR_DGSP_ATOM
- Indica que o DGSP tem um atom_size que é menor que 0 ou maior do que MAX_ATOM_SIZE.
- LAPI_ERR_DGSP_BRANCH
- Indica que a DGSP tentou um ramo que caiu fora da matriz de código.
- LAPI_ERR_ERR_DGSP_CTL
- Indica que uma instrução de controle do DGSP foi encontrada em um contexto não válido (como um controle de lado de reúna ou controle de lado de dispersão com um tamanho de átomo de 0 em reunir, por exemplo).
- LAPI_ERR_DGSP_OPC
- Indica que o código DGSP op-code não é válido.
- LAPI_ERR_DGSP_STACK
- Indica que o DGSP possui maior profundidade GOSUB do que os suportes de pilha alocados. Alocação de pilha é especificada pelo membro dgsp->profundidade.
- LAPI_ERR_HDR_HNDLR_NULL
- Indica que o hdr_hdl passado em é NULL (em C) ou LAPI_ADDR_NULL (em FORTRAN).
- LAPI_ERR_HNDL_INVÁLIDA
- Indica que o hndl passado em não é válido (não inicializado ou em estado finalizado).
- LAPI_ERR_IN_VAL_NULL
- Indica que o ponteiro in_val é NULL (em C) ou LAPI_ADDR_NULL (em FORTRAN).
- LAPI_ERR_MEMORY_ESGOTADO
- LAPI é incapaz de obter memória do sistema.
- LAPI_ERR_OP_SZ
- Indica que o campo lapi_rmw_t size não está configurado como 32 ou 64.
- LAPI_ERR_ORG_ADDR_NULL
- Indica ou que o parâmetro udata passado em é NULL (em C) ou LAPI_ADDR_NULL (em FORTRAN) e udata_len é maior que 0, ou que o org_addr passado em é NULL (em C) ou LAPI_ADDR_NULL (em FORTRAN) e len é maior que 0.
Note: se Xfer_type = LAPI_DGSP_XFER, o caso em que udata é NULL (em C) ou LAPI_ADDR_NULL (em FORTRAN) e udata_len é maior que 0 é válido, portanto, um erro não é retornado.
- LAPI_ERR_ORG_EXTENSÃO
- Indica que a extensão org_vec(stride * num_vecs) é maior do que o valor da constante LAPI LAPI_MAX_MSG_SZ.
- LAPI_ERR_ORG_STRIDE
- Indica que o stride org_vec é menor do que bloco.
- LAPI_ERR_ORG_VEC_ADDR
- Indica que o org_vec->info [i] é NULL (em C) ou LAPI_ADDR_NULL (em FORTRAN), mas o seu comprimento (org_vec->len [i]) não é 0.
- LAPI_ERR_ORG_VEC_LEN
- Indica que a soma de org_vec-> len é maior do que o valor da constante LAPI LAPI_MAX_MSG_SZ.
- LAPI_ERR_ORG_VEC_NULL
- Indica que o valor org_vec é NULL (em C) ou LAPI_ADDR_NULL (em FORTRAN).
- LAPI_ERR_ORG_VEC_TYPE
- Indica que o org_vec->vec_type não é válido.
- LAPI_ERR_RMW_OP
- Indica que a op não é válida.
- LAPI_ERR_STRIDE_ORG_VEC_ADDR_NULL
- Indica que o vetor de vetor de stridado org_vec->info[0] é NULL (em C) ou LAPI_ADDR_NULL (em FORTRAN).
- LAPI_ERR_STRIDE_TGT_VEC_ADDR_NULL
- Indica que o endereço vetorial stridado tgt_vec->info[0] é NULL (em C) ou LAPI_ADDR_NULL (em FORTRAN).
- LAPI_ERR_TGT
- Indica que o tgt passado em está fora do intervalo de tarefas definidas no job.
- LAPI_ERR_TGT_ADDR_NULL
- Indica que ret_addr é NULL (em C) ou LAPI_ADDR_NULL (em FORTRAN).
- LAPI_ERR_TGT_EXTENSÃO
- Indica que a extensão tgt_vec(stride * num_vecs) é maior do que o valor da constante LAPI LAPI_MAX_MSG_SZ.
- LAPI_ERR_TGT_PURGED
- Indica que a subroutine retornou mais cedo porque LAPI_Purge_totask() foi chamada.
- LAPI_ERR_TGT_STRIDE
- Indica que o stride tgt_vec é menor do que bloco.
- LAPI_ERR_TGT_VAR_NULL
- Indica que o endereço tgt_var é NULL (em C) ou que o valor de tgt_var é LAPI_ADDR_NULL (em FORTRAN).
- LAPI_ERR_TGT_VEC_ADDR
- Indica que o tgt_vec->info[i] é NULL (em C) ou LAPI_ADDR_NULL (em FORTRAN), mas o seu comprimento (tgt_vec->len[i]) não é 0.
- LAPI_ERR_TGT_VEC_LEN
- Indica que a soma de tgt_vec->len é maior do que o valor de constante LAPI LAPI_MAX_MSG_SZ.
- LAPI_ERR_TGT_VEC_NULL
- Indica que tgt_vec é NULL (em C) ou LAPI_ADDR_NULL (em FORTRAN).
- LAPI_ERR_TGT_VEC_TYPE
- Indica que o tgt_vec->vec_type não é válido.
- LAPI_ERR_UHDR_LEN
- Indica que o valor uhdr_len passado em é maior que MAX_UHDR_SZ ou não é um múltiplo do tamanho do doubleword do processador.
- LAPI_ERR_UHDR_NULL
- Indica que o uhdr passado em é NULL (em C) ou LAPI_ADDR_NULL (em FORTRAN), mas uhdr_len não é 0.
- LAPI_ERR_VEC_LEN_DIFF
- Indica que org_vec e tgt_vec têm tamanhos diferentes (len []).
- LAPI_ERR_VEC_NUM_DIFF
- Indica que org_vec e tgt_vec têm diferentes num_vecs.
- LAPI_ERR_VEC_TYPE_DIFF
- Indica que org_vec e tgt_vec possuem tipos de vetores diferentes (vec_type).
- LAPI_ERR_XFER_CMD
- Indica que o Xfer_cmd não é válido.
Exemplos de C
- Para executar o código de amostra mostrado em LAPI_Get usando a interface LAPI_Xfer :
{ lapi_xfer_t xfer_struct; /* initialize the table buffer for the data addresses */ /* get remote data buffer addresses */ LAPI_Address_init(hndl,(void *)data_buffer,data_buffer_list); . . . /* retrieve data_len bytes from address data_buffer_list[tgt] on */ /* task tgt. write the data starting at address data_buffer. */ /* tgt_cntr and org_cntr can be NULL. */ xfer_struct.Get.Xfer_type = LAPI_GET_XFER; xfer_struct.Get.flags = 0; xfer_struct.Get.tgt = tgt; xfer_struct.Get.tgt_addr = data_buffer_list[tgt]; xfer_struct.Get.org_addr = data_buffer; xfer_struct.Get.len = data_len; xfer_struct.Get.tgt_cntr = tgt_cntr; xfer_struct.Get.org_cntr = org_cntr; LAPI_Xfer(hndl, &xfer_struct); } - Para implementar o exemplo LAPI_STRIDED_VECTOR a partir de LAPI_Amsendv usando a interface LAPI_Xfer :
{ lapi_xfer_t xfer_struct; /* info for LAPI_Xfer call */ lapi_vec_t vec; /* data for data transfer */ . . . vec->num_vecs = NUM_VECS; /* NUM_VECS = number of vectors to transfer */ /* must match that of the target vector */ vec->vec_type = LAPI_GEN_STRIDED_XFER; /* same as target vector */ vec->info[0] = buffer_address; /* starting address for data copy */ vec->info[1] = block_size; /* bytes of data to copy */ vec->info[2] = stride; /* distance from copy block to copy block */ /* data will be copied as follows: */ /* block_size bytes will be copied from buffer_address */ /* block_size bytes will be copied from buffer_address+stride */ /* block_size bytes will be copied from buffer_address+(2*stride) */ /* block_size bytes will be copied from buffer_address+(3*stride) */ . . . /* block_size bytes will be copied from buffer_address+((NUM_VECS-1)*stride) */ . . . xfer_struct.Amv.Xfer_type = LAPI_AMV_XFER; xfer_struct.Amv.flags = 0; xfer_struct.Amv.tgt = tgt; xfer_struct.Amv.hdr_hdl = hdr_hdl_list[tgt]; xfer_struct.Amv.uhdr_len = uhdr_len; /* user header length */ xfer_struct.Amv.uhdr = uhdr; /* LAPI_AMV_XFER allows the use of a send completion handler */ /* If non-null, the shdlr function is invoked at the point */ /* the origin counter would increment. Note that both the */ /* org_cntr and shdlr can be used. */ /* The user's shdlr must be of type scompl_hndlr_t *. */ /* scompl_hndlr_t is defined in /usr/include/lapi.h */ xfer_struct.shdlr = shdlr; /* Use sinfo to pass user-defined data into the send */ /* completion handler, if desired. */ xfer_struct.sinfo = sinfo; /* send completion data */ xfer_struct.org_vec = vec; xfer_struct.tgt_cntr = tgt_cntr; xfer_struct.org_cntr = org_cntr; xfer_struct.cmpl_cntr = cmpl_cntr; LAPI_Xfer(hndl, &xfer_struct); . . . }
Localização
- /usr/lib/liblapi_r.a