sách gpt4 ai đã đi

c++ - 使用 task_group(新用户)的 Intel Threading Building Blocks 性能不佳

In lại 作者:行者123 更新时间:2023-11-30 01:36:27 25 4
mua khóa gpt4 Nike

我最近对英特尔线程构建模块产生了兴趣。我想利用 tbb::task_group 类来管理线程池。

我的第一次尝试是构建一个测试,其中一个 vector 复制到另一个 vector 中:我创建了第 n 个任务,每个任务负责复制 vector 的连续切片。

但是,性能会随着线程数的增加而降低。我对另一个线程池实现有相同的结果。使用 TBB 2018 Update 5,gcc 6.3 on debian strecth on 8 i7 core box,我得到以下数字来复制 1'000'000 个元素的 vector :

第n个真实用户

1 0.808s 0.807s

2 1.068s 2.105s

4 1.109s 4.282s

也许你们中的一些人会帮助理解这个问题。这是代码:

#include
#include
#include
#include
#include "tbb/task_group.h"
#include "tbb/task_scheduler_init.h"

namespace mgis{
using real = double;
using size_type = size_t;
}

void my_copy(std::vector& d,
const std::vector& s,
const mgis::size_type b,
const mgis::size_type e){
const auto pb = s.begin()+b;
const auto pe = s.begin()+e;
const auto po = d.begin()+b;
std::copy(pb,pe,po);
}

int main(const int argc, const char* const* argv) {
using namespace mgis;
if (argc != 3) {
std::cerr << "invalid number of arguments\n";
std::exit(-1);
}
const auto ng = std::stoi(argv[1]);
const auto nth = std::stoi(argv[2]);
tbb::task_scheduler_init init(nth);
tbb::task_group g;
std::vector v(ng,0);
std::vector v2(ng);
for(auto i =0; i!=2000;++i){
const auto d = ng / nth;
const auto r = ng % nth;
size_type b = 0;
for (size_type i = 0; i != r; ++i) {
g.run([&v2, &v, b, d] { my_copy(v2, v, b, b + d + 1); });
b += d+1;
}
for (size_type i = r; i != nth; ++i) {
g.run([&v2, &v, b, d] { my_copy(v2, v, b, b + d); });
b += d ;
}
g.wait();
}
return EXIT_SUCCESS;
}

1 Câu trả lời

  1. 这么短的基准测试没有意义,因为 TBB 需要创建线程并启动它们,它不会在第一次调用 TBB 时立即发生,因为它是惰性异步过程。但是,您的用户时间表明线程已启动并正在运行,但可能没有工作要做。
  2. memcopy 不利于可扩展性研究,因为它不会超出内存 Controller / channel 的数量。因此,无论您有 4 个 CPU 还是 24 个都没有关系,即使是好的硬件,您也不太可能获得超过 x4 的加速。您的 channel 可能较少。
  3. 不要手动分割范围,而是使用tbb::parallel_for,那里不需要task_group。而且,一个一个调用任务是线性复杂度,parallel_for是对数复杂度。

关于c++ - 使用 task_group(新用户)的 Intel Threading Building Blocks 性能不佳,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52076777/

25 4 0
行者123
Hồ sơ cá nhân

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá Didi Taxi miễn phí
Mã giảm giá Didi Taxi
Giấy chứng nhận ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com