#include<array>#include<chrono>#include<iostream>#include<string>#include<vector>#include"boost/core/noncopyable.hpp"usingstd::chrono::duration_cast;usingstd::chrono::high_resolution_clock;classBenchTimer:boost::noncopyable{high_resolution_clock::time_pointtp;std::stringname;std::vector<std::string>rd;std::vector<double>dt;public:inlinevoidst(conststd::string&name){this->name=name;tp=high_resolution_clock::now();}inlinevoidend(){dt.emplace_back(duration_cast<std::chrono::nanoseconds>(high_resolution_clock::now()-tp).count());rd.emplace_back(this->name);}voidshowBenchTest(){for(inti=0,size=static_cast<int>(rd.size());i<size;i++){std::cout<<rd[i]<<":"<<dt[i]/1000<<"\n";}}};intmain(){std::vector<int>arr_a(256,0);std::vector<int>arr_b(256,100);typedefintint256__attribute__((vector_size(256*sizeof(int))));int256a;int256b;for(inti=0;i<256;i++){arr_a[i]=i;a[i]=i;arr_b[i]=256-i;b[i]=256-i;}intt=10000;autobench=BenchTimer();#pragma clang optimize off
bench.st("foreach");while(t>0){for(autoi=0;i<256;i++){arr_a[i]=2*arr_b[i];}t--;}bench.end();t=10000;bench.st("vec");while(t>0){a=2*b;t--;}bench.end();#pragma clang optimize on
bench.showBenchTest();std::cout<<"2*b[0]=="<<a[0]<<std::endl;}