int main() { int ia[] = {29,23,20,22,17,15,26,51,19,12,35,40}; int ia2[] = {74,16,39,54,21,44,62,10,27,41,65,71}; vector< int, allocator > vec1( ia, ia +12 ), vec2( ia2, ia2+12 ); int ia_result[24]; vector< int, allocator > vec_result( vec1.size()+vec2.size() ); sort( ia, ia +12 ); sort( ia2, ia2+12 ); // generates: 10 12 15 16 17 19 20 21 22 23 26 27 29 35 39 40 41 44 51 54 62 65 71 74 merge( ia, ia+12, ia2, ia2+12, ia_result ); for_each( ia_result, ia_result+24, pfi ); cout << "\n\n"; sort( vec1.begin(), vec1.end(), greater<int>() ); sort( vec2.begin(), vec2.end(), greater<int>() ); merge( vec1.begin(), vec1.end(), vec2.begin(), vec2.end(), vec_result.begin(), greater<int>() ); // generates: 74 71 65 62 54 51 44 41 40 39 35 29 27 26 23 22 21 20 19 17 16 15 12 10 for_each( vec_result.begin(), vec_result.end(), pfi ); cout << "\n\n"; return 0; }
static int test_neon() { const int test_round = 1000; const int data_len = 100000; std::vector<float> vec_a(data_len); std::vector<float> vec_b(data_len); std::vector<float> vec_result(data_len); std::vector<float> vec_result2(data_len); //fill random value in vecA & vecB std::cout << "round of test is " << test_round << std::endl; std::cout << "size of input vector is "<< data_len << std::endl; std::cout << "filling random data to input vector..." << std::endl; fill_random_value(vec_a); fill_random_value(vec_b); std::cout << "fill random data to input vector done.\n" << std::endl; //check the result is same { normal_vector_mul(vec_a, vec_b, vec_result); neon_vector_mul(vec_a, vec_b, vec_result2); if (!is_equals_vector(vec_result,vec_result2)) { std::cerr << "result vector is not equals!" << std::endl; return -1; } } //test normal_vector_mul { FuncCostTimeHelper time_helper("normal_vector_mul"); for (int i = 0; i < test_round;i++) { normal_vector_mul(vec_a, vec_b, vec_result); } } //test neon_vector_mul { FuncCostTimeHelper time_helper("neon_vector_mul"); for (int i = 0; i < test_round; i++) { neon_vector_mul(vec_a, vec_b, vec_result2); } } return 0; }