Skip to content

Commit

Permalink
upd
Browse files Browse the repository at this point in the history
  • Loading branch information
wjr-z committed Jun 23, 2024
1 parent c133507 commit 15e4864
Show file tree
Hide file tree
Showing 36 changed files with 13,279 additions and 344 deletions.
3 changes: 2 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -31,4 +31,5 @@ build
.VScodeCounter
**/simdjson.hpp*
**/simdjson.cpp*
codeforces
codeforces
json
52 changes: 52 additions & 0 deletions examples/demo/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
cmake_minimum_required(VERSION 3.10)
project(wjr LANGUAGES CXX)

if(NOT CMAKE_BUILD_TYPE)
set(CMAKE_BUILD_TYPE Release)
endif()

set(CMAKE_USE_GMP on)

if(CMAKE_USE_GMP)
add_compile_definitions(WJR_USE_GMP)
set(USE_GMP_FLAGS "-I \"D:\\msys\\home\\19663\\gmp-6.3.0\"")
else()
set(USE_GMP_FLAGS "")
endif()

if(MSVC)
set(CMAKE_CXX_FLAGS "$ENV{CXXFLAGS} /O2 /std:c++17 /Zc:preprocessor")
else()
set(CMAKE_CXX_FLAGS "$ENV{CXXFLAGS} -O3 -std=c++2a -DNDEBUG -DWJR_DEBUG_LEVEL=0 -march=native ${USE_GMP_FLAGS} -Wall -Wextra -g")
endif()

message(${CMAKE_CXX_FLAGS})

set(WJR_INCLUDE_DIR ${PROJECT_SOURCE_DIR}/../../include)
set(WJR_LIB_DIR ${PROJECT_SOURCE_DIR}/../../src)

file(GLOB_RECURSE WJR_SRCS ${WJR_LIB_DIR}/*.cpp)

add_executable(
wjr
src/main.cpp
${WJR_SRCS}
)

if(CMAKE_USE_GMP)
set(GMP_LIBS "D:\\msys\\home\\19663\\gmp-6.3.0\\.libs")

link_directories(${GMP_LIBS})
target_link_libraries(wjr
${GMP_LIBS}/libgmp.dll.a
${GMP_LIBS}/libgmpxx.dll.a
)
endif()

target_include_directories(wjr PUBLIC
${WJR_INCLUDE_DIR}
)

target_link_libraries(
wjr
)
326 changes: 326 additions & 0 deletions examples/demo/src/main.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,326 @@
#include <chrono>
#include <fstream>
#include <iostream>
#include <map>
#include <random>
#include <set>
#include <variant>
#include <vector>

#include <thread>

#include <wjr/network/timer.hpp>

#include <condition_variable>

// #include <wjr/biginteger.hpp>
// #include <wjr/bplus_tree.hpp>
// #include <wjr/memory/safe_pointer.hpp>

auto get() {
return std::chrono::high_resolution_clock::now().time_since_epoch().count();
}

using namespace wjr;

template <typename Func>
void test(Func fn) {
auto s = get();
fn();
std::cout << get() - s << std::endl;
}

// struct node {
// node() = default;
// node(const node &) = default;
// node &operator=(const node &) = delete;
// ~node() = default;
// };

// extern "C" void __gmpn_mul_basecase(mp_ptr, mp_srcptr, mp_size_t, mp_srcptr,
// mp_size_t);

// extern "C" void __gmpn_toom22_mul(mp_ptr, mp_srcptr, mp_size_t, mp_srcptr, mp_size_t,
// mp_ptr);

// extern "C" void __gmpn_toom42_mul(mp_ptr, mp_srcptr, mp_size_t, mp_srcptr, mp_size_t,
// mp_ptr);

// extern "C" void __gmpn_toom63_mul(mp_ptr, mp_srcptr, mp_size_t, mp_srcptr, mp_size_t,
// mp_ptr);

#include <signal.h>
#include <stdio.h>
#include <time.h>

std::chrono::high_resolution_clock::time_point start;

auto getx() { return clock(); }

uint64_t S;

uint64_t cnt = 0;
int step = 0;

const int N = 1e7;
const int M = 1e5;

WJR_NOINLINE void handle(int) {
auto x = std::chrono::high_resolution_clock::now();
cnt += (x - start).count();
start = x;
++step;
if (step == N) {
std::cout << cnt << ' ' << (cnt / step) << '\n';
std::cout << "CPU : " << (getx() - S) << '\n';
exit(0);
}
}

void foo2() {
std::mutex mt;
std::condition_variable cv;
auto now = std::chrono::high_resolution_clock::now();
while (true) {
now += std::chrono::nanoseconds(200'000);
{
std::unique_lock lk(mt);
cv.wait_until(lk, now);
}
handle(0);
}
}

void foo3() {
auto now = std::chrono::high_resolution_clock::now();
while (true) {
now += std::chrono::nanoseconds(5'000'000);
std::this_thread::sleep_until(now);
for (int i = 0; i < M; ++i) {
handle(0);
}
}
}

template <typename Allocator>
struct allocator_delete {
template <typename T>
void operator()(T *ptr) const {
Allocator alloc;
alloc.deallocate(ptr, 1);
}
};

void foo4() {
auto now = std::chrono::high_resolution_clock::now();

timing_wheels timer(0);

for (int i = 0; i < M; ++i) {
timer.add([]() { handle(0); }, 1);
}

while (true) {
now += std::chrono::nanoseconds(5'000'000);
std::this_thread::sleep_until(now);

timer.next();
timer.run();

for (int i = 0; i < M; ++i) {
timer.add([]() { handle(0); }, 1);
}
}
}

int main() {

// test([&]() {
// for (int i = 0; i < M; ++i) {
// timing_wheels t(0);
// asm volatile("" ::: "memory");
// }
// });

// return 0;

S = getx();
start = std::chrono::high_resolution_clock::now();
foo4();
}

// int main() {

// timer_create()

// test([&]() {
// const int N = 100;
// for (int i = 0; i < N; ++i) {
// std::this_thread::sleep_for(std::chrono::milliseconds(1));
// }
// });

// // {
// // const int N = 1e7;
// // test([&]() {
// // for (int i = 0; i < N; ++i) {
// // auto ptr = malloc((ctz(to_unsigned(i) + 1) + 1) * 8);
// // asm volatile("" : "+r"(ptr));
// // free(ptr);
// // }
// // });
// // }

// // return 0;
// // for (int n = 500; n <= 4000; n += 64) {
// // std::mt19937_64 mt_rand(time(0));

// // int m = n;
// // const int N = 1e8 / pow(n, 1.57);
// // vector<uint64_t> a(n), b(n), c(n * 2), d(n * 2), e(n * 20);

// // for (auto &i : a) {
// // i = mt_rand();
// // // i = 1ull << 63;
// // }

// // for (auto &i : b) {
// // i = mt_rand();
// // // i = 1ull << 63;
// // }

// // std::cout << "m = " << m << std::endl;

// // std::cout << "toom-cook-44 : ";
// // test([&]() {
// // for (int i = 0; i < N; ++i) {
// // // basecase_mul_s(c.data(), a.data(), n, b.data(), m);
// // toom44_mul_s(c.data(), a.data(), n, b.data(), m, span<uint64_t>(e));
// // // rsblsh_n(c.data(), a.data(), b.data(), n, 2);
// // }
// // });

// // std::cout << "toom-cook-55 : ";
// // test([&]() {
// // for (int i = 0; i < N; ++i) {
// // // __gmpn_toom22_mul(c.data(), a.data(), n, b.data(), m, e.data());
// // toom55_mul_s(d.data(), a.data(), n, b.data(), m, span<uint64_t>(e));
// // // rsblsh_n(c.data(), a.data(), b.data(), n, 2);
// // }
// // });

// // // std::cout << "toom-cook-44 : ";
// // // test([&]() {
// // // for (int i = 0; i < N; ++i) {
// // // toom44_mul_s(d.data(), a.data(), n, b.data(), m,
// span<uint64_t>(e));
// // // // toom63_mul_s(c.data(), a.data(), n, b.data(), m,
// // span<uint64_t>(e));
// // // // rsblsh_n(c.data(), a.data(), b.data(), n, 2);
// // // // submul_1(a.data(), b.data(), n, 2);
// // // }
// // // });

// // // std::cout << "mpn_mul : ";
// // // test([&]() {
// // // for (int i = 0; i < N; ++i) {
// // // mpn_mul(e.data(), a.data(), n, b.data(), m);
// // // // toom44_mul_s(c.data(), a.data(), n, b.data(), m,
// // span<uint64_t>(e));
// // // // toom63_mul_s(c.data(), a.data(), n, b.data(), m,
// // span<uint64_t>(e));
// // // // rsblsh_n(c.data(), a.data(), b.data(), n, 2);
// // // // submul_1(a.data(), b.data(), n, 2);
// // // }
// // // });

// // // test([&]() {
// // // for (int i = 0; i < N; ++i) {
// // // // toom42_mul_s(d.data(), a.data(), n, b.data(), m,
// // span<uint64_t>(e));
// // // // mul_s(d.data(), a.data(), n, b.data(), m);
// // // // mpn_mul(d.data(), a.data(), n, b.data(), m);
// // // __gmpn_toom63_mul(d.data(), a.data(), n, b.data(), m, e.data());
// // // }
// // // });

// // // if (!std::equal(c.data(), c.data() + n + m, d.data())) {
// // // std::cout << "error\n";
// // // for (int i = 0; i < n + m; ++i) {
// // // std::cout << c[i] << ',';
// // // }
// // // std::cout << '\n';
// // // for (int i = 0; i < n + m; ++i) {
// // // std::cout << d[i] << ',';
// // // }
// // // std::cout << '\n';
// // // return 0;
// // // }
// // }

// // return 0;

// // // wjr::node pp;
// // // int xn = 0, xm = 0;
// // // pp.reset();
// // // for (int n = WJR_TOOM22_MUL_THRESHOLD; n < 800; ++n) {
// // // for (int m = WJR_TOOM22_MUL_THRESHOLD; m <= n; m += 2) {
// // // // if (!toom55_ok(n, m)) {
// // // // continue;
// // // // }

// // // std::mt19937_64 mt_rand(time(0));

// // // const int N = 1e4;
// // // vector<uint64_t> a(n), b(n), c(n * 2), d(n * 2), e(n * 20);

// // // for (auto &i : a) {
// // // i = mt_rand();
// // // }

// // // for (auto &i : b) {
// // // i = mt_rand();
// // // }

// // // wjr::it.reset();
// // // mul_s(c.data(), a.data(), n, b.data(), m);
// // // auto x = it.get();
// // // // printf("%d : %zu (%zu, %zu, %d)\n", n, x, x / m, x % m, x - m *
// 2);
// // // const auto xx = x - m * 4 - m / 2;
// // // if (xx > pp.get()) {
// // // xn = n;
// // // xm = m;
// // // }
// // // pp.update(xx);
// // // }
// // // printf("%d %ld", n, pp.get());
// // // std::cout << std::endl;
// // // }
// // // printf("%d\n", pp.get());
// // // printf("%d %d\n", xn, xm);
// // // return 0;

// // {
// // biginteger x;
// // x = 3;
// // pow(x, x, 1000000);
// // vector<char> vec;
// // std::cout << x.size() << '\n';
// // auto s = get();
// // biginteger_to_chars(std::back_inserter(vec), x.data(), x.size());
// // std::cout << get() - s << std::endl;
// // std::cout << vec.size() << '\n';
// // }
// // {
// // mpz_t x;
// // mpz_init_set_ui(x, 3);
// // mpz_pow_ui(x, x, 1000000);
// // vector<char> vec(477122, dctor);
// // std::cout << mpz_size(x) << '\n';
// // auto s = get();
// // mpz_get_str(vec.data(), 10, x);
// // std::cout << get() - s << std::endl;
// // }
// return 0;
// }
1 change: 1 addition & 0 deletions examples/demo/twitter.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
[]
Loading

0 comments on commit 15e4864

Please sign in to comment.