Let us consider the following problem : , with A,B and C persistent matrices.
double *A, *B, *C;
// matrices initialization
...
diet_initialize();
strcpy(path,"MatPROD");
profile = diet_profile_alloc(path, 1, 1, 2);
diet_matrix_set(diet_parameter(profile,0),
A, DIET_PERSISTENT, DIET_DOUBLE, mA, nA, oA);
print_matrix(A, mA, nA, (oA == DIET_ROW_MAJOR));
diet_matrix_set(diet_parameter(profile,1),
B, DIET_PERSISTENT, DIET_DOUBLE, mB, nB, oB);
print_matrix(B, mB, nB, (oB == DIET_ROW_MAJOR));
diet_matrix_set(diet_parameter(profile,2),
NULL, DIET_PERSISTENT_RETURN, DIET_DOUBLE, mA, nB, oC);
if (!diet_call(profile)) {
diet_matrix_get(diet_parameter(profile,2),&C, NULL, &mA, &nB, &oC);
store_id(profile->parameters[2].desc.id,"matrix C of doubles");
store_id(profile->parameters[1].desc.id,"matrix B of doubles");
store_id(profile->parameters[0].desc.id,"matrix A of doubles");
print_matrix(C, mA, nB, (oC == DIET_ROW_MAJOR));
}
diet_profile_free(profile);
// free matrices memory
...
diet_finalize();
Then, a client submits the problem : with C already present in the platform. We consider that the handle of C is ``id.MA1.1.3''.
double *C, *D, *E;
// matrices initialization
...
diet_initialize();
strcpy(path,"MatSUM");
profile2 = diet_profile_alloc(path, 1, 1, 2);
printf("second pb\n\n");
diet_use_data(diet_parameter(profile2,0), "id.MA1.1.3");
diet_matrix_set(diet_parameter(profile2,1),
E, DIET_PERSISTENT, DIET_DOUBLE, mA, nB, oE);
print_matrix(E, mA, nB, (oE == DIET_ROW_MAJOR));
diet_matrix_set(diet_parameter(profile2,2),
NULL, DIET_PERSISTENT_RETURN, DIET_DOUBLE, mA, nB, oD);
if (!diet_call(profile2)) {
diet_matrix_get(diet_parameter(profile2,2), &D, NULL, &mA, &nB, &oD);
print_matrix(D, mA, nB, (oD == DIET_ROW_MAJOR));
store_id(profile2->parameters[2].desc.id,"matrix D of doubles");
store_id(profile2->parameters[1].desc.id,"matrix E of doubles");
}
diet_profile_free(profile2);
diet_free_persistent_data("id.MA1.1.3");
// free matrices memory
...
diet_finalize();
Note that when a single client creates persistent data with a first DIET call and uses that data with a second DIET call, we will not know in advance the identifier of the data. However, the identifier is stored in the structure of the first profile. For example, consider a matrix A built with diet_matrix_set() method as follows:
...
diet_profile_t *profile;
...
diet_matrix_set(diet_parameter(profile,0),
E, DIET_PERSISTENT, DIET_DOUBLE, mA, nA, oA);
...
After the first diet_call, the identifier of A is stored in
the profile
... diet_profile_t *profile2; ... diet_use_data(diet_parameter(profile2,0),profile->parameters[0].desc.id); ...