Skip to content

Commit

Permalink
add checking outarg is empty or not.
Browse files Browse the repository at this point in the history
  • Loading branch information
chengduoZH committed Nov 23, 2017
1 parent 53bd51e commit 1317299
Show file tree
Hide file tree
Showing 6 changed files with 106 additions and 44 deletions.
41 changes: 24 additions & 17 deletions paddle/capi/examples/model_inference/dense/main.c
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ int main() {
for (int i = 0; i < input.size(); ++i) {
input[i] = rand() / ((float)RAND_MAX);
}

// Set value for the input matrix
CHECK(paddle_matrix_set_value(mat, input.data()));

Expand All @@ -49,25 +49,32 @@ int main() {
in_args,
out_args,
/* isTrain */ false));
paddle_matrix prob = paddle_matrix_create_none();

CHECK(paddle_arguments_get_value(out_args, 0, prob));

std::std::vector<paddle_real> result;
int height;
int width;

CHECK(paddle_matrix_get_shape(prob, &height, &width);
result.resize(height * width);
CHECK(paddle_matrix_get_value(prob, result.data()));

printf("Prob: ");
for (int i = 0; i < height * width; ++i) {
printf("%.2f ", result[i]);
int not_empty = 0;
CHECK(paddle_check_args_empty(out_args, &not_empty));
if (not_empty) {
paddle_matrix prob = paddle_matrix_create_none();

CHECK(paddle_arguments_get_value(out_args, 0, prob));

std::std::vector<paddle_real> result;
int height;
int width;

CHECK(paddle_matrix_get_shape(prob, &height, &width));
result.resize(height * width);
CHECK(paddle_matrix_get_value(prob, result.data()));

printf("Prob: ");
for (int i = 0; i < height * width; ++i) {
printf("%.2f ", result[i]);
}
printf("\n");
CHECK(paddle_matrix_destroy(prob));
} else {
printf("Result is empty.\n");
}
printf("\n");

CHECK(paddle_matrix_destroy(prob));
CHECK(paddle_arguments_destroy(out_args));
CHECK(paddle_matrix_destroy(mat));
CHECK(paddle_arguments_destroy(in_args));
Expand Down
27 changes: 17 additions & 10 deletions paddle/capi/examples/model_inference/multi_thread/main.c
Original file line number Diff line number Diff line change
Expand Up @@ -38,17 +38,24 @@ void* thread_main(void* gm_ptr) {
out_args,
/* isTrain */ false));

CHECK(paddle_arguments_get_value(out_args, 0, prob));

CHECK(paddle_matrix_get_row(prob, 0, &array));

pthread_mutex_lock(&mutex);
printf("Prob: ");
for (int i = 0; i < 10; ++i) {
printf("%.2f ", array[i]);
int not_empty = 0;
CHECK(paddle_check_args_empty(out_args, &not_empty));

if (not_empty) {
CHECK(paddle_arguments_get_value(out_args, 0, prob));

CHECK(paddle_matrix_get_row(prob, 0, &array));

pthread_mutex_lock(&mutex);
printf("Prob: ");
for (int i = 0; i < 10; ++i) {
printf("%.2f ", array[i]);
}
printf("\n");
pthread_mutex_unlock(&mutex);
} else {
printf("Result is empty.\n");
}
printf("\n");
pthread_mutex_unlock(&mutex);
}

CHECK(paddle_matrix_destroy(prob));
Expand Down
27 changes: 18 additions & 9 deletions paddle/capi/examples/model_inference/sequence/main.c
Original file line number Diff line number Diff line change
Expand Up @@ -45,21 +45,30 @@ int main() {
in_args,
out_args,
/* isTrain */ false));
paddle_matrix prob = paddle_matrix_create_none();

CHECK(paddle_arguments_get_value(out_args, 0, prob));
int not_empty = 0;
CHECK(paddle_check_args_empty(out_args, &not_empty));

paddle_real* array;
if (not_empty) {
paddle_matrix prob = paddle_matrix_create_none();

CHECK(paddle_matrix_get_row(prob, 0, &array));
CHECK(paddle_arguments_get_value(out_args, 0, prob));

printf("Prob: ");
for (int i = 0; i < 2; ++i) {
printf("%.2f ", array[i]);
paddle_real* array;

CHECK(paddle_matrix_get_row(prob, 0, &array));

printf("Prob: ");
for (int i = 0; i < 2; ++i) {
printf("%.2f ", array[i]);
}
printf("\n");

CHECK(paddle_matrix_destroy(prob));
} else {
printf("Result is empty.\n");
}
printf("\n");

CHECK(paddle_matrix_destroy(prob));
CHECK(paddle_arguments_destroy(out_args));
CHECK(paddle_ivector_destroy(seq_pos));
CHECK(paddle_ivector_destroy(sentence));
Expand Down
24 changes: 16 additions & 8 deletions paddle/capi/examples/model_inference/sparse_binary/main.c
Original file line number Diff line number Diff line change
Expand Up @@ -48,19 +48,27 @@ int main() {
in_args,
out_args,
/* isTrain */ false));
paddle_matrix prob = paddle_matrix_create_none();

CHECK(paddle_arguments_get_value(out_args, 0, prob));
int not_empty = 0;
CHECK(paddle_check_args_empty(out_args, &not_empty));
if (not_empty) {
paddle_matrix prob = paddle_matrix_create_none();

CHECK(paddle_matrix_get_row(prob, 0, &array));
CHECK(paddle_arguments_get_value(out_args, 0, prob));

printf("Prob: ");
for (int i = 0; i < 10; ++i) {
printf("%.2f ", array[i]);
CHECK(paddle_matrix_get_row(prob, 0, &array));

printf("Prob: ");
for (int i = 0; i < 10; ++i) {
printf("%.2f ", array[i]);
}
printf("\n");
CHECK(paddle_matrix_destroy(prob));
;
} else {
printf("Result is empty.\ns");
}
printf("\n");

CHECK(paddle_matrix_destroy(prob));
CHECK(paddle_arguments_destroy(out_args));
CHECK(paddle_matrix_destroy(mat));
CHECK(paddle_arguments_destroy(in_args));
Expand Down
22 changes: 22 additions & 0 deletions paddle/capi/gradient_machine.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -168,3 +168,25 @@ paddle_error paddle_gradient_machine_get_layer_output(
out->args.push_back(layerOutput);
return kPD_NO_ERROR;
}

paddle_error paddle_check_args_empty(paddle_arguments inArgs, int* notEmpty) {
notEmpty auto in = paddle::capi::cast<paddle::capi::CArguments>(inArgs);
if (in == nullptr || notEmpty == nullptr) return kPD_NULLPTR;

paddle_matrix result = paddle_matrix_create_none();

int height = 0, width = 0;

paddle_error res_err = paddle_arguments_get_value(in, 0, result);
if (res_err == kPD_OUT_OF_RANGE || res_err == kPD_NULLPTR) {
*notEmpty = 0;
CHECK(paddle_matrix_destroy(result));
return kPD_NO_ERROR;
}

CHECK(paddle_matrix_get_shape(result, &height, &width));
CHECK(paddle_matrix_destroy(result));

*notEmpty = height;
return kPD_NO_ERROR;
}
9 changes: 9 additions & 0 deletions paddle/capi/gradient_machine.h
Original file line number Diff line number Diff line change
Expand Up @@ -113,6 +113,15 @@ paddle_gradient_machine_get_layer_output(paddle_gradient_machine machine,
const char* layerName,
paddle_arguments args);

/**
* @brief Check whether the args is empty.
* @param [in] args output of the specified layer
* @param [out] notEmpty whether the args is empty,
* @return paddle_error
*/
PD_API paddle_error paddle_check_args_empty(paddle_arguments inArgs,
int* notEmpty);

#ifdef __cplusplus
}
#endif
Expand Down

0 comments on commit 1317299

Please sign in to comment.