- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我写了一个简单的benchmark 看看使用 pmr::vector 与 std::vector 相比有什么好处。
在 benchmarks 中, pmr::vector 使用 n unsynchronized_pool_resource 。作为上游,也使用单调缓冲区。
看看基准代码
#include <iostream>
#include <memory_resource>
#include <chrono>
#include <functional>
static void pmrVector(benchmark::State& state)
{
constexpr size_t BUF_SIZE = 2048;
std::pmr::pool_options options;
options.max_blocks_per_chunk = 4;
options.largest_required_pool_block = 64;
alignas(8) std::array<char,BUF_SIZE> buffer; // a small buffer on the stack
//std::cout <<options.largest_required_pool_block << std::endl;
std::pmr::monotonic_buffer_resource pool{std::data(buffer), std::size(buffer)};
std::pmr::unsynchronized_pool_resource mem (options,&pool);
for (auto _ : state)
{
std::pmr::vector<char> vec{ &mem };
for(char i = 'a'; i < 'z';++i)
{
vec.emplace_back(i);
benchmark::DoNotOptimize(vec);
}
}
}
static void stdVector(benchmark::State& state)
{
for (auto _ : state)
{
std::vector<char> vec{};
for(char i = 'a'; i < 'z';++i)
{
vec.emplace_back(i);
benchmark::DoNotOptimize(vec);
}
}
}
BENCHMARK(pmrVector);
BENCHMARK(stdVector);
pmr::vector 比 std::vector 慢 3 倍。与单调缓冲区相比, unsynchronized_pool_resource 似乎有巨大的惩罚。
最佳答案
你必须非常小心你真正的时间安排。
我对你的测试做了一些合理的更改,我可以看到改进,可能主要是因为不需要使用系统范围的分配。
(PMR 的优势不止于此。)
static void pmrVector(benchmark::State& state)
{
constexpr size_t BUF_SIZE = 1000000000;
std::pmr::pool_options options;
options.max_blocks_per_chunk = 40;
options.largest_required_pool_block = 640;
char* buffer = new char[BUF_SIZE];
std::pmr::monotonic_buffer_resource pool{buffer, BUF_SIZE};
std::pmr::unsynchronized_pool_resource mem (options,&pool);
for (auto _ : state)
{
{
std::pmr::vector<char> vec{ &mem };
for(int i = 0; i != 100000000; ++i)
{
vec.emplace_back('a');
benchmark::DoNotOptimize(vec);
}
}
mem.release();
pool.release();
}
delete[] buffer;
}
关于c++ - pmr::vector 比 std::vector 慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66306362/
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。 关闭 8 年前。
因此,我终于有了使用多态分配器的理由。 几乎立即,我发现了似乎是致命的设计缺陷:[mem.res.global]/3-7并没有直言不讳,但是该部分的标题和[mem.res.global]/6中有关同步
进程文件: pmr or pmr.exe 进程名称: Powerstrip Spyware 进程类别:存在安全风险的进程 英文描述: pmr.exe is a hijacker which
我想尝试使用 pmr::memory_resource 进行动态内存池。 This页面和this页面旨在列出 C++17 功能并指示编译器对每个功能的支持。但是,我没有在此处找到 pmr、memory
标准草案 N4618 是关于 std::pmr::monotonic_buffer_resource 的: bool do_is_equal(const memory_resource& other)
试用 Section 5.9.2 Class monotonic_buffer_resource 中的示例Pablo Halpern 撰写的以下关于多态内存资源的文章: 文件编号:N3816 日期:2
来自 http://en.cppreference.com/w/cpp/memory/polymorphic_allocator : polymorphic_allocator does not pr
我写了一个简单的benchmark 看看使用 pmr::vector 与 std::vector 相比有什么好处。 在 benchmarks 中, pmr::vector 使用 n unsynchro
我是一名优秀的程序员,十分优秀!