gpt4 book ai didi

c++ - 使用 boost::pool 时 CPU 使用率高

转载 作者:行者123 更新时间:2023-11-28 01:23:32 25 4
gpt4 key购买 nike

我尝试使用 boost::pool 来减少内存分配的 CPU 消耗,但是分析测试代码的结果并不像预期的那样。这是测试代码。

ma​​in1.cpp

#include "pool_singleton.h"

int main()
{
const int size = 400000;
for (int i = 0; i < 100000; ++i)
{
auto obj = pNew uint8_t[size]; // use singleton_pool

pDelete(obj, size);
}
return 0;
}

ma​​in2.cpp

#include "pool_singleton.h"

int main()
{
const int size = 400000;
for (int i = 0; i < 100000; ++i)
{
auto obj = new uint8_t[size];

delete[] obj;
}

return 0;
}

pool_singleton.h

#pragma once

#include <iostream>
#include <memory>

// boost
#include <boost/pool/singleton_pool.hpp>

struct pNewTag{};
typedef boost::singleton_pool<pNewTag, 1> pool;

inline void* operator new (size_t size, int num)
{
auto ptr = pool::ordered_malloc(size);
return ptr;
}

template<int N>
struct memMan
{
static memMan<N> x;
inline static void delete_ptr(void *p, size_t size)
{
pool::free(p, size);
}

static inline void pool_destroy()
{
pool::purge_memory();
}

};

template<int N>
memMan<N> memMan<N>::x;

#define pNew new(1)
#define pDelete(p, size) memMan<0>::delete_ptr(p, size)
#define purge memMan<0>::pool_destroy()

ma​​in1.cpp 的 CPU 使用率是 ma​​in2.cpp 的两倍。
我预计 ma​​in1.cpp 的 CPU 使用率会随着时间的推移而下降,但直到最后它仍然很高。问题是

  1. 我的 singleton_pool 用法有误吗?
  2. 有什么办法可以减少 singleton_pool 的 cpu 消耗吗?
  3. 是否有其他想法来减少内存分配的 CPU 消耗?

最佳答案

您对 CPU 使用率的考虑是错误的。如果 CPU 使用率低于 100%,则意味着 CPU 上的资源被浪费了。如果 CPU 使用率为 100%,则表示 CPU 正在尽可能快地向前推进。

在所有其他条件相同的情况下,对于基本上只是要求 CPU 工作的任务,CPU 使用率越高越好,因为这意味着工作会尽快完成。只要有工作要做,CPU 就会全速运行,除非它由于某些原因不能运行,例如必须等待 I/O 或过热 - 都是坏事。

相反,测量工作的总 CPU 消耗。更高效的代码将需要更少的 CPU 来完成同等的工作。

I expected that the CPU usage of main1.cpp will drop as time passes, but it remained high until the end.

太棒了。这意味着 CPU 会尽可能快地完成工作,直到完成所有工作。在 CPU 仍有工作要做的情况下,任何低于 100% 的情况都表明效率低下,导致 CPU 无法尽快完成工作。

关于c++ - 使用 boost::pool 时 CPU 使用率高,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55017603/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com