//**********************************************************************
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);
        }
    }
}
Exemple #2
0
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;
}