Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/131.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
基于库支持编译代码 我的C++代码的一部分是基于GPU的,所以我在同一个项目上工作的我的同事不可能编译它。_C++_Makefile_Build_Gpu - Fatal编程技术网

基于库支持编译代码 我的C++代码的一部分是基于GPU的,所以我在同一个项目上工作的我的同事不可能编译它。

基于库支持编译代码 我的C++代码的一部分是基于GPU的,所以我在同一个项目上工作的我的同事不可能编译它。,c++,makefile,build,gpu,C++,Makefile,Build,Gpu,例如,在一个文件中有以下行: #include "opencv2/xfeatures2d/cuda.hpp" 或者在另一个文件中有以下代码行: cv::cuda::GpuMat imgGpu, descriptorsGpu, keypoints; imgGpu.upload(img); 只能通过CUDA(和GPU)支持编译 我们如何解决这个问题?我唯一的解决方案是为包含此代码的每个源文件引入一个宏,使用宏包装该节并编辑其值(如果有库支持的话),但这是一种噩梦 有更好的解决办法

例如,在一个文件中有以下行:

#include "opencv2/xfeatures2d/cuda.hpp"
或者在另一个文件中有以下代码行:

    cv::cuda::GpuMat imgGpu, descriptorsGpu, keypoints;
    imgGpu.upload(img);
只能通过CUDA(和GPU)支持编译

我们如何解决这个问题?我唯一的解决方案是为包含此代码的每个源文件引入一个宏,使用宏包装该节并编辑其值(如果有库支持的话),但这是一种噩梦

有更好的解决办法吗


PS:我们的项目是基于makefile的

首选方法是将所有依赖GPU的代码隔离到单独的库中。构建一个公开相同API但不需要CUDA的模拟或虚拟替换库可能是值得的。如果有一天你需要用CUDA代替Vulcan或其他框架,这种责任分离可能会非常宝贵。

@drescherjm谢谢!让50美元的硬件成为团队的障碍和一小时又一小时的额外工作是毫无意义的。跟你的主管谈谈。@HansPassant GPU,尤其是CUDA,在我们的团队中,对于未来的用户来说,并不是每个人都支持。这不是我们项目的一个强制性部分,它是一个附加功能,我们应该为两者提供可能。谢谢你的回答。然而,我不认为你所说的是可能的(或者更可能的是,我不理解你的方法):这个带有CUDA代码的可选部分也包含在系统配置代码中(如果你有CUDA,你可以配置系统来利用它)。你是要我创建整个项目的两个版本,一个包含CUDA代码,另一个不包含CUDA代码?如果我不明白你的答案,我很抱歉,也许举个例子可以帮助我。