欢迎光临散文网 会员登陆 & 注册

股票量化:赫兹量化系统OpenCL 中的多线程计算

2023-10-20 15:52 作者:大牛啊呢  | 我要投稿

利用 OpenCL 实现多线程计算

选择了基本方法后,我们就能够继续实现了。 我们从创建内核(可执行的OpenCL函数)开始。 根据以上逻辑,我们将创建 4 个内核。

3.1. 前馈内核。

与之前文章中讨论的方法类似,我们创建一个前馈推算内核 FeedForward 

不要忘记内核是在每个线程中运行的函数。 调用内核时需设置此类线程的数量。 在内核内部的操作是特定循环内的嵌套操作;循环的迭代次数等于被调用线程的次数。如此,在前馈内核中,我们可以指定计算独立神经元状态的操作,并可从主程序调用内核时以指定神经元数量。

内核从参数中接收权重矩阵,输入数据数组和输出数据数组的引用,以及输入数组的元素数量,和激活函数类型。 请注意,OpenCL 中的所有数组都是一维的。 因此,如果在 MQL5 中将二维数组用做权重系数,则此处我们需要计算初始位置的位移,以便读取第二个、及后续神经元的数据。

__kernel void FeedForward(__global double *matrix_w,                               __global double *matrix_i,                               __global double *matrix_o,                               int inputs, int activation)

在内核的开头,我们获得线程的序列号,其可判定所计算神经元的序列号。 声明私密(内部)变量,包括向量变量 inp 和 weight。 还要定义我们的神经元权重的位移。

  {    int i=get_global_id(0);    double sum=0.0;    double4 inp, weight;    int shift=(inputs+1)*i;

接下来,组织一个循环来获取输入值与其权重的乘积的合计。 如上所述,我们用到 4 个元素 inp 和 weight 的向量来计算乘积合计。 然而,内核接收的所有数组并非都是 4 的倍数,因此缺少的元素应替换为零值。 注意输入数据向量中的一个 “1” - 它对应于贝叶斯偏差的权重。

   for(int k=0; k<=inputs; k=k+4)      {       switch(inputs-k)         {          case 0:            inp=(double4)(1,0,0,0);            weight=(double4)(matrix_w[shift+k],0,0,0);            break;          case 1:            inp=(double4)(matrix_i[k],1,0,0);            weight=(double4)(matrix_w[shift+k],matrix_w[shift+k+1],0,0);            break;          case 2:            inp=(double4)(matrix_i[k],matrix_i[k+1],1,0);            weight=(double4)(matrix_w[shift+k],matrix_w[shift+k+1],matrix_w[shift+k+2],0);            break;          case 3:            inp=(double4)(matrix_i[k],matrix_i[k+1],matrix_i[k+2],1);            weight=(double4)(matrix_w[shift+k],matrix_w[shift+k+1],matrix_w[shift+k+2],matrix_w[shift+k+3]);            break;          default:            inp=(double4)(matrix_i[k],matrix_i[k+1],matrix_i[k+2],matrix_i[k+3]);            weight=(double4)(matrix_w[shift+k],matrix_w[shift+k+1],matrix_w[shift+k+2],matrix_w[shift+k+3]);            break;         }       sum+=dot(inp,weight);      }


股票量化:赫兹量化系统OpenCL 中的多线程计算的评论 (共 条)

分享到微博请遵守国家法律