矩阵乘法序列码c ++

时间:2018-04-27 01:28:56

标签: c++ matrix-multiplication

我一直在使用C ++和opencl进行矩阵乘法。我得到了设备代码,但c ++部分一直给我“分段故障”。

我使用缓冲区SrcA,SrcB来存储输入矩阵和缓冲区Golden来存储结果。但是,当我尝试打印结果时,我不断遇到分段错误。

我是C ++编码的新手,这可能是一个新手的错误。任何帮助将不胜感激。

#include <stdio.h>
#include <iostream>

#include <string.h>
#include <string>
#include <fstream>
#include <stdlib.h>
#include <CL/opencl.h>
#include<time.h>

#include<sys/time.h>
void randomMemInit(float* data, int size)
{
   int i;

   for (i = 0; i < size; ++i)
    data[i] = rand() / (float)RAND_MAX;
}
float *srcA, *srcB, *srcC, *dst;        // Host buffers for OpenCL test
float *Golden;                   
void MatrixMultiply(const float* A, const float* B, float* C,int wA,int wB,int wC);

int main(){
     int WA=1024;
    int HA=1024 ; 
    unsigned int size_A=WA*HA;
    srcA = (float *)malloc(sizeof(cl_float) * size_A);
    int WB=1024;
    int HB=1024;
    unsigned int size_B=WB*HB;
    srcB = (float *)malloc(sizeof(cl_float) * size_B);
    int WC=1024;
    int HC=1024;
    unsigned int size_C=WC*HC;
    srcC = (float *)malloc(sizeof(cl_float) * size_C);
    randomMemInit(srcA, size_A);
    randomMemInit(srcB, size_B);


    Golden = (float *)malloc(sizeof(cl_float) * size_C);
    MatrixMultiply(srcA,srcB,Golden,WA,WB,WC);
    for (int i=0;i<10;i++){
      printf("%f",Golden[i]);
    }

}
void MatrixMultiply(const float* A, const float* B, float* C,int wA,int wB,int wC)
{
  for(int i=0;i<wA;i++){
    for(int j = 0; i<wB; j++){
      C[i*wC + j] = 0.0f;
      for(int k = 0; k<wC; k++){
    C[i*wC+j] = C[i*wC+j] + A[i*wA+k] * B[k*wB+j];
      }
    }
  }
}

0 个答案:

没有答案