我正在使用 C++ 来求解 k 耦合迭代方程。例如,对于 3 联轴器的情况,
f(n+1) = g(n) + 2*h(n) + c;
g(n+1) = 0.5*f(n+1) - h(n);
h(n+1) = ( f(n+1)+g(n+1) )/2;
其中 C 是常数。在 C/C++ 中,实现非常简单
#include <vector>
#include <iostream>
using namespace std;
void main(void)
{
double c= 0.24;
long k=0;
vector<double> f(900000000), g(900000000), h(900000000);
while (k<10000000)
{
f[0] = g[0] = h[0] = rand(); // the initial values of f, g, h are randomly picked
for (long n=1; n<900000000; n++)
{
f[n+1] = g[n] + 2*h[n] + c;
g[n+1] = 0.5*f[n+1] - h[n];
h[n+1] = ( f[n+1]+g[n+1] )/2;
}
//if the final value of f, g, h satisfying some condition then record it and go for next iteration
if (is_good(f[899999999], g[899999999], h[899999999]))
{
// record f[899999999], g[899999999], h[899999999]
k++;
}
}
}
这段代码非常慢,因为它进展缓慢并且取决于随机初始值。我之前没有对 GPU 进行编程,但我读了一些介绍,它说 GPU 在某些情况下非常快。我读了几个例子,我觉得 GPU 只能用于“可分割”的情况(我的意思是任务可以分为子任务,因此可以并行实现)。我想知道这对我的案子有多大帮助。任何想法或建议都将受到高度欢迎。