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); ...
The DIET Team - Mer 29 nov 2017 15:13:36 EST