【发布时间】:2013-01-28 19:29:55
【问题描述】:
我的 C++ 代码在时间序列数据 (t2 >> t1) 上计算非常大的积分。积分是固定长度的,当前存储在双精度的 [m x 2] 列数组中。第 1 列是时间。第 2 列是被整合的信号。代码在四核或八核机器上运行。
对于具有 k 个内核的机器,我想:
- 分离出 k-1 个工作进程(每个剩余核心一个)以评估积分的部分(梯形积分)并将其结果返回到等待的主线程。
- 无需深度复制原始数组部分即可实现上述目标。
- 实现 C++11 异步模板以实现可移植性
如何在不硬编码可用内核数量的情况下实现上述目标?
我目前正在使用 VS 2012。
清晰度更新:
例如,这是粗略的伪代码
data is [100000,2] double
result = MyIntegrator(data[1:50000,1:2]) + MyIntegrator(data[50001:100000, 1:2]);
我需要在单独的线程中评估 MyIntegrator() 函数。主线程等待这两个结果。
【问题讨论】:
-
单独的计算是否相互依赖?
-
我认为
std::async对于这个问题来说是一个过于抽象的层次。如果您想控制工作线程的数量,最好使用std::thread手动生成它们。 -
@juanchopanza 我认为情况正好相反,他可能需要更多抽象,比如
parallel_for。然而,这个问题目前的形式过于模糊,无法回答任何问题。另外,我认为std::async总是比std::thread更好,因为它提供了额外的异常安全性。 -
积分是单被积函数,可以分段计算。
标签: c++ multithreading asynchronous c++11