| 239 | |
| 240 | template <typename Index> |
| 241 | static void BM_ScatterHelper(int iters, int embedding_size, const char* op) { |
| 242 | testing::StopTiming(); |
| 243 | const int kRows = 10000000 / embedding_size; |
| 244 | std::vector<float> values; |
| 245 | values.reserve(kRows); |
| 246 | for (int i = 0; i < kRows * embedding_size; i++) { |
| 247 | values.push_back(i); |
| 248 | } |
| 249 | const int kNumUpdates = 1000; |
| 250 | random::PhiloxRandom philox(301, 17); |
| 251 | random::SimplePhilox rnd(&philox); |
| 252 | std::vector<Index> indices; |
| 253 | std::vector<float> updates; |
| 254 | for (int i = 0; i < kNumUpdates; i++) { |
| 255 | indices.push_back(rnd.Uniform(kRows)); |
| 256 | for (int j = 0; j < embedding_size; j++) { |
| 257 | updates.push_back(i * 10 + j); |
| 258 | } |
| 259 | } |
| 260 | |
| 261 | ScatterUpdateBM bm; |
| 262 | bm.MakeBenchmarkOp(op, DataTypeToEnum<Index>::v()); |
| 263 | bm.AddInputFromArray<float>(TensorShape({kRows, embedding_size}), values); |
| 264 | bm.AddInputFromArray<Index>(TensorShape({kNumUpdates}), indices); |
| 265 | bm.AddInputFromArray<float>(TensorShape({kNumUpdates, embedding_size}), |
| 266 | updates); |
| 267 | testing::ItemsProcessed((static_cast<int64>(kNumUpdates) * embedding_size) * |
| 268 | iters); |
| 269 | testing::StartTiming(); |
| 270 | while (iters-- > 0) { |
| 271 | Status s = bm.RunOpKernel(); |
| 272 | } |
| 273 | testing::StopTiming(); |
| 274 | } |
| 275 | |
| 276 | static void BM_ScatterUpdateInt32(int iters, int embedding_size) { |
| 277 | BM_ScatterHelper<int32>(iters, embedding_size, "ScatterUpdate"); |
nothing calls this directly
no test coverage detected