LAPI_Xfer 서브루틴
용도
LAPI 데이터 전송 함수를 위한 래퍼 함수 역할을 합니다.
라이브러리
가용성 라이브러리 (liblapi_r.a)
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);
FORTRAN 구문
include 'lapif.h'
LAPI_XFER(hndl, xfer_cmd, ierror)
INTEGER hndl
TYPE (fortran_xfer_type) :: xfer_cmd
INTEGER ierror설명
Type of call: 지점 간 통신(비차단)
' LAPI_Xfer 서브루틴은 이러한 서브루틴의 기능의 상위 집합을 제공합니다: LAPI_Amsend, ' LAPI_Amsendv' , ' LAPI_Put' , ' LAPI_Putv' , ' LAPI_Get' , ' LAPI_Getv' , ' LAPI_Rmw' . 또한 ' LAPI_Xfer '은 데이터 수집/분산 프로그램(DGSP) 메시지 전송 기능을 제공합니다.
C에서 ' LAPI_Xfer ' 명령은 유니온에 대한 포인터를 전달합니다. 조합의 첫 번째 구성원인 ' Xfer_type'을 검사하여 전송 유형을 결정하고 통과된 조합원을 결정합니다. LAPI_Xfer 식별된 조합원의 모든 필드가 설정될 것으로 예상합니다. 식별된 조합원 외부의 메모리를 검사하거나 수정하지 않습니다. LAPI_Xfer 모든 유니온 멤버(' status 제외)를 읽기 전용 데이터로 취급합니다.
- 원격 주소 필드는 64비트 주소에 충분한 길이인 ' lapi_long_t' 유형으로 확장됩니다. 이를 통해 32비트 작업에서 64비트 주소로 데이터를 전송할 수 있으며, 이는 클라이언트/서버 프로그램에서 중요할 수 있습니다.
- LAPI_Xfer 을 사용하면 발신 카운터를 전송 완료 콜백으로 대체할 수 있습니다.
- LAPI_Xfer '은 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;' lapi_xfer_t 구조는 ' LAPI_Xfer'의 C 버전에만 적용되지만, 다음 표에는 C 데이터 타입의 FORTRAN 등가물이 포함되어 있습니다.| Xfer_type (C 또는 FORTRAN)의 값 | LAPI_Xfer (C)가 해석한 조합원 | 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 |
lAPI_AM_T 세부 정보
| lAPI_AM_T 필드 이름(C) | lAPI_AM_T 필드 유형(C) | 동등한 FORTRAN 데이터 유형 | 동등한 LAPI_Amsend 매개변수 |
|---|---|---|---|
| Xfer_type | lapi_xfer_type_t | INTEGER(KIND = 4) | c에 내재된 fORTRAN의 LAPI_Xfer 값: ' LAPI_AM_XFER' |
| flags | int | INTEGER(KIND = 4) | 없음 fORTRAN의 LAPI_Xfer 매개 변수: 플래그 |
| tgt | uint | INTEGER(KIND = 4) | tgt |
| 없음 | 없음 | INTEGER(KIND = 4) | fORTRAN의 LAPI_Xfer 매개 변수: 패드 |
| hdr_hdl | lapi_long_t | INTEGER(KIND = 8) | hdr_hdl |
| uhdr_len | uint | INTEGER(KIND = 4) | uhdr_len |
| 없음 | 없음 | INTEGER(KIND = 4) | fORTRAN(64비트)의 LAPI_Xfer 매개변수: pad2 |
| uhdr | void * | INTEGER(KIND = 4) (32비트)
' INTEGER(KIND = 8) '(64비트) |
uhdr |
| udata | void * | INTEGER(KIND = 4) (32비트)
' INTEGER(KIND = 8) '(64비트) |
udata |
| udata_len | ulong | INTEGER(KIND = 4) (32비트)
' INTEGER(KIND = 8) '(64비트) |
udata_len |
| shdlr | scompl_hndlr_t * | INTEGER(KIND = 4) (32비트)
' INTEGER(KIND = 8) '(64비트) |
없음 fORTRAN의 LAPI_Xfer 매개 변수: shdlr |
| sinfo | void * | INTEGER(KIND = 4) (32비트)
' INTEGER(KIND = 8) '(64비트) |
없음 fORTRAN의 LAPI_Xfer 매개 변수: sinfo |
| tgt_cntr | lapi_long_t | INTEGER(KIND = 8) | tgt_cntr |
| org_cntr | lapi_cntr_t * | INTEGER(KIND = 4) (32비트)
' INTEGER(KIND = 8) '(64비트) |
org_cntr |
| cmpl_cntr | lapi_cntr_t * | INTEGER(KIND = 4) (32비트)
' INTEGER(KIND = 8) '(64비트) |
cmpl_cntr |
lAPI_AMV_T 세부 정보
| lAPI_AMV_T 필드 이름(C) | lAPI_AMV_T 필드 유형(C) | 동등한 FORTRAN 데이터 유형 | 동등한 LAPI_Amsendv 매개변수 |
|---|---|---|---|
| Xfer_type | lapi_xfer_type_t | INTEGER(KIND = 4) | c에 내재된 fORTRAN의 LAPI_Xfer 값: ' LAPI_AMV_XFER' |
| flags | int | INTEGER(KIND = 4) | 없음 fORTRAN의 LAPI_Xfer 매개 변수: 플래그 |
| tgt | uint | INTEGER(KIND = 4) | tgt |
| 없음 | 없음 | INTEGER(KIND = 4) | fORTRAN의 LAPI_Xfer 매개 변수: 패드 |
| hdr_hdl | lapi_long_t | INTEGER(KIND = 8) | hdr_hdl |
| uhdr_len | uint | INTEGER(KIND = 4) | uhdr_len |
| 없음 | 없음 | INTEGER(KIND = 4) | fORTRAN(64비트)의 LAPI_Xfer 매개변수: pad2 |
| uhdr | void * | INTEGER(KIND = 4) (32비트)
' INTEGER(KIND = 8) '(64비트) |
uhdr |
| shdlr | scompl_hndlr_t * | INTEGER(KIND = 4) (32비트)
' INTEGER(KIND = 8) '(64비트) |
없음 fORTRAN의 LAPI_Xfer 매개 변수: shdlr |
| sinfo | void * | INTEGER(KIND = 4) (32비트)
' INTEGER(KIND = 8) '(64비트) |
없음 fORTRAN의 LAPI_Xfer 매개 변수: sinfo |
| org_vec | lAPI_VEC_T * | INTEGER(KIND = 4) (32비트)
' INTEGER(KIND = 8) '(64비트) |
org_vec |
| 없음 | 없음 | INTEGER(KIND = 4) | fORTRAN(32비트)의 LAPI_Xfer 매개변수: pad2 |
| tgt_cntr | lapi_long_t | INTEGER(KIND = 8) | tgt_cntr |
| org_cntr | lapi_cntr_t * | INTEGER(KIND = 4) (32비트)
' INTEGER(KIND = 8) '(64비트) |
org_cntr |
| cmpl_cntr | lapi_cntr_t * | INTEGER(KIND = 4) (32비트)
' INTEGER(KIND = 8) '(64비트) |
cmpl_cntr |
lAPI_AMDGSS_T 세부 정보
| lAPI_AMDGSS_T 필드 이름(C) | lAPI_AMDSP_T 필드 유형(C) | 동등한 FORTRAN 데이터 유형 | LAPI_Xfer 사용법 |
|---|---|---|---|
| Xfer_type | lapi_xfer_type_t | INTEGER(KIND = 4) | LAPI_DGSP_XFER |
| flags | int | INTEGER(KIND = 4) | 이 필드에서 사용자는 LAPI에 대한 지시문이나 힌트를 지정할 수 있습니다. 지시어나 힌트를 사용하지 않으려면 이 필드를 ' 0'로 설정해야 합니다. 자세한 내용은 lapi_amdgsp_t 플래그 필드를 참조하세요. |
| tgt | uint | INTEGER(KIND = 4) | 대상 작업 |
| 없음 | 없음 | INTEGER(KIND = 4) | 패드 (포트란 전용 패딩 정렬) |
| hdr_hdl | lapi_long_t | INTEGER(KIND = 8) | 대상에서 호출할 헤더 핸들러 |
| uhdr_len | uint | INTEGER(KIND = 4) | 사용자 헤더 길이(프로세서 더블워드 크기의 배수) |
| 없음 | 없음 | INTEGER(KIND = 4) | pad2 (64비트 FORTRAN 전용 패딩 정렬) |
| uhdr | void * | INTEGER(KIND = 4) (32비트)
' INTEGER(KIND = 8) '(64비트) |
사용자 헤더에 대한 포인터 |
| udata | void * | INTEGER(KIND = 4) (32비트)
' INTEGER(KIND = 8) '(64비트) |
사용자 데이터에 대한 포인터 |
| udata_len | ulong | INTEGER(KIND = 4) (32비트)
' INTEGER(KIND = 8) '(64비트) |
사용자 데이터 길이 |
| shdlr | scompl_hndlr_t * | INTEGER(KIND = 4) (32비트)
' INTEGER(KIND = 8) '(64비트) |
보내기 완료 핸들러(선택 사항) |
| sinfo | void * | INTEGER(KIND = 4) (32비트)
' INTEGER(KIND = 8) '(64비트) |
전송 완료 핸들러에 전달할 데이터 포인터(선택 사항) |
| tgt_cntr | lapi_long_t | INTEGER(KIND = 8) | 타겟 카운터(선택 사항) |
| org_cntr | lapi_cntr_t * | INTEGER(KIND = 4) (32비트)
' INTEGER(KIND = 8) '(64비트) |
출발지 카운터(선택 사항) |
| cmpl_cntr | lapi_cntr_t * | INTEGER(KIND = 4) (32비트)
' INTEGER(KIND = 8) '(64비트) |
완료 카운터(선택 사항) |
| dgsp | lapi_dg_handle_t | INTEGER(KIND = 4) (32비트)
' INTEGER(KIND = 8) '(64비트) |
등록된 DGSP의 핸들 |
| 상태 | lapi_status_t | INTEGER(KIND = 4) (32비트)
' INTEGER(KIND = 8) '(64비트) |
반환할 상태(향후 사용) |
| 없음 | 없음 | INTEGER(KIND = 4) | pad3 (64비트 FORTRAN 전용 패딩 정렬) |
원본 데이터 버퍼를 자유롭게 수정할 수 있는 경우, 전송 완료 핸들러(shdlr)가 전송 완료 데이터(sinfo)와 함께 호출됩니다( shdlr이 NULL 포인터(C의 경우) 또는 ' LAPI_ADDR_NULL '(FORTRAN의 경우)이 아닌 경우).
자세한 내용은 분산 측 DGSP 처리를 위한 lapi_am_dgsp_t 사용을 참조하세요.
Lapi_amdgsp_t 플래그 필드
' | '(비트 또는) 연산자를 사용하여 하나 이상의 플래그를 설정할 수 있습니다. 사용자 지시어는 항상 준수해야 하며 잘못 사용하면 잘못된 결과를 초래할 수 있습니다. 적절한 힌트를 제공하면 성능이 향상될 수 있지만 LAPI에서 무시될 수 있습니다. 부적절한 힌트는 성능을 저하시킬 수 있지만 잘못된 결과를 초래하지는 않습니다.
- Use_tgt_vec_type
- LAPI가 대상 벡터의 벡터 유형(tgt_vec)을 사용하도록 지시합니다. 즉, tgt_vec은 ' lapi_vec_t 유형으로 해석되어야 하며, 그렇지 않으면 ' lapi_lvec_t' 유형으로 해석됩니다. ' lapi_lvec_t ' 유형은 ' lapi_long_t 를 사용합니다. ' lapi_vec_t 유형은 ' void * ' 또는 ' long'을 사용합니다. 한 유형을 다른 유형 대신 사용하면 잘못된 결과가 발생합니다.
- Buffer_both_contiguous
- 전송할 모든 데이터를 연속된 데이터로 처리하여 성능을 개선할 수 있도록 LAPI에 지시합니다. 비연속 데이터가 전송될 때 이 플래그를 설정하면 데이터가 손상될 가능성이 높습니다.
- LAPI_NOT_USE_BULK_XER
- 작업에 대한 현재 설정과 관계없이 LAPI가 대량 전송을 사용하지 않도록 지시합니다.
- LAPI_USE_BULK_XER
- 작업에 대한 현재 설정과 관계없이 LAPI가 대량 전송을 사용하도록 지시합니다.
이러한 힌트는 커뮤니케이션 라이브러리에 의해 반영될 수도 있고 반영되지 않을 수도 있습니다.
분산 측 DGSP 처리를 위해 lapi_am_dgsp_t 사용
LAPI는 ' lapi_return_info_t 데이터 유형을 사용하여 헤더 핸들러에서 추가 정보를 반환할 수 있습니다. ' lapi_return_info_t'에 대한 자세한 내용은 AIX 5L용 RSCT: LAPI 프로그래밍 가이드를 참조하세요. 전송 유형이 ' lapi_am_dgsp_t'인 경우, 이 메커니즘을 사용하여 수신 측에 데이터를 분산하기 위해 사용자 DGSP를 실행하도록 LAPI에 지시할 수 있습니다.
이 메커니즘을 사용하려면 사용자 헤더 핸들러의 msg_len 멤버를 통해 ' lapi_return_info_t * 포인터를 LAPI에 다시 전달하세요. 전달된 구조체의 dgsp_handle 멤버는 수신 측에 등록된 DGSP 설명을 가리켜야 합니다. DGSP 빌드 및 등록에 대한 자세한 내용은 ' LAPI_Util ' 및 AIX 5L용 RSCT: LAPI 프로그래밍 가이드를 참조하세요.
lAPI_GET_T 세부 정보
| lapi_get_t 필드 이름(C) | lapi_get_t 필드 유형(C) | 동등한 FORTRAN 데이터 유형 | 동등한 LAPI_Get 매개변수 |
|---|---|---|---|
| Xfer_type | lapi_xfer_type_t | INTEGER(KIND = 4) | c에 내재된 fORTRAN의 LAPI_Xfer 값: ' LAPI_GET_XFER' |
| flags | int | INTEGER(KIND = 4) | 없음 fORTRAN의 LAPI_Xfer 매개 변수: 플래그 |
| tgt | uint | INTEGER(KIND = 4) | tgt |
| 없음 | 없음 | INTEGER(KIND = 4) | fORTRAN의 LAPI_Xfer 매개 변수: 패드 |
| tgt_addr | lapi_long_t | INTEGER(KIND = 8) | tgt_addr |
| org_addr | void * | INTEGER(KIND = 4) (32비트)
' INTEGER(KIND = 8) '(64비트) |
org_addr |
| len | ulong | INTEGER(KIND = 4) (32비트)
' INTEGER(KIND = 8) '(64비트) |
len |
| tgt_cntr | lapi_long_t | INTEGER(KIND = 8) | tgt_cntr |
| org_cntr | lapi_cntr_t * | INTEGER(KIND = 4) (32비트)
' INTEGER(KIND = 8) '(64비트) |
org_cntr |
| chndlr | compl_hndlr_t * | INTEGER(KIND = 4) (32비트)
' INTEGER(KIND = 8) '(64비트) |
없음 fORTRAN의 LAPI_Xfer 매개 변수: chndlr |
| cinfo | void * | INTEGER(KIND = 4) (32비트)
' INTEGER(KIND = 8) '(64비트) |
없음 fORTRAN의 LAPI_Xfer 매개변수: cinfo |
lAPI_GETV_T 세부 정보
| lapi_getv_t 필드 이름(C) | lapi_getv_t 필드 유형(C) | 동등한 FORTRAN 데이터 유형 | 동등한 LAPI_Getv 매개변수 |
|---|---|---|---|
| Xfer_type | lapi_xfer_type_t | INTEGER(KIND = 4) | c에 내재된 fORTRAN의 LAPI_Xfer 값: ' LAPI_GETV_XFER' |
| flags | int | INTEGER(KIND = 4) | 없음 fORTRAN의 LAPI_Xfer 매개 변수: 플래그 |
| tgt | uint | INTEGER(KIND = 4) | tgt |
| 없음 | 없음 | INTEGER(KIND = 4) | fORTRAN(64비트)의 LAPI_Xfer 매개변수: pad |
| org_vec | lapi_vec_t * | INTEGER(KIND = 4) (32비트)
' INTEGER(KIND = 8) '(64비트) |
org_vec |
| tgt_vec | void * | INTEGER(KIND = 4) (32비트)
' INTEGER(KIND = 8) '(64비트) |
tgt_vec |
| 없음 | 없음 | INTEGER(KIND = 4) | fORTRAN(32비트)의 LAPI_Xfer 매개변수: pad |
| tgt_cntr | lapi_long_t | INTEGER(KIND = 8) | tgt_cntr |
| org_cntr | lapi_cntr_t * | INTEGER(KIND = 4) (32비트)
' INTEGER(KIND = 8) '(64비트) |
org_cntr |
| chndlr | compl_hndlr_t * | INTEGER(KIND = 4) (32비트)
' INTEGER(KIND = 8) '(64비트) |
없음 fORTRAN의 LAPI_Xfer 매개 변수: chndlr |
| cinfo | void * | INTEGER(KIND = 4) (32비트)
' INTEGER(KIND = 8) '(64비트) |
없음 fORTRAN의 LAPI_Xfer 매개변수: cinfo |
| 없음 | 없음 | INTEGER(KIND = 4) | fORTRAN(32비트)의 LAPI_Xfer 매개변수: pad2 |
원본 데이터 버퍼가 완전히 도착하면 완료 핸들러에 대한 포인터(chndlr)가 ' chndlr '(C의 경우)나 ' LAPI_ADDR_NULL '(FORTRAN의 경우)가 NULL 포인터가 아닌 경우 완료 데이터(cinfo' )와 함께 호출됩니다. 그렇지 않으면 동작은 ' LAPI_Getv'의 동작과 동일합니다.
lAPI_PUT_T 세부 정보
| lapi_put_t 필드 이름(C) | lapi_put_t 필드 유형(C) | 동등한 FORTRAN 데이터 유형 | 동등한 LAPI_Put 매개변수 |
|---|---|---|---|
| Xfer_type | lapi_xfer_type_t | INTEGER(KIND = 4) | c에 내재된 fORTRAN의 LAPI_Xfer 값: ' LAPI_PUT_XFER' |
| flags | int | INTEGER(KIND = 4) | 없음 fORTRAN의 LAPI_Xfer 매개 변수: 플래그 |
| tgt | uint | INTEGER(KIND = 4) | tgt |
| 없음 | 없음 | INTEGER(KIND = 4) | fORTRAN의 LAPI_Xfer 매개 변수: 패드 |
| tgt_addr | lapi_long_t | INTEGER(KIND = 8) | tgt_addr |
| org_addr | void * | INTEGER(KIND = 4) (32비트)
' INTEGER(KIND = 8) '(64비트) |
org_addr |
| len | ulong | INTEGER(KIND = 4) (32비트)
' INTEGER(KIND = 8) '(64비트) |
len |
| shdlr | scompl_hndlr_t * | INTEGER(KIND = 4) (32비트)
' INTEGER(KIND = 8) '(64비트) |
없음 fORTRAN의 LAPI_Xfer 매개 변수: shdlr |
| sinfo | void * | INTEGER(KIND = 4) (32비트)
' INTEGER(KIND = 8) '(64비트) |
없음 fORTRAN의 LAPI_Xfer 매개 변수: sinfo |
| tgt_cntr | lapi_long_t | INTEGER(KIND = 8) | tgt_cntr |
| org_cntr | lapi_cntr_t * | INTEGER(KIND = 4) (32비트)
' INTEGER(KIND = 8) '(64비트) |
org_cntr |
| cmpl_cntr | lapi_cntr_t * | INTEGER(KIND = 4) (32비트)
' INTEGER(KIND = 8) '(64비트) |
cmpl_cntr |
lAPI_PTV_T 세부 정보
| lapi_putv_t 필드 이름(C) | lapi_putv_t 필드 유형(C) | 동등한 FORTRAN 데이터 유형 | 동등한 LAPI_Putv 매개변수 |
|---|---|---|---|
| Xfer_type | lapi_xfer_type_t | INTEGER(KIND = 4) | c에 내재된 fORTRAN의 LAPI_Xfer 값: ' LAPI_PUT_XFER' |
| flags | int | INTEGER(KIND = 4) | 없음 fORTRAN의 LAPI_Xfer 매개 변수: 플래그 |
| tgt | uint | INTEGER(KIND = 4) | tgt |
| 없음 | 없음 | INTEGER(KIND = 4) | fORTRAN(64비트)의 LAPI_Xfer 매개변수: pad |
| shdlr | scompl_hndlr_t * | INTEGER(KIND = 4) (32비트)
' INTEGER(KIND = 8) '(64비트) |
없음 fORTRAN의 LAPI_Xfer 매개 변수: shdlr |
| sinfo | void * | INTEGER(KIND = 4) (32비트)
' INTEGER(KIND = 8) '(64비트) |
없음 fORTRAN의 LAPI_Xfer 매개 변수: sinfo |
| org_vec | lapi_vec_t * | INTEGER(KIND = 4) (32비트)
' INTEGER(KIND = 8) '(64비트) |
org_vec |
| tgt_vec | void * | INTEGER(KIND = 4) (32비트)
' INTEGER(KIND = 8) '(64비트) |
tgt_vec |
| 없음 | 없음 | INTEGER(KIND = 4) | fORTRAN(32비트)의 LAPI_Xfer 매개변수: pad |
| tgt_cntr | lapi_long_t | INTEGER(KIND = 8) | tgt_cntr |
| org_cntr | lapi_cntr_t * | INTEGER(KIND = 4) (32비트)
' INTEGER(KIND = 8) '(64비트) |
org_cntr |
| cmpl_cntr | lapi_cntr_t * | INTEGER(KIND = 4) (32비트)
' INTEGER(KIND = 8) '(64비트) |
cmpl_cntr |
원본 데이터 버퍼를 자유롭게 수정할 수 있는 경우, 전송 완료 처리기에 대한 포인터(shdlr)가 전송 완료 데이터(sinfo' )와 함께 호출되며, ' shdlr '이 NULL 포인터(C의 경우) 또는 ' LAPI_ADDR_NULL '(FORTRAN의 경우)가 아닌 경우 전송 완료 처리기에 대한 포인터가 호출됩니다. 그렇지 않으면 동작은 ' LAPI_Putv'의 동작과 동일합니다.
lAPI_RMW_T 세부 정보
| lAPI_RMW_T 필드 이름(C) | lAPI_RMW_T 필드 유형(C) | 동등한 FORTRAN 데이터 유형 | 동등한 LAPI_Rmw 매개변수 |
|---|---|---|---|
| Xfer_type | lapi_xfer_type_t | INTEGER(KIND = 4) | c에 내재된 fORTRAN의 LAPI_Xfer 값: ' LAPI_RMW_XFER' |
| op | Rmw_ops_t | INTEGER(KIND = 4) | op |
| tgt | uint | INTEGER(KIND = 4) | tgt |
| 크기 | uint | INTEGER(KIND = 4) | c에 내재된 fORTRAN의 LAPI_Xfer 매개변수: 크기 (' 32 ' 또는 ' 64'여야 함) |
| tgt_var | lapi_long_t | INTEGER(KIND = 8) | tgt_var |
| in_val | void * | INTEGER(KIND = 4) (32비트)
' INTEGER(KIND = 8) '(64비트) |
in_val |
| prev_tgt_val | void * | INTEGER(KIND = 4) (32비트)
' INTEGER(KIND = 8) '(64비트) |
prev_tgt_val |
| org_cntr | lapi_cntr t * | INTEGER(KIND = 4) (32비트)
' INTEGER(KIND = 8) '(64비트) |
org_cntr |
| shdlr | scompl_hndlr_t * | INTEGER(KIND = 4) (32비트)
' INTEGER(KIND = 8) '(64비트) |
없음 fORTRAN의 LAPI_Xfer 매개 변수: shdlr |
| sinfo | void * | INTEGER(KIND = 4) (32비트)
' INTEGER(KIND = 8) '(64비트) |
없음 fORTRAN의 LAPI_Xfer 매개 변수: shdlr |
| 없음 | 없음 | INTEGER(KIND = 4) | fORTRAN(32비트)의 LAPI_Xfer 매개변수: pad |
매개변수
- 입력
- hndl
- LAPI 핸들을 지정합니다.
- xfer_cmd
- 데이터 전송 함수의 이름과 매개변수를 지정합니다.
- OUTPUT
- ierror
- FORTRAN 반환 코드를 지정합니다. 이 매개변수는 항상 마지막 매개변수입니다.
리턴 값
- LAPI_SUCCESS
- 함수 호출이 성공적으로 완료되었음을 나타냅니다.
- LAPI_ERR_DATA_LEN
- Udata_len 또는 len의 값이 LAPI 상수 ' LAPI_MAX_MSG_SZ'의 값보다 크다는 것을 나타냅니다.
- LAPI_ERR_DGSP
- 전달된 DGSP가 NULL(C에서는) 또는 ' LAPI_ADDR_NULL '(FORTRAN에서는)이거나 등록된 DGSP가 아님을 나타냅니다.
- LAPI_ERR_DGSP_ATOM
- DGSP에 ' 0 '보다 작거나 MAX_ATOM_SIZE보다 큰 atom_size가 있음을 나타냅니다.
- LAPI_ERR_DGSP_Branch
- DGSP가 코드 배열을 벗어난 브랜치를 시도했음을 나타냅니다.
- LAPI_ERR_DGSP_CTL
- 유효하지 않은 컨텍스트(예: 수집 시 원자 크기가 ' 0 '인 수집 측 제어 또는 분산 측 제어)에서 DGSP 제어 명령이 발생했음을 나타냅니다.
- LAPI_ERR_DGSP_OPC
- DGSP 연산 코드가 유효하지 않음을 나타냅니다.
- LAPI_ERR_DGSP_STACK
- DGSP가 할당된 스택 지원보다 더 큰 GOSUB 깊이를 가짐을 나타냅니다. 스택 할당은 dgsp->depth 멤버에 의해 지정됩니다.
- LAPI_ERR_HDR_HNDLR_NULL
- 전달된 hdr_hdl이 NULL(C에서는) 또는 ' LAPI_ADDR_NULL '(FORTRAN에서는)임을 나타냅니다.
- LAPI_ERR_HNDL_INVALID
- 전달된 hndl이 유효하지 않음을 나타냅니다(초기화되지 않았거나 종료된 상태).
- LAPI_ERR_IN_VAL_NULL
- In_val 포인터가 NULL(C에서는) 또는 ' LAPI_ADDR_NULL '(FORTRAN에서는)임을 나타냅니다.
- LAPI_ERR_MEMORY_EXPIRED
- LAPI가 시스템에서 메모리를 가져올 수 없습니다.
- LAPI_ERR_OP_SZ
- ' lapi_rmw_t 크기 필드가 ' 32 ' 또는 ' 64'으로 설정되지 않았음을 나타냅니다.
- LAPI_ERR_ORG_ADDR_NULL
- 전달된 udata 파라미터가 NULL(C에서는) 또는 ' LAPI_ADDR_NULL '(FORTRAN에서는)이고 udata_len이 ' 0 보다 크거나, 전달된 org_addr이 NULL(C에서는) 또는 ' LAPI_ADDR_NULL '(FORTRAN에서는)이고 len이 ' 0' 보다 크다는 것을 나타냅니다.
Note: '이 ' Xfer_type '=' LAPI_DGSP_XFER인 경우, ' udata '가 NULL(C) 또는 ' LAPI_ADDR_NULL '(FORTRAN)이고 ' udata_len '이 ' 0 '보다 큰 경우는 유효하므로 오류가 반환되지 않습니다.
- LAPI_ERR_ORG_EXTENT
- Org_vec의 범위(보폭 * num_vecs)가 LAPI 상수 ' LAPI_MAX_MSG_SZ의 값보다 크다는 것을 나타냅니다.
- LAPI_ERR_ORG_STRIDE
- Org_vec 보폭이 블록보다 작음을 나타냅니다.
- LAPI_ERR_ORG_VEC_ADDR
- ' org_vec->정보[i] '가 NULL(C에서는) 또는 ' LAPI_ADDR_NULL '(FORTRAN에서는)이지만 그 길이(org_vec->len[i]' )가 ' 0'이 아닌 것을 나타냅니다.
- LAPI_ERR_ORG_VEC_LEN
- Org_vec->len의 합이 LAPI 상수 ' LAPI_MAX_MSG_SZ'의 값보다 크다는 것을 나타냅니다.
- LAPI_ERR_ORG_VEC_NULL
- Org_vec 값이 NULL(C의 경우) 또는 ' LAPI_ADDR_NULL '(FORTRAN의 경우)임을 나타냅니다.
- LAPI_ERR_ORG_VEC_TYPE
- ' org_vec->vec_type '가 유효하지 않음을 나타냅니다.
- LAPI_ERR_RMW_OP
- 연산이 유효하지 않음을 나타냅니다.
- LAPI_ERR_STRIDE_ORG_VEC_ADDR_NULL
- 스트라이딩 벡터 주소 ' org_vec' ->정보[0]이 NULL(C에서는) 또는 ' LAPI_ADDR_NULL '(FORTRAN에서는)임을 나타냅니다.
- LAPI_ERR_STRIDE_TGT_VEC_ADDR_NULL
- 스트라이딩 벡터 주소 ' tgt_vec' ->정보[0]이 NULL(C에서는) 또는 ' LAPI_ADDR_NULL '(FORTRAN에서는)임을 나타냅니다.
- LAPI_ERR_TGT
- 전달된 tgt가 작업에 정의된 작업 범위를 벗어났음을 나타냅니다.
- LAPI_ERR_TGT_ADDR_NULL
- Ret_addr이 NULL(C의 경우) 또는 ' LAPI_ADDR_NULL '(FORTRAN의 경우)임을 나타냅니다.
- LAPI_ERR_TGT_EXTENT
- Tgt_vec의 범위(보폭 * num_vecs)가 LAPI 상수 ' LAPI_MAX_MSG_SZ의 값보다 크다는 것을 나타냅니다.
- LAPI_ERR_TGT_PURGED
- ' LAPI_Purge_totask() '이 호출되어 서브루틴이 일찍 반환되었음을 나타냅니다.
- LAPI_ERR_TGT_STRIDE
- Tgt_vec 보폭이 블록보다 작음을 나타냅니다.
- LAPI_ERR_TGT_VAR_NULL
- Tgt_var 주소가 NULL(C에서는)이거나 tgt_var 값이 ' LAPI_ADDR_NULL '(FORTRAN에서는)임을 나타냅니다.
- LAPI_ERR_TGT_VEC_ADDR
- ' tgt_vec' ->정보' [i]가 NULL(C에서는) 또는 ' LAPI_ADDR_NULL '(FORTRAN에서는)이지만 그 길이(tgt_vec->len[i])가 ' 0'이 아님을 나타냅니다.
- LAPI_ERR_TGT_VEC_LEN
- ' tgt_vec->len '의 합이 LAPI 상수 ' LAPI_MAX_MSG_SZ'의 값보다 크다는 것을 나타냅니다.
- LAPI_ERR_TGT_VEC_NULL
- Tgt_vec이 NULL(C의 경우) 또는 ' LAPI_ADDR_NULL '(FORTRAN의 경우)임을 나타냅니다.
- LAPI_ERR_TGT_VEC_TYPE
- ' tgt_vec->vec_type '가 유효하지 않음을 나타냅니다.
- LAPI_ERR_UHDR_LEN
- 전달된 uhdr_len 값이 MAX_UHDR_SZ보다 크거나 프로세서 더블워드 크기의 배수가 아님을 나타냅니다.
- LAPI_ERR_UHDR_NULL
- 전달된 uhdr이 NULL(C에서는) 또는 ' LAPI_ADDR_NULL '(FORTRAN에서는)이지만 uhdr_len이 ' 0'가 아님을 나타냅니다.
- LAPI_ERR_VEC_LEN_DIFF
- Org_vec과 tgt_vec의 길이가 다르다는 것을 나타냅니다(len[ ]).
- LAPI_ERR_VEC_NUM_DIFF
- Org_vec과 tgt_vec의 num_vec이 다르다는 것을 나타냅니다.
- LAPI_ERR_VEC_TYPE_DIFF
- Org_vec과 tgt_vec이 서로 다른 벡터 유형(vec_type)을 가짐을 나타냅니다.
- LAPI_ERR_XER_CMD
- Xfer_cmd가 유효하지 않음을 나타냅니다.
C 예제
- ' LAPI_Xfer ' 인터페이스를 사용하여 ' LAPI_Get '에 표시된 샘플 코드를 실행합니다:
{ 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); } - ' LAPI_Xfer ' 인터페이스를 사용하여 ' LAPI_Amsendv '에서 ' LAPI_STRIDED_VECTOR ' 예제를 구현합니다:
{ 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); . . . }
위치
- /usr/lib/liblapi_r.a