Последовательный код умножения матриц с ++ - PullRequest
0 голосов
/ 27 апреля 2018

Я работал над умножением матриц, используя 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];
      }
    }
  }
}
...