|
|
|
@ -19,6 +19,8 @@
|
|
|
|
|
#include "dataset/util/task_manager.h"
|
|
|
|
|
#include "dataset/util/queue.h"
|
|
|
|
|
#include <atomic>
|
|
|
|
|
#include <chrono>
|
|
|
|
|
#include <random>
|
|
|
|
|
#include "utils/log_adapter.h"
|
|
|
|
|
|
|
|
|
|
using namespace mindspore::dataset;
|
|
|
|
@ -39,7 +41,7 @@ class RefCount {
|
|
|
|
|
public:
|
|
|
|
|
RefCount() : v_(nullptr) {}
|
|
|
|
|
explicit RefCount(int x) : v_(std::make_shared<int>(x)) {}
|
|
|
|
|
explicit RefCount(const RefCount &o) : v_(o.v_) {}
|
|
|
|
|
RefCount(const RefCount &o) : v_(o.v_) {}
|
|
|
|
|
~RefCount() {
|
|
|
|
|
MS_LOG(DEBUG) << "Destructor of RefCount called" << std::endl;
|
|
|
|
|
gRefCountDestructorCalled++;
|
|
|
|
@ -167,3 +169,70 @@ TEST_F(MindDataTestQueue, Test6) {
|
|
|
|
|
MS_LOG(INFO) << "Popped value " << *pepped_value << " from queue index " << chosen_queue_index;
|
|
|
|
|
ASSERT_EQ(*pepped_value, 99);
|
|
|
|
|
}
|
|
|
|
|
using namespace std::chrono;
|
|
|
|
|
template <typename QueueType, typename PayloadType>
|
|
|
|
|
void Perf(int n, int p, std::string name) {
|
|
|
|
|
auto payload = std::vector<PayloadType>(n, PayloadType(p));
|
|
|
|
|
auto queue = QueueType(n);
|
|
|
|
|
auto t0 = high_resolution_clock::now();
|
|
|
|
|
auto check = 0;
|
|
|
|
|
for (int i = 0; i < queue.capacity(); i++) {
|
|
|
|
|
queue.Add(PayloadType(p));
|
|
|
|
|
}
|
|
|
|
|
check = queue.size();
|
|
|
|
|
for (int i = 0; i < queue.capacity(); i++) {
|
|
|
|
|
queue.PopFront(&payload[i]);
|
|
|
|
|
}
|
|
|
|
|
auto t1 = high_resolution_clock::now();
|
|
|
|
|
std::cout << name << " queue filled size: " << queue.size() << " " << check << std::endl;
|
|
|
|
|
auto t2 = high_resolution_clock::now();
|
|
|
|
|
for (int i = 0; i < queue.capacity(); i++) {
|
|
|
|
|
queue.Add(PayloadType(p));
|
|
|
|
|
}
|
|
|
|
|
check = queue.size();
|
|
|
|
|
for (int i = 0; i < queue.capacity(); i++) {
|
|
|
|
|
queue.PopFront(&payload[i]);
|
|
|
|
|
}
|
|
|
|
|
auto t3 = high_resolution_clock::now();
|
|
|
|
|
auto d = duration_cast<milliseconds>(t3 - t2 + t1 - t0).count();
|
|
|
|
|
std::cout << name << " queue emptied size: " << queue.size() << " " << check << std::endl;
|
|
|
|
|
std::cout << name << " "
|
|
|
|
|
<< " ran in " << d << "ms" << std::endl;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
template <typename QueueType, typename PayloadType>
|
|
|
|
|
void Fuzz(int n, int p, std::string name) {
|
|
|
|
|
std::mt19937 gen(1);
|
|
|
|
|
auto payload = std::vector<PayloadType>(n, PayloadType(p));
|
|
|
|
|
auto queue = QueueType(n);
|
|
|
|
|
auto dist = std::uniform_int_distribution<int>(0, 2);
|
|
|
|
|
std::cout << "###" << std::endl;
|
|
|
|
|
for (auto i = 0; i < n; i++) {
|
|
|
|
|
auto v = dist(gen);
|
|
|
|
|
if (v == 0 && queue.size() < n - 1) {
|
|
|
|
|
queue.Add(std::move(payload[i]));
|
|
|
|
|
}
|
|
|
|
|
if (v == 1 && queue.size() > 0) {
|
|
|
|
|
queue.PopFront(&payload[i]);
|
|
|
|
|
} else {
|
|
|
|
|
queue.Reset();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
std::cout << name << " fuzz ran " << queue.size() << std::endl;
|
|
|
|
|
}
|
|
|
|
|
TEST_F(MindDataTestQueue, TestPerf) {
|
|
|
|
|
try {
|
|
|
|
|
int kSz = 1000000;
|
|
|
|
|
// std::cout << "enter size" << std::endl;
|
|
|
|
|
// std::cin >> kSz;
|
|
|
|
|
Perf<Queue<std::vector<int>>, std::vector<int>>(kSz, 1, "old queue, vector of size 1");
|
|
|
|
|
} catch (const std::exception &e) {
|
|
|
|
|
std::cout << e.what() << std::endl;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
std::cout << "Test Reset" << std::endl;
|
|
|
|
|
std::cout << "Enter fuzz size" << std::endl;
|
|
|
|
|
int fs = 1000;
|
|
|
|
|
// std::cin >> fs;
|
|
|
|
|
Fuzz<Queue<std::vector<int>>, std::vector<int>>(fs, 1, "New queue");
|
|
|
|
|
}
|
|
|
|
|