2013-08-21 71 views
7

Với truyền thông tập thể khu vực MPI3.0 đã được giới thiệu. Và 2 trong số đó (MPI_NEIGHBOR_ALLTOALLWMPI_INEIGHBOR_ALLTOALLW) chuyển vị trí (sdisplsrdispls) là các mảng const MPI_Aint. Ngược lại, cách thức tương tự, nhưng tập thể, funcion (MPI_ALLTOALLWMPI_ALLTOALLW) được xác định bằng các dấu nháy của const int.MPI_Aint trong MPI_ (I) NEIGHBOR_ALLTOALLW() vs int trong MPI_ (I) ALLTOALLW()

Cũng xem xét những gì các v3.0 MPI tiêu chuẩn nói về MPI_Aint (trang 16):

2.5.6 Địa chỉ

Một số thủ tục MPI sử dụng đối số địa chỉ đại diện cho một địa chỉ tuyệt đối trong sự kêu gọi chương trình. Kiểu dữ liệu của đối số như vậy là MPI_Aint trong C và INTEGER (KIND = MPI_ADDRESS_KIND) trong Fortran. Các loại này phải có cùng chiều rộng và mã hóa các giá trị địa chỉ theo cách tương tự sao cho giá trị địa chỉ bằng một ngôn ngữ có thể được chuyển trực tiếp sang ngôn ngữ khác mà không cần chuyển đổi. Có hằng số MPI MPI_BOTTOM để cho biết sự bắt đầu của dải địa chỉ.

tôi vẫn không nắm được vấn đề, và nếu tồn tại, sự khác biệt (ngoài mà MPI_Aint không thể phủ định) giữa intMPI_Aint!

Trả lời

7

MPI_Aint là loại dữ liệu C di động có thể chứa địa chỉ bộ nhớ và có thể lớn hơn bình thường int. Chính sách của Diễn đàn MPI là không thay đổi chữ ký của các cuộc gọi MPI hiện có (vì nó có thể phá vỡ các ứng dụng hiện có - xem here). Thay vào đó, các cuộc gọi mới được giới thiệu thay thế cho các cuộc gọi cũ. Lý do là int hoạt động tốt trước khi kiến ​​trúc 64 bit của LP64 trở nên phổ biến tại thời điểm đó int không còn có thể được sử dụng để giải quyết toàn bộ không gian địa chỉ ảo của một quy trình. Sau khi thực hiện một số cuộc gọi MPI có phiên bản mới trong các phiên bản sau sử dụng MPI_Aint hoặc MPI_Count (loại số nguyên lớn) thay vì int. Ví dụ: MPI_Get_count_x thay thế MPI_Get_count và sử dụng MPI_Count thay vì int.

Trong khía cạnh này MPI_Alltoallw là một cuộc gọi cũ (nó đến từ Bộ KH & ĐT-2.0) và nó vẫn giữ được chữ ký của mình sử dụng int offsets khi MPI_(I)Neighbor_alltoallw là một cái mới (nó đi kèm với Bộ KH & ĐT-3.0) và nó sử dụng các loại địa chỉ trong để có thể làm việc với dữ liệu nằm (gần như) ở bất cứ đâu trong bộ nhớ.

Điều tương tự cũng áp dụng cho các ràng buộc Fortran.

+0

Với câu trả lời và kích thước của bạn (MPI_Aint) hiện tại là 8, cảm ơn :) p.s: Nhưng tại sao giải thích này không có trong tiêu chuẩn? – Nicola

+1

Thông thường những điều như vậy được thảo luận trong danh sách gửi thư công khai và diễn đàn thảo luận của [Diễn đàn MPI] (http://www.mpi-forum.org/). –

+1

Tiêu chuẩn MPI không có nghĩa là hướng dẫn sử dụng, ngay cả khi nó xuất hiện như vậy. Xem sách "Sử dụng MPI" để được giải thích. – Jeff

Các vấn đề liên quan