gpt4 book ai didi

cuda - 使用 CUDA Thrust 并行执行多个一维移动平均线

转载 作者:行者123 更新时间:2023-12-02 00:17:34 25 4
gpt4 key购买 nike

我不是一个有任何能力的程序员。只是有人对 CUDA 感到好奇,所以我正在做一些阅读。我遇到了一个使用 Thrust 做移动平均线的例子:

Simple Moving Average Thrust Example

该示例实际上可以运行并且大部分工作正常。然而,从它只执行一次移动平均操作的意义上来说,这是微不足道的。

我怎么说352这些并行的移动平均操作,所有操作都在同一个数据流上?在我看来,程序流程可能是:

  1. 生成数据并将其发送到一个 CUDA 核心。 (与现有代码相同但考虑长度 100010000 而不是 30)
  2. 将它从它所在的 CUDA 核心复制到所有其他 351 CUDA我的 GTX 465 中的内核
  3. 告诉每个 CUDA 核心要对多少数据项进行平均。(4, 5, 6,..., 352, 353, 354)
  4. 告诉设备并行计算每个内核的平均值
  5. 读回每个核心的结果

我明白了这段代码

// compute SMA using standard summation
simple_moving_average(data, w, averages);

让这一切发生,但我如何让 Thrust 并行地做很多事情?

我在这里感兴趣的是股票数据之类的东西。如果我正在查看 GOOG 价格,我会将其放入使用所有内核的 GPU 中并将其留在那里。然后我就可以自由地进行大量处理,而无需再加载数据,只需从每个核心读取结果即可。注意:我可能不想在所有内核中都使用 GOOG。有些核心可能是 GOOG,有些则带有其他符号,但我稍后会讲到。我只是在想,如果每个内核都有足够的空间,我不希望全局内存中的股票数据。

我认为这对于 CUDA 和 Thrust 来说非常简单?

最佳答案

以下是使用 arrayfire 执行此操作的可能方法:请注意,我不隶属于这个图书馆。
我很确定这也可以用推力来完成但我发现使用 arrayfire 这一个要简单得多。如果图书馆是免费的,为什么我不能用它来代替 thrust?

在 arrayfire 中,您可以使用矩阵并行运行多个 SMA 操作:

unsigned n_SMAs = 1000;   // # of SMA indicators to evaluate 
unsigned len = 2000; // # of stock prices per indicator
unsigned w = 6; // window size

// generate stock prices: [0..10]
af::array data = af::randu(n_SMAs, len) * 10;

// compute inclusive prefix sums along colums of the matrix
af::array s = af::accum(data, 1);

// compute the average
af::array avg = (s.cols(w, af::end) - s.cols(0, af::end - w)) / w;
af::eval(avg);

std::cout << avg.dims() << "\n" << avg << "\n";

如果这就是您要找的,请告诉我。这就是我对你的问题的理解:并行计算多个 SMA 指标

关于cuda - 使用 CUDA Thrust 并行执行多个一维移动平均线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12395122/

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