//********************************************************************** PHX_EVALUATE_FIELDS(DotProduct,workset) { for (std::size_t cell = 0; cell < workset.num_cells; ++cell) { for (int p = 0; p < num_pts; ++p) { vec_a_dot_vec_b(cell,p) = ScalarT(0.0); for (int dim = 0; dim < num_dim; ++dim) vec_a_dot_vec_b(cell,p) += vec_a(cell,p,dim) * vec_b(cell,p,dim); } } }
int main() { float f = 8.75; int i = int (f); std::vector< double > vec_a (i); std::vector< double > vec_b (int (f)); // this is ok: vec_a[0] = 1.; // this is not: vec_b[0] = 1.; 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; }