异步调用std::async实现并行计算

C++11中std::async的并行计算实践与性能测试
本文详细介绍了C++11中的std::async函数,展示了如何通过它实现异步计算,并给出了一个并行计算内积的示例。在主程序中,通过std::async将大任务拆分为四个子任务并行计算,然后将结果合并。同时,文章还提供了性能测试结果,比较了并行计算与串行计算的时间消耗。测试表明,std::async可以有效优化计算速度,但在国产和Intel环境下,性能提升并不显著,且国产环境可能由于库调用问题运行稍慢。

一 std::async

template< class Function, class... Args>
std::future<std::result_of_t<std::decay_t<Function>(std::decay_t<Args>...)>>
    async( Function&& f, Args&&... args );

std::async返回一个future对象,可通过get方法异步获取执行结果,如下所示:

#include <iostream>
#include <string>
#include <future>
 
std::string helloFunction(const std::string& s) {
    return "Hello C++11 from " + s + ".";
}
 
class HelloFunctionObject {
public:
    std::string operator()(const std::string& s) const {
        return "Hello C++11 from " + s + ".";
    }
};
 
int main() {
    // 带函数的future
    auto futureFunction = std::async(helloFunction, "function");
    // 带函数对象的future
    HelloFunctionObject helloFunctionObject;
    auto futureFunctionObject = std::async(helloFunctionObject, "function obj
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值