openfam::fam::fam_map
Map a data item in FAM to the process virtual address space.
Synopsis
void *fam_map(Fam_Descriptor *descriptor);
Description
This method maps a data item in FAM to the PE's virtual address space.
Input Arguments
Name | Description |
---|---|
Descriptor | Descriptor associated with the data item or region in FAM. |
Return Values
A pointer in the PE's virtual address space that can be used to directly manipulate contents of FAM. Throws an exception on error.
Exceptions
Exception | Description |
---|---|
Fam_InvalidOption_Exception | incorrect parameters are passed. |
Fam_Unimplemented_Exception | API not implemented error. (Only for memory server allocator) |
FAM_ERR_NOPERM | Caller does not have access rights |
FAM_ERR_ALREADYEXIST | the data item name is already present in FAM |
FAM_ERR_GRPC | there is a communication error with memory server |
FAM_ERR_RPC_CLIENT_NOTFOUND | Memory server initialization failure |
Notes
Note that if multiple PEs simultaneously access a data item in FAM when at least one has mapped it, they are responsible for enforcing concurrency control and for ensuring that processor caches are managed appropriately. The implementation may limit the FAM size (hence the size of data items) that can be mapped into the processor address space at one time.
Example
#include <string.h> #include <fam/fam.h> #include <fam/fam_exception.h> using namespace std; using namespace openfam; int main(void) { fam *myFam = new fam(); // ... Initialization code here try { // look up the descriptor to a previously allocated data item // (an integer array with at least 10 elements) Fam_Descriptor *descriptor = myFam->fam_lookup("myItem", "myRegion"); // map it into our local address space int *fam_array = (int *) myFam->fam_map(descriptor); // now we can directly manipulate the data in FAM for(int i = 0; i < 10; i++){ printf("%d\n", fam_array[i]); // print it fam_array[i]++; // increment it } // unmap it myFam->fam_unmap(fam_array, descriptor); // we are done... } catch (Fam_Exception &e) { printf("fam API failed: %d: %s\n", e.fam_error(), e.fam_error_msg()); } // ... Finalization code follows }