gpt4 book ai didi

c++ - 将 C++ 异步函数转换为 GPU 计算

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:06:41 24 4
gpt4 key购买 nike

目前我正在使用 C++ 11 异步功能来创建额外的线程来运行我的计算内核。计算内核彼此完全独立。我想知道两件事。

  1. 这个计算模型适合用GPU优化吗?
  2. 如果问题 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();
}

添加:

  1. 有没有办法在不更改整个代码的情况下轻松移动它?就像一个可以在 GPU 上启动线程的程序标记

最佳答案

Is this computing model suitable for using GPU to optimise?

没有。好吧,大多数情况下没有。

使用 GPU,您无需独立安排单线程任务或内核并显式等待每个任务结束。你告诉 GPU 用 N 个线程运行你的内核(N 可以非常大);内核当然是同一段代码,但行为因线程索引而异;然后等待所有线程的执行结束。

实际上它有点复杂(例如,线程索引是 3 维的,并且线程分组具有特殊含义)但基本上就是这样。

因此,GPU 的计算模型与此模型有相似之处,也有不同之处。

If question 1 is true, what is the basic practice for this kind of optimisation?

您可以找到启动 CUDA 内核的基本示例 here (或相同的程序,但具有官方的、底层的、C 风格的 API here)。

请注意,可以异步启动 CUDA 内核。无论如何,单线程的执行大多是异步的,但 CPU 线程可以选择不等待 GPU 上的执行结束。

Is there a way to move this easily without changing the whole code? Like a program mark that could start threads on GPU

没有。但是有并行 STL 的倡议,目的是让它也能够利用 GPU。参见 this talk at CppCon 2017 .

关于c++ - 将 C++ 异步函数转换为 GPU 计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48949746/

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