当前位置: 首页>>代码示例>>C++>>正文


C++ buffer::enqueue_read方法代码示例

本文整理汇总了C++中buffer::enqueue_read方法的典型用法代码示例。如果您正苦于以下问题:C++ buffer::enqueue_read方法的具体用法?C++ buffer::enqueue_read怎么用?C++ buffer::enqueue_read使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在buffer的用法示例。


在下文中一共展示了buffer::enqueue_read方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。

示例1:

static boost::shared_ptr<std::vector<char>>
        hpxcl_single_calculate(std::vector<float> &a,
                               std::vector<float> &b,
                               std::vector<float> &c,
                               double* t_nonblock,
                               double* t_sync,
                               double* t_finish)
{
    // do nothing if matrices are wrong
    if(a.size() != b.size() || b.size() != c.size())
    {
        return boost::shared_ptr<std::vector<char>>();
    }

    size_t size = a.size();

    // copy data to gpu
    shared_future<event> write_a_event =
        hpxcl_single_buffer_a.enqueue_write(0, size*sizeof(float), a.data());
    shared_future<event> write_b_event =
        hpxcl_single_buffer_b.enqueue_write(0, size*sizeof(float), b.data());
    shared_future<event> write_c_event =
        hpxcl_single_buffer_c.enqueue_write(0, size*sizeof(float), c.data());

    // wait for write to finish
    write_a_event.get().await();
    write_b_event.get().await();
    write_c_event.get().await();

    // start time measurement
    timer_start();

    // set work dimensions
    work_size<1> dim;
    dim[0].offset = 0;
    dim[0].size = size;

    // run exp kernel
    shared_future<event> kernel_exp_event =
        hpxcl_single_exp_kernel.enqueue(dim, write_b_event);

    // run add kernel
    std::vector<shared_future<event>> add_dependencies;
    add_dependencies.push_back(kernel_exp_event);
    add_dependencies.push_back(write_a_event);
    shared_future<event> kernel_add_event =
        hpxcl_single_add_kernel.enqueue(dim, add_dependencies);

    // run dbl kernel
    shared_future<event> kernel_dbl_event =
        hpxcl_single_dbl_kernel.enqueue(dim, write_c_event);

    // run mul kernel
    std::vector<shared_future<event>> mul_dependencies;
    mul_dependencies.push_back(kernel_add_event);
    mul_dependencies.push_back(kernel_dbl_event);
    shared_future<event> kernel_mul_event =
        hpxcl_single_mul_kernel.enqueue(dim, mul_dependencies);

    // run log kernel
    shared_future<event> kernel_log_event_future =
        hpxcl_single_log_kernel.enqueue(dim, kernel_mul_event);

    ////////// UNTIL HERE ALL CALLS WERE NON-BLOCKING /////////////////////////

    // get time of non-blocking calls
    *t_nonblock = timer_stop();

    // wait for all nonblocking calls to finish
    event kernel_log_event = kernel_log_event_future.get();

    // get time of synchronization
    *t_sync = timer_stop();

    // wait for the end of the execution
    kernel_log_event.await();

    // get total time of execution
    *t_finish = timer_stop();

    // enqueue result read
    shared_future<event> read_event_future =
        hpxcl_single_buffer_z.enqueue_read(0, size*sizeof(float),
                                           kernel_log_event);

    // wait for enqueue_read to return the event
    event read_event = read_event_future.get();

    // wait for calculation to complete and return data
    boost::shared_ptr<std::vector<char>> data_ptr = read_event.get_data().get();

    // return the computed data
    return data_ptr;


}
开发者ID:hapoo,项目名称:hpxcl,代码行数:96,代码来源:hpxcl_single.hpp


注:本文中的buffer::enqueue_read方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。