openfam::fam::fam_set
Atomically set a value in FAM.
Synopsis
void fam_set(Fam_Descriptor *descriptor, uint64_t offset, int32_t value);
void fam_set(Fam_Descriptor *descriptor, uint64_t offset, int64_t value);
void fam_set(Fam_Descriptor *descriptor, uint64_t offset, uint32_t value);
void fam_set(Fam_Descriptor *descriptor, uint64_t offset, uint64_t value);
void fam_set(Fam_Descriptor *descriptor, uint64_t offset, float value);
void fam_set(Fam_Descriptor *descriptor, uint64_t offset, double value);
void fam_set(Fam_Descriptor *descriptor, uint64_t offset, int128_t value);
Description
These methods atomically set a value in FAM.
Input Arguments
Name | Description |
---|---|
Descriptor | Descriptor associated with the data item. |
Offset | Offset within the data item in FAM where value is located. |
Value | Value to be set at the given location. |
Return Values
None. Throws an exception on error.
Exceptions
Exception | Description |
---|---|
Fam_InvalidOption_Exception | incorrect parameters are passed. |
Fam_Datapath_Exception | error occurred during atomic operation over fabric. |
FAM_ERR_NOPERM | Caller does not have access rights. |
FAM_ERR_LIBFABRIC | libfabric error occurred. |
FAM_ERR_NOTFOUND | Item not found in the region. |
FAM_ERR_GRPC | if there is a communication error with memory server |
FAM_ERR_RPC_CLIENT_NOTFOUND | Memory server initialization failure |
Notes
These methods atomically set a value in FAM. Note that the offset argument must point to the correct value for the data type. Availability of these methods is dependent on hardware support for the operations.
A subsequent successful completion of fam_quiet() call ensures the completion of this atomic operation.
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"); //Atomically set the value of first integer element in the array myFam->fam_set(descriptor, 0, 10); // ensure that the set operation is complete myFam->fam_quiet(); // we now have the set the first integer in FAM to value of 10 } catch (Fam_Exception &e) { printf("fam API failed: %d: %s\n", e.fam_error(), e.fam_error_msg()); } // ... Finalization code follows }