我一直在使用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];
}
}
}
}