StagingBuffer: add OpenCL buff handles to StimFrames

This commit is contained in:
2025-11-19 23:43:17 -04:00
parent 27b43c6686
commit 5789a31e23
7 changed files with 73 additions and 19 deletions
+8 -2
View File
@@ -10,6 +10,9 @@
#include <user/stimulusFrame.h> #include <user/stimulusFrame.h>
#include <user/frameAssemblyDesc.h> #include <user/frameAssemblyDesc.h>
#include <user/sequenceLock.h> #include <user/sequenceLock.h>
#include <user/senseApiDesc.h>
#define CL_TARGET_OPENCL_VERSION 120
#include <CL/cl.h>
namespace smo { namespace smo {
namespace stim_buff { namespace stim_buff {
@@ -31,7 +34,9 @@ public:
* each initialized with a SlotDesc from the FrameAssemblyDesc. * each initialized with a SlotDesc from the FrameAssemblyDesc.
*/ */
explicit SpMcRingBuffer( explicit SpMcRingBuffer(
const std::shared_ptr<FrameAssemblyDesc> &frameAssemblyDesc_) const std::shared_ptr<FrameAssemblyDesc> &frameAssemblyDesc_,
const SmoCallbacks& callbacks,
cl_mem_flags flags)
: :
nBuffers(frameAssemblyDesc_ ? frameAssemblyDesc_->slots.size() : 0), nBuffers(frameAssemblyDesc_ ? frameAssemblyDesc_->slots.size() : 0),
frameAssemblyDesc(frameAssemblyDesc_), frameAssemblyDesc(frameAssemblyDesc_),
@@ -54,7 +59,8 @@ public:
for (size_t i = 0; i < nBuffers; ++i) for (size_t i = 0; i < nBuffers; ++i)
{ {
slots[i].~StimulusFrame(); // Destroy default-constructed object slots[i].~StimulusFrame(); // Destroy default-constructed object
new (&slots[i]) StimulusFrame(frameAssemblyDesc->slots[i]); new (&slots[i]) StimulusFrame(
frameAssemblyDesc->slots[i], callbacks, flags);
} }
} }
+9 -2
View File
@@ -7,8 +7,11 @@
#include <user/spMcRingBuffer.h> #include <user/spMcRingBuffer.h>
#include <user/stagingBuffer.h> #include <user/stagingBuffer.h>
#include <user/frameAssemblyDesc.h> #include <user/frameAssemblyDesc.h>
#include <user/senseApiDesc.h>
#include "stimulusFrame.h" #include "stimulusFrame.h"
#include "deviceAttachmentSpec.h" #include "deviceAttachmentSpec.h"
#define CL_TARGET_OPENCL_VERSION 120
#include <CL/cl.h>
namespace smo { namespace smo {
namespace stim_buff { namespace stim_buff {
@@ -31,7 +34,9 @@ public:
&deviceAttachmentSpec, &deviceAttachmentSpec,
int histbuffMs, int histbuffMs,
const StagingBuffer::IOEngineConstraints& inputEngineConstraints, const StagingBuffer::IOEngineConstraints& inputEngineConstraints,
const StagingBuffer::IOEngineConstraints& outputEngineConstraints) const StagingBuffer::IOEngineConstraints& outputEngineConstraints,
const SmoCallbacks& callbacks,
cl_mem_flags flags)
: parent(parent), : parent(parent),
deviceAttachmentSpec(deviceAttachmentSpec), deviceAttachmentSpec(deviceAttachmentSpec),
histbuffMs(histbuffMs), histbuffMs(histbuffMs),
@@ -39,7 +44,9 @@ public:
inputEngineConstraints, inputEngineConstraints,
outputEngineConstraints, outputEngineConstraints,
static_cast<size_t>(histbuffMs / CONFIG_STIMBUFF_FRAME_PERIOD_MS)), static_cast<size_t>(histbuffMs / CONFIG_STIMBUFF_FRAME_PERIOD_MS)),
ringBuffer(static_cast<std::shared_ptr<FrameAssemblyDesc>>(stagingBuffer)) ringBuffer(
static_cast<std::shared_ptr<FrameAssemblyDesc>>(stagingBuffer),
callbacks, flags)
{} {}
virtual ~StimulusBuffer() = default; virtual ~StimulusBuffer() = default;
+29 -2
View File
@@ -2,8 +2,13 @@
#define _ATTACHMENT_SUPPORT_STIMULUS_FRAME_H #define _ATTACHMENT_SUPPORT_STIMULUS_FRAME_H
#include <cstdint> #include <cstdint>
#include <memory>
#include <user/frameAssemblyDesc.h> #include <user/frameAssemblyDesc.h>
#include <user/sequenceLock.h> #include <user/sequenceLock.h>
#include <user/compute.h>
#include <user/senseApiDesc.h>
#define CL_TARGET_OPENCL_VERSION 120
#include <CL/cl.h>
namespace smo { namespace smo {
namespace stim_buff { namespace stim_buff {
@@ -69,9 +74,30 @@ public:
*/ */
StimulusFrame() = default; StimulusFrame() = default;
StimulusFrame(const FrameAssemblyDesc::SlotDesc& slotDesc_) StimulusFrame(
const FrameAssemblyDesc::SlotDesc& slotDesc_,
const SmoCallbacks& callbacks,
cl_mem_flags flags)
: slotDesc(slotDesc_) : slotDesc(slotDesc_)
{} {
if (!callbacks.ComputeManager_createUseHostPtrBuffer)
{
throw std::runtime_error(std::string(__func__)
+ ": StimulusFrame: ComputeManager_createUseHostPtrBuffer "
"callback is null");
}
clBuffer = callbacks.ComputeManager_createUseHostPtrBuffer(
slotDesc.vaddr, slotDesc.nBytes, flags);
if (!clBuffer)
{
throw std::runtime_error(std::string(__func__)
+ ": StimulusFrame: failed to create clBuffer");
}
std::cout << __func__ << ": StimulusFrame: created clBuffer with size " << slotDesc.nBytes << " bytes @ " << (const void*)slotDesc.vaddr << std::endl;
}
~StimulusFrame() = default; ~StimulusFrame() = default;
@@ -85,6 +111,7 @@ public:
SequenceLock lock; SequenceLock lock;
SimultaneityStamp simultaneityStamp; SimultaneityStamp simultaneityStamp;
FrameAssemblyDesc::SlotDesc slotDesc; FrameAssemblyDesc::SlotDesc slotDesc;
std::shared_ptr<smo::compute::ClBuffer> clBuffer;
}; };
} // namespace stim_buff } // namespace stim_buff
+5 -2
View File
@@ -23,10 +23,13 @@ public:
const std::shared_ptr<device::DeviceAttachmentSpec>& deviceAttachmentSpec, const std::shared_ptr<device::DeviceAttachmentSpec>& deviceAttachmentSpec,
int histbuffMs, int histbuffMs,
const StagingBuffer::IOEngineConstraints& inputEngineConstraints, const StagingBuffer::IOEngineConstraints& inputEngineConstraints,
const StagingBuffer::IOEngineConstraints& outputEngineConstraints) const StagingBuffer::IOEngineConstraints& outputEngineConstraints,
const SmoCallbacks& callbacks,
cl_mem_flags flags)
: StimulusBuffer( : StimulusBuffer(
parent, deviceAttachmentSpec, histbuffMs, parent, deviceAttachmentSpec, histbuffMs,
inputEngineConstraints, outputEngineConstraints) inputEngineConstraints, outputEngineConstraints,
callbacks, flags)
{} {}
~MeshStimulusBuffer() = default; ~MeshStimulusBuffer() = default;
@@ -23,10 +23,13 @@ public:
const std::shared_ptr<device::DeviceAttachmentSpec>& deviceAttachmentSpec, const std::shared_ptr<device::DeviceAttachmentSpec>& deviceAttachmentSpec,
int histbuffMs, int histbuffMs,
const StagingBuffer::IOEngineConstraints& inputEngineConstraints, const StagingBuffer::IOEngineConstraints& inputEngineConstraints,
const StagingBuffer::IOEngineConstraints& outputEngineConstraints) const StagingBuffer::IOEngineConstraints& outputEngineConstraints,
const SmoCallbacks& callbacks,
cl_mem_flags flags)
: StimulusBuffer( : StimulusBuffer(
parent, deviceAttachmentSpec, histbuffMs, parent, deviceAttachmentSpec, histbuffMs,
inputEngineConstraints, outputEngineConstraints) inputEngineConstraints, outputEngineConstraints,
callbacks, flags)
{} {}
~PcloudAmbienceStimulusBuffer() = default; ~PcloudAmbienceStimulusBuffer() = default;
@@ -24,10 +24,13 @@ public:
&deviceAttachmentSpec, &deviceAttachmentSpec,
int histbuffMs, int histbuffMs,
const StagingBuffer::IOEngineConstraints& inputEngineConstraints, const StagingBuffer::IOEngineConstraints& inputEngineConstraints,
const StagingBuffer::IOEngineConstraints& outputEngineConstraints) const StagingBuffer::IOEngineConstraints& outputEngineConstraints,
const SmoCallbacks& callbacks,
cl_mem_flags flags)
: StimulusBuffer( : StimulusBuffer(
parent, deviceAttachmentSpec, histbuffMs, parent, deviceAttachmentSpec, histbuffMs,
inputEngineConstraints, outputEngineConstraints) inputEngineConstraints, outputEngineConstraints,
callbacks, flags)
{} {}
~PcloudIntensityStimulusBuffer() = default; ~PcloudIntensityStimulusBuffer() = default;
@@ -83,10 +83,12 @@ collationBuffer(
StagingBuffer::IOEngineConstraints::openClInputConstraints, StagingBuffer::IOEngineConstraints::openClInputConstraints,
nDgramsPerStagingBufferFrame), nDgramsPerStagingBufferFrame),
tempStimulusFrameMem(0), tempStimulusFrameMem(0),
tempStimulusFrame(FrameAssemblyDesc::SlotDesc{ tempStimulusFrame(
FrameAssemblyDesc::SlotDesc{
0, 0,
reinterpret_cast<uint8_t*>(&tempStimulusFrameMem), reinterpret_cast<uint8_t*>(&tempStimulusFrameMem),
sizeof(tempStimulusFrameMem)}) sizeof(tempStimulusFrameMem)},
*smoHooksPtr, 0)
{ {
if (smoHooksPtr->OptionParser_getOptions().verbose) if (smoHooksPtr->OptionParser_getOptions().verbose)
{ {
@@ -236,7 +238,8 @@ PcloudStimulusProducer::getOrCreateAttachedStimulusBuffer(
std::cout << __func__ << ": $$$$$$$ Creating MeshStimulusBuffer" << std::endl; std::cout << __func__ << ": $$$$$$$ Creating MeshStimulusBuffer" << std::endl;
auto meshBuffer = std::make_shared<MeshStimulusBuffer>( auto meshBuffer = std::make_shared<MeshStimulusBuffer>(
*this, deviceAttachmentSpec, histbuffMs, *this, deviceAttachmentSpec, histbuffMs,
openClMeshInputConstraints, openClMeshInputConstraints); openClMeshInputConstraints, openClMeshInputConstraints,
*smoHooksPtr, CL_MEM_READ_WRITE);
std::cout << __func__ << ": $$$$$$$ Created MeshStimulusBuffer" << std::endl; std::cout << __func__ << ": $$$$$$$ Created MeshStimulusBuffer" << std::endl;
meshStimulusBuffer = meshBuffer; meshStimulusBuffer = meshBuffer;
@@ -256,7 +259,8 @@ std::cout << __func__ << ": $$$$$$$ Created MeshStimulusBuffer" << std::endl;
std::cout << __func__ << ": $$$$$$$ Creating PcloudIntensityStimulusBuffer" << std::endl; std::cout << __func__ << ": $$$$$$$ Creating PcloudIntensityStimulusBuffer" << std::endl;
auto intensityBuffer = std::make_shared<PcloudIntensityStimulusBuffer>( auto intensityBuffer = std::make_shared<PcloudIntensityStimulusBuffer>(
*this, deviceAttachmentSpec, histbuffMs, *this, deviceAttachmentSpec, histbuffMs,
openClIntensityInputConstraints, openClIntensityInputConstraints); openClIntensityInputConstraints, openClIntensityInputConstraints,
*smoHooksPtr, CL_MEM_READ_WRITE);
std::cout << __func__ << ": $$$$$$$ Created PcloudIntensityStimulusBuffer" << std::endl; std::cout << __func__ << ": $$$$$$$ Created PcloudIntensityStimulusBuffer" << std::endl;
intensityStimulusBuffer = intensityBuffer; intensityStimulusBuffer = intensityBuffer;
@@ -275,7 +279,8 @@ std::cout << __func__ << ": $$$$$$$ Created PcloudIntensityStimulusBuffer" << st
auto ambienceBuffer = std::make_shared<PcloudAmbienceStimulusBuffer>( auto ambienceBuffer = std::make_shared<PcloudAmbienceStimulusBuffer>(
*this, deviceAttachmentSpec, histbuffMs, *this, deviceAttachmentSpec, histbuffMs,
openClAmbienceInputConstraints, openClAmbienceInputConstraints); openClAmbienceInputConstraints, openClAmbienceInputConstraints,
*smoHooksPtr, CL_MEM_READ_WRITE);
std::cout << __func__ << ": $$$$$$$ Created PcloudAmbienceStimulusBuffer" << std::endl; std::cout << __func__ << ": $$$$$$$ Created PcloudAmbienceStimulusBuffer" << std::endl;
ambienceStimulusBuffer = ambienceBuffer; ambienceStimulusBuffer = ambienceBuffer;