C++ std::future在单独的内核上运行每个函数
c++ std::future running each function on a separate core
这是一个在四核Cortex A9 ARMv7(Linux和gcc 4.8.2)上运行的实时音频应用程序,这是处理实际音频(通过调用其他函数)并发送到音频驱动程序的部分:
struct STEREOOUT
{
std::vector<float> L;
std::vector<float> R;
};
STEREOOUT ProcessEngine(int e, unsigned int sf)
{
STEREOOUT out;
for (unsigned int s=0; s<sf; ++s)
{
float l, r;
engine[e]->Process(l, r);
out.L.push_back(l);
out.R.push_back(r);
}
return out;
}
// This is the main audio loop callback!
int AudioProcess(void *outputBuffer, unsigned int sampleFrames)
{
float *buffer = (float*)outputBuffer;
unsigned int s(0);
STEREOOUT e0 = async(launch::async, &ProcessEngine, 0, sampleFrames).get();
STEREOOUT e1 = async(launch::async, &ProcessEngine, 1, sampleFrames).get();
for (; s<sampleFrames; ++s)
{
*buffer++ = e0.L[s] + e1.L[s];
*buffer++ = e0.R[s] + e1.R[s];
}
return 0;
}
如何确保e1
和e2
以与main()
程序不同的相关性运行,但彼此之间又不同?例如:
main() -> CPU0
e1 -> CPU1
e2 -> CPU2
我的代码,当你在这里看到的编译时,似乎仍然在单个内核上运行。我需要两个音频处理占用两个不同的内核,以便充分利用四核处理器的全部功能。我只是在做梦吗?
PS:我知道,我过去已经发布了类似的问题,但这次我可以更精确,因为我现在有一个完成的工作程序,我可以用作实际示例。
您在调用 std::async
后立即调用get
,这将导致程序等待结果可用。在等待之前,您需要启动两个异步任务:
auto future1 = async(launch::async, &ProcessEngine, 0, sampleFrames);
auto future2 = async(launch::async, &ProcessEngine, 1, sampleFrames);
STEREOOUT e0 = future1.get();
STEREOOUT e1 = future2.get();
相关文章:
- 无法获取菜单选择以运行函数.C++
- 为什么std::async使用同一个线程运行函数
- MINGW - 正确运行函数所需的 cdecl
- 如何在 C 中使用空的 main() 方法运行函数?
- 运行函数作为 constexpr 和不作为 constexpr
- 如何在全局变量的构造函数之前运行函数
- 在 Cap'n Proto RPC 服务器中定期运行函数
- 为什么当我在 c++ 中运行函数时,我的代码显示数字 53
- CLang:在 std::thread 中运行函数会导致结构创建BAD_ACCESS
- 如何使用 TBB 在单个线程中运行函数
- 我在运行函数 GetVolumeInformation() 时得到非常随机的结果
- 如何使用 boost::asio io_service 运行函数异步
- Qt - 在其他线程上运行函数
- 在一组模板化对象上运行函数
- pybind11:属性错误:尝试从 py 文件运行函数时,模块'XXX'没有属性'YYY'
- 添加按钮以通知运行函数的通知
- 如何在程序后台运行函数(特别是自动保存函数)?QT / C++
- Qt - 在单独的线程中运行函数
- 如何在单独的线程上运行函数(如果线程可用)
- 如何发出编译和运行C++函数的 LLVM IR