OClEngn: Split isSetup/Running into collate+compact
This commit is contained in:
@@ -22,10 +22,10 @@ context(nullptr),
|
|||||||
commandQueue(nullptr),
|
commandQueue(nullptr),
|
||||||
slotCompactorProgram(nullptr), collateProgram(nullptr),
|
slotCompactorProgram(nullptr), collateProgram(nullptr),
|
||||||
slotCompactorKernel(nullptr), collateKernel(nullptr),
|
slotCompactorKernel(nullptr), collateKernel(nullptr),
|
||||||
isSetup(false),
|
|
||||||
clAssemblyBuffer(nullptr),
|
clAssemblyBuffer(nullptr),
|
||||||
clCollationBuffer(nullptr),
|
clCollationBuffer(nullptr),
|
||||||
isRunning(false),
|
compactIsSetup(false), compactIsRunning(false),
|
||||||
|
collateIsSetup(false), collateIsRunning(false),
|
||||||
currentCompactKernelEvent(nullptr), currentCollateKernelEvent(nullptr),
|
currentCompactKernelEvent(nullptr), currentCollateKernelEvent(nullptr),
|
||||||
assemblyBufferPtr(nullptr),
|
assemblyBufferPtr(nullptr),
|
||||||
assemblyBufferSize(0),
|
assemblyBufferSize(0),
|
||||||
@@ -42,7 +42,7 @@ OpenClCollatingAndMeshingEngine::~OpenClCollatingAndMeshingEngine()
|
|||||||
|
|
||||||
bool OpenClCollatingAndMeshingEngine::setup()
|
bool OpenClCollatingAndMeshingEngine::setup()
|
||||||
{
|
{
|
||||||
if (isSetup) {
|
if (compactIsSetup && collateIsSetup) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -143,7 +143,8 @@ bool OpenClCollatingAndMeshingEngine::setup()
|
|||||||
goto cleanup;
|
goto cleanup;
|
||||||
}
|
}
|
||||||
|
|
||||||
isSetup = true;
|
compactIsSetup = true;
|
||||||
|
collateIsSetup = true;
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
cleanup:
|
cleanup:
|
||||||
@@ -209,8 +210,10 @@ void OpenClCollatingAndMeshingEngine::finalize()
|
|||||||
// Reset state variables
|
// Reset state variables
|
||||||
device = nullptr;
|
device = nullptr;
|
||||||
platform = nullptr;
|
platform = nullptr;
|
||||||
isSetup = false;
|
compactIsSetup = false;
|
||||||
isRunning = false;
|
compactIsRunning = false;
|
||||||
|
collateIsSetup = false;
|
||||||
|
collateIsRunning = false;
|
||||||
currentCompactKernelEvent = nullptr;
|
currentCompactKernelEvent = nullptr;
|
||||||
currentCollateKernelEvent = nullptr;
|
currentCollateKernelEvent = nullptr;
|
||||||
assemblyBufferPtr = nullptr;
|
assemblyBufferPtr = nullptr;
|
||||||
@@ -227,7 +230,7 @@ void CL_CALLBACK OpenClCollatingAndMeshingEngine::compactKernelEventCallback(
|
|||||||
OpenClCollatingAndMeshingEngine* engine =
|
OpenClCollatingAndMeshingEngine* engine =
|
||||||
static_cast<OpenClCollatingAndMeshingEngine*>(user_data);
|
static_cast<OpenClCollatingAndMeshingEngine*>(user_data);
|
||||||
|
|
||||||
if (!engine || !engine->isRunning || !engine->compactKernelCb)
|
if (!engine || !engine->compactIsRunning || !engine->compactKernelCb)
|
||||||
{ return; }
|
{ return; }
|
||||||
|
|
||||||
// Post to io_service to call callback on the correct thread
|
// Post to io_service to call callback on the correct thread
|
||||||
@@ -245,7 +248,7 @@ void CL_CALLBACK OpenClCollatingAndMeshingEngine::collateKernelEventCallback(
|
|||||||
OpenClCollatingAndMeshingEngine* engine =
|
OpenClCollatingAndMeshingEngine* engine =
|
||||||
static_cast<OpenClCollatingAndMeshingEngine*>(user_data);
|
static_cast<OpenClCollatingAndMeshingEngine*>(user_data);
|
||||||
|
|
||||||
if (!engine || !engine->isRunning || !engine->collateKernelCb)
|
if (!engine || !engine->collateIsRunning || !engine->collateKernelCb)
|
||||||
{ return; }
|
{ return; }
|
||||||
|
|
||||||
// Post to io_service to call callback on the correct thread
|
// Post to io_service to call callback on the correct thread
|
||||||
@@ -286,7 +289,9 @@ bool OpenClCollatingAndMeshingEngine::startCompactKernel(
|
|||||||
validateBuffers,
|
validateBuffers,
|
||||||
1, // globalWorkSize
|
1, // globalWorkSize
|
||||||
compactKernelEventCallback,
|
compactKernelEventCallback,
|
||||||
"slotCompactor");
|
"slotCompactor",
|
||||||
|
compactIsSetup,
|
||||||
|
compactIsRunning);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool OpenClCollatingAndMeshingEngine::startCollateKernel(
|
bool OpenClCollatingAndMeshingEngine::startCollateKernel(
|
||||||
@@ -327,7 +332,9 @@ bool OpenClCollatingAndMeshingEngine::startCollateKernel(
|
|||||||
validateBuffers,
|
validateBuffers,
|
||||||
globalWorkSize,
|
globalWorkSize,
|
||||||
collateKernelEventCallback,
|
collateKernelEventCallback,
|
||||||
"collateDgrams");
|
"collateDgrams",
|
||||||
|
collateIsSetup,
|
||||||
|
collateIsRunning);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool OpenClCollatingAndMeshingEngine::compileAndPrepareKernel(
|
bool OpenClCollatingAndMeshingEngine::compileAndPrepareKernel(
|
||||||
@@ -549,43 +556,48 @@ bool OpenClCollatingAndMeshingEngine::setupCollateDgramsArgs(
|
|||||||
|
|
||||||
void OpenClCollatingAndMeshingEngine::stop()
|
void OpenClCollatingAndMeshingEngine::stop()
|
||||||
{
|
{
|
||||||
if (!isRunning) {
|
// Stop compact kernel if running
|
||||||
return; // No-op if not running
|
if (compactIsRunning && currentCompactKernelEvent)
|
||||||
}
|
|
||||||
|
|
||||||
// Cancel kernel execution if possible
|
|
||||||
if (currentCompactKernelEvent)
|
|
||||||
{
|
{
|
||||||
// Note: OpenCL doesn't have a standard way to cancel kernel execution
|
|
||||||
// We can try to wait for it to complete or just release the event
|
|
||||||
// For now, we'll just wait for it to complete
|
|
||||||
clWaitForEvents(1, ¤tCompactKernelEvent);
|
clWaitForEvents(1, ¤tCompactKernelEvent);
|
||||||
clReleaseEvent(currentCompactKernelEvent);
|
clReleaseEvent(currentCompactKernelEvent);
|
||||||
currentCompactKernelEvent = nullptr;
|
currentCompactKernelEvent = nullptr;
|
||||||
|
compactIsRunning = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (currentCollateKernelEvent)
|
// Stop collate kernel if running
|
||||||
|
if (collateIsRunning && currentCollateKernelEvent)
|
||||||
{
|
{
|
||||||
// Note: OpenCL doesn't have a standard way to cancel kernel execution
|
|
||||||
// We can try to wait for it to complete or just release the event
|
|
||||||
// For now, we'll just wait for it to complete
|
|
||||||
clWaitForEvents(1, ¤tCollateKernelEvent);
|
clWaitForEvents(1, ¤tCollateKernelEvent);
|
||||||
clReleaseEvent(currentCollateKernelEvent);
|
clReleaseEvent(currentCollateKernelEvent);
|
||||||
currentCollateKernelEvent = nullptr;
|
currentCollateKernelEvent = nullptr;
|
||||||
|
collateIsRunning = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
isRunning = false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void OpenClCollatingAndMeshingEngine::stopCompactKernel()
|
void OpenClCollatingAndMeshingEngine::stopCompactKernel()
|
||||||
{
|
{
|
||||||
stop();
|
// Stop only compact kernel
|
||||||
|
if (compactIsRunning && currentCompactKernelEvent)
|
||||||
|
{
|
||||||
|
clWaitForEvents(1, ¤tCompactKernelEvent);
|
||||||
|
clReleaseEvent(currentCompactKernelEvent);
|
||||||
|
currentCompactKernelEvent = nullptr;
|
||||||
|
compactIsRunning = false;
|
||||||
|
}
|
||||||
compactKernelCb = [](cl_int){};
|
compactKernelCb = [](cl_int){};
|
||||||
}
|
}
|
||||||
|
|
||||||
void OpenClCollatingAndMeshingEngine::stopCollateKernel()
|
void OpenClCollatingAndMeshingEngine::stopCollateKernel()
|
||||||
{
|
{
|
||||||
stop();
|
// Stop only collate kernel
|
||||||
|
if (collateIsRunning && currentCollateKernelEvent)
|
||||||
|
{
|
||||||
|
clWaitForEvents(1, ¤tCollateKernelEvent);
|
||||||
|
clReleaseEvent(currentCollateKernelEvent);
|
||||||
|
currentCollateKernelEvent = nullptr;
|
||||||
|
collateIsRunning = false;
|
||||||
|
}
|
||||||
collateKernelCb = [](cl_int){};
|
collateKernelCb = [](cl_int){};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -71,7 +71,10 @@ private:
|
|||||||
cl_mem clCollationBuffer;
|
cl_mem clCollationBuffer;
|
||||||
|
|
||||||
// State tracking
|
// State tracking
|
||||||
bool isRunning;
|
bool compactIsSetup;
|
||||||
|
bool compactIsRunning;
|
||||||
|
bool collateIsSetup;
|
||||||
|
bool collateIsRunning;
|
||||||
cl_event currentCompactKernelEvent;
|
cl_event currentCompactKernelEvent;
|
||||||
cl_event currentCollateKernelEvent;
|
cl_event currentCollateKernelEvent;
|
||||||
|
|
||||||
@@ -112,7 +115,9 @@ private:
|
|||||||
ValidateBuffersFn validateBuffersFn,
|
ValidateBuffersFn validateBuffersFn,
|
||||||
size_t globalWorkSize,
|
size_t globalWorkSize,
|
||||||
void (CL_CALLBACK *eventCallback)(cl_event, cl_int, void*),
|
void (CL_CALLBACK *eventCallback)(cl_event, cl_int, void*),
|
||||||
const char* kernelName)
|
const char* kernelName,
|
||||||
|
bool& isSetup,
|
||||||
|
bool& isRunning)
|
||||||
{
|
{
|
||||||
if (!isSetup)
|
if (!isSetup)
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user