【发布时间】:2018-02-23 14:11:16
【问题描述】:
目前我正在使用 C++ 11 异步功能来创建额外的线程来运行我的计算内核。计算内核彼此完全独立。我想知道两件事。
- 这种计算模型是否适合使用 GPU 进行优化?
- 如果问题 1 为真,这种优化的基本做法是什么?
伪代码如下:
vector<std::future<ResultType>> futureVector;
for (int i = 0; i < std::thread::hardware_concurrency(); i ++) {
auto future = std::async(
std::launch::async,
&computingKernel,
this,
parameter1,
parameter2);
futureVector.push_back(move(future));
}
for (int i = 0 ; i < futureVector.size(); i++) {
// Get result
futureVector[i].get();
}
加法:
- 有没有办法在不更改整个代码的情况下轻松移动它?就像可以在 GPU 上启动线程的程序标记
【问题讨论】:
-
不,不适用,不,CUDA 编程不像你想象的那样工作
-
@talonmies 所以你的意思是使用 GPU 优化它的唯一方法是在 CUDA 中重写这部分,对吧?
-
@talonmies 我正在通过 openACC。你认为这对我的目的有好处吗?
-
关于你的第一点——不是真的。您显示的代码甚至不会存在于 CUDA 实现中。你会得到一个重写的
computingKernel。不管你想象什么,GPU 不会像伪代码假设的那样运行线程 -
@talonmies 感谢您的评论。实际上,computingKernel 在我的用例中运行了 1 亿次。所以这就是我想使用 GPU 来加速它的原因。但它在典型的多核/SMP 架构中作为生产者和消费者模型运行,并且需要大量时间。我会尝试重新实现计算内核以兼容 GPU 来尝试
标签: c++ parallel-processing cuda gpu