You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
51 lines
1.6 KiB
51 lines
1.6 KiB
#include "LinearTests.h"
|
|
#include <Common.h>
|
|
|
|
Simple::Simple(cl::Context* _context, cl::CommandQueue* _queue, cl::Program* _program)
|
|
{
|
|
context = _context;
|
|
queue = _queue;
|
|
program = _program;
|
|
}
|
|
|
|
void Simple::dewIt(int n, int m, float* y, const float* A, const float* x, const float* b)
|
|
{
|
|
cl_int err = CL_SUCCESS;
|
|
cl::Event _event;
|
|
|
|
cl::Kernel kernel = cl::Kernel(*program, "simpleMV", &err);
|
|
CheckCLError(err);
|
|
|
|
cl::Buffer ABuffer(*context, CL_MEM_READ_ONLY, sizeof(float) * n *m, NULL, &err);
|
|
CheckCLError(err);
|
|
queue->enqueueWriteBuffer(ABuffer, true, 0, sizeof(float) * n *m, A);
|
|
|
|
cl::Buffer XBuffer(*context, CL_MEM_READ_ONLY, sizeof(float) * m, NULL, &err); // Ot kell kiirogatni
|
|
CheckCLError(err);
|
|
queue->enqueueWriteBuffer(XBuffer, true, 0, sizeof(float) * m, x);
|
|
|
|
cl::Buffer YBuffer(*context, CL_MEM_WRITE_ONLY, sizeof(float) * n, NULL, &err);
|
|
CheckCLError(err);
|
|
queue->enqueueWriteBuffer(YBuffer, true, 0, sizeof(float) * n, y);
|
|
|
|
cl::Buffer BBuffer(*context, CL_MEM_READ_ONLY, sizeof(float) * n, NULL, &err);
|
|
CheckCLError(err);
|
|
queue->enqueueWriteBuffer(BBuffer, true, 0, sizeof(float) * n, b);
|
|
|
|
kernel.setArg(0, n);
|
|
kernel.setArg(1, m);
|
|
kernel.setArg(2, YBuffer);
|
|
kernel.setArg(3, ABuffer);
|
|
kernel.setArg(4, XBuffer);
|
|
kernel.setArg(5, BBuffer);
|
|
|
|
queue->enqueueNDRangeKernel(kernel,
|
|
cl::NullRange, // Indexek nem eloffszetelve
|
|
cl::NDRange(n, 1), // Minden elemet egy szál
|
|
cl::NullRange, // Workgroup méret? - ez az auto, ha nem indul, 1024-re, onnan csökkent, amig elindul
|
|
NULL, //
|
|
&_event);
|
|
_event.wait();
|
|
|
|
queue->enqueueReadBuffer(YBuffer, true, 0, sizeof(int) * n, y);
|
|
}
|
|
|