97 const std::string& expression_string,
98 const std::size_t& cost)
104 std::vector<T> v0(vec_size, T(3.1234567890));
105 std::vector<T> v1(vec_size, T(5.1234567890));
106 std::vector<T> v2(vec_size, T(7.1234567890));
110 symbol_table_t symbol_table;
111 symbol_table.add_vector(
"v0",v0);
112 symbol_table.add_vector(
"v1",v1);
113 symbol_table.add_vector(
"v2",v2);
114 symbol_table.add_package(vecops_package);
116 expression_t expression;
117 expression.register_symbol_table(symbol_table);
121 if (!parser.compile(expression_string,expression))
123 printf(
"[load_expression] - Parser Error: %s\tExpression: %s\n",
124 parser.error().c_str(),
125 expression_string.c_str());
136 for (std::size_t r = 0; r <
rounds; ++r)
138 total += expression.value();
144 printf(
"Total Time:%10.7f Rate:%11.3fevals/sec Perf: %5.3fGFLOPS Expression: %s\n",
147 (
rounds * vec_size * cost) / (1e+9 * timer.
time()),
148 expression_string.c_str());
150 printf(
"run_expression_benchmark() - Error running benchmark for expression: %s\n",
151 expression_string.c_str());
157 std::vector<std::thread> thread_list;
163 for (std::size_t i = 0; i < thread_count; ++i)
165 thread_list.emplace_back(
166 std::thread([vec_size]()
170 run_expression_benchmark<T>(
178 for (
auto& t : thread_list)
185 unsigned long long total_flops = 0;
192 total_flops = (total_flops *
rounds * vec_size * thread_count);
194 printf(
"Total Time:%10.7f FLOP: %llu Perf: %7.4fGFLOPS\n",
197 total_flops / (1e9 * timer.
time()));