cpp文件代码
#include "stdafx.h"
#include <CL/cl.h>
#include <iostream>
#include <fstream>
using namespace std;
#define MATRIX_A_ROW 8 // 矩阵A行数
#define MATRIX_A_COL 6 // 矩阵A列数
#define MATRIX_B_ROW 6 // 矩阵B行数
#define MATRIX_B_COL 8 // 矩阵B列数
// 将cl代码转为字符串
cl_int ConvertToString(const char *pFileName, std::string &str);
int _tmain(int argc, _TCHAR* argv[])
{
cl_int iStatus = 0; // 函数返回状态
cl_uint uiNumPlatforms = 0; // 平台个数
cl_platform_id Platform = NULL; // 选择的平台
size_t uiSize = 0; // 平台版本名字字节数
cl_int iErr = 0; // 返回参数
char *pName = NULL; // 平台版本名
cl_uint uiNumDevices = 0; // 设备数量
cl_device_id *pDevices = NULL; // 设备
cl_context Context = NULL; // 设备环境
cl_command_queue CommandQueue = NULL; // 命令队列
const char *pFileName = "MatrixMul.cl"; // cl文件名
string strSource = ""; // 用于存储cl文件中的代码
const char *pSource = NULL; // 代码字符串指针
size_t uiArrSourceSize[]= {0}; // 代码字符串长度
cl_program Program = NULL; // 程序对象
float arrInMatA[MATRIX_A_ROW][MATRIX_A_COL]; // 输入矩阵A
float arrInMatB[MATRIX_B_ROW][MATRIX_B_COL]; // 输入矩阵B
float arrOut[MATRIX_A_ROW][MATRIX_B_COL]; // 输出矩阵
int iMatARow = MATRIX_A_ROW; // 矩阵A行数
int iMatACol = MATRIX_A_COL; // 矩阵A列数
int iMatBRow = MATRIX_B_ROW; // 矩阵B行数
int iMatBCol = MATRIX_B_COL; // 矩阵B列数
cl_mem memInutBufferA = NULL; // 输入内存对象A
cl_mem memInutBufferB = NULL; // 输入内存对象B
cl_mem memOutputBuffer = NULL; // 输出内存对象
cl_kernel Kernel = NULL; // 内核对象
// 用于设定内核分布,即输出据真的行数,列数
size_t uiGlobal_Work_Size[2]= {MATRIX_A_ROW, MATRIX_B_COL};
//-------------------1. 获得并选择可用平台-----------------------------
// 获得平台数量
iStatus = clGetPlatformIDs(0, NULL, &uiNumPlatforms); // 查询可用的平台个数,并返回状态
if (CL_SUCCESS != iStatus)
{
cout << "Error: Getting platforms error" << endl;
return 0;
}
// 获得平台地址
if (uiNumPlatforms > 0) // 如果有可用平台
{
// 根据平台数为平台分配内存空间
cl_platform_id *pPlatforms = (cl_platform_id *)malloc(uiNumPlatforms * sizeof(cl_platform_id));
iStatus = clGetPlatformIDs(uiNumPlatforms, pPlatforms, NULL); // 获得可用的平台
Platform =