gpt4 book ai didi

eigen - 我如何从方法中返回Eigen::Matrix,这样在返回时不会复制数据

转载 作者:行者123 更新时间:2023-12-04 22:14:01 27 4
gpt4 key购买 nike

我有:

Eigen::MatrixXf load_from_gpu()
{
Eigen::MatrixXf mat(m_rows,m_cols);
clEnqueueReadBuffer(m_manager->m_gpu_queue_loader, m_buffer, CL_TRUE, 0, sizeof(float)*numel(), mat.data(), 0, NULL, NULL);
return mat;
}

我相信当我调用此方法时,数据将存储到一个垫子上,然后复制到mat2: Eigen::MatrixXf mat2 = load_from_gpu();
是否有可能将数据写入到 load_from_gpu()函数调用的rhs矩阵中

最佳答案

您的编译器应该可以使用常见的Return Value Optimization方法为您执行此操作。基本上,这是编译器重写load_from_gpu以将指向Eigen::MatrixXf的指针作为参数,然后直接填充该矩阵。

请注意,它之所以只能这样做是因为它可以看到mat始终是返回值,如果方法中有多个矩阵,并且根据某种条件返回了一个矩阵,则编译器不知道用隐藏的替换哪个矩阵指针参数。在这种情况下,您必须求助于手动操作,就像alrikai的回答一样。

要启用优化,您必须使用带有GCC的-O2进行编译。

关于eigen - 我如何从方法中返回Eigen::Matrix,这样在返回时不会复制数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15329933/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com