mirror of
https://github.com/claunia/cuetools.net.git
synced 2025-12-16 18:14:25 +00:00
FLACCL: use mapped memory on devices that share memory with the host
This commit is contained in:
@@ -2452,7 +2452,7 @@ namespace CUETools.Codecs.FLACCL
|
|||||||
{
|
{
|
||||||
this.UseGPUOnly = gpuOnly;
|
this.UseGPUOnly = gpuOnly;
|
||||||
this.UseGPURice = gpuOnly && gpuRice;
|
this.UseGPURice = gpuOnly && gpuRice;
|
||||||
this.UseMappedMemory = writer.m_settings.MappedMemory || writer.m_settings.DeviceType == OpenCLDeviceType.CPU;
|
this.UseMappedMemory = writer.m_settings.MappedMemory || _openCLProgram.Context.Devices[0].HostUnifiedMemory;
|
||||||
this.groupSize = groupSize;
|
this.groupSize = groupSize;
|
||||||
this.channels = writer.Settings.PCM.ChannelCount;
|
this.channels = writer.Settings.PCM.ChannelCount;
|
||||||
this.channelsCount = channelsCount;
|
this.channelsCount = channelsCount;
|
||||||
@@ -2482,17 +2482,6 @@ namespace CUETools.Codecs.FLACCL
|
|||||||
int selectedLen = sizeof(int) * 32 * channelsCount * MAX_FRAMES;
|
int selectedLen = sizeof(int) * 32 * channelsCount * MAX_FRAMES;
|
||||||
int riceLen = sizeof(int) * channels * MAX_CHANNELSIZE;
|
int riceLen = sizeof(int) * channels * MAX_CHANNELSIZE;
|
||||||
|
|
||||||
if (!this.UseMappedMemory)
|
|
||||||
{
|
|
||||||
clSamplesBytes = openCLProgram.Context.CreateBuffer(MemFlags.READ_WRITE, samplesBytesLen);
|
|
||||||
clResidual = openCLProgram.Context.CreateBuffer(MemFlags.READ_WRITE, residualBufferLen);
|
|
||||||
clBestRiceParams = openCLProgram.Context.CreateBuffer(MemFlags.READ_WRITE, riceParamsLen / 4);
|
|
||||||
clResidualTasks = openCLProgram.Context.CreateBuffer(MemFlags.READ_WRITE, residualTasksLen);
|
|
||||||
clBestResidualTasks = openCLProgram.Context.CreateBuffer(MemFlags.READ_WRITE, bestResidualTasksLen);
|
|
||||||
clWindowFunctions = openCLProgram.Context.CreateBuffer(MemFlags.READ_WRITE, wndLen);
|
|
||||||
clSelectedTasks = openCLProgram.Context.CreateBuffer(MemFlags.READ_WRITE, selectedLen);
|
|
||||||
clRiceOutput = openCLProgram.Context.CreateBuffer(MemFlags.READ_WRITE, riceLen);
|
|
||||||
|
|
||||||
clSamplesBytesPinned = openCLProgram.Context.CreateBuffer(MemFlags.READ_WRITE | MemFlags.ALLOC_HOST_PTR, samplesBytesLen);
|
clSamplesBytesPinned = openCLProgram.Context.CreateBuffer(MemFlags.READ_WRITE | MemFlags.ALLOC_HOST_PTR, samplesBytesLen);
|
||||||
clResidualPinned = openCLProgram.Context.CreateBuffer(MemFlags.READ_WRITE | MemFlags.ALLOC_HOST_PTR, residualBufferLen);
|
clResidualPinned = openCLProgram.Context.CreateBuffer(MemFlags.READ_WRITE | MemFlags.ALLOC_HOST_PTR, residualBufferLen);
|
||||||
clBestRiceParamsPinned = openCLProgram.Context.CreateBuffer(MemFlags.READ_WRITE | MemFlags.ALLOC_HOST_PTR, riceParamsLen / 4);
|
clBestRiceParamsPinned = openCLProgram.Context.CreateBuffer(MemFlags.READ_WRITE | MemFlags.ALLOC_HOST_PTR, riceParamsLen / 4);
|
||||||
@@ -2510,33 +2499,30 @@ namespace CUETools.Codecs.FLACCL
|
|||||||
clWindowFunctionsPtr = openCLCQ.EnqueueMapBuffer(clWindowFunctionsPinned, true, MapFlags.READ_WRITE, 0, wndLen);
|
clWindowFunctionsPtr = openCLCQ.EnqueueMapBuffer(clWindowFunctionsPinned, true, MapFlags.READ_WRITE, 0, wndLen);
|
||||||
clSelectedTasksPtr = openCLCQ.EnqueueMapBuffer(clSelectedTasksPinned, true, MapFlags.READ_WRITE, 0, selectedLen);
|
clSelectedTasksPtr = openCLCQ.EnqueueMapBuffer(clSelectedTasksPinned, true, MapFlags.READ_WRITE, 0, selectedLen);
|
||||||
clRiceOutputPtr = openCLCQ.EnqueueMapBuffer(clRiceOutputPinned, true, MapFlags.READ_WRITE, 0, riceLen);
|
clRiceOutputPtr = openCLCQ.EnqueueMapBuffer(clRiceOutputPinned, true, MapFlags.READ_WRITE, 0, riceLen);
|
||||||
|
|
||||||
|
openCLCQ.Finish();
|
||||||
|
|
||||||
|
if (!this.UseMappedMemory)
|
||||||
|
{
|
||||||
|
clSamplesBytes = openCLProgram.Context.CreateBuffer(MemFlags.READ_WRITE, samplesBytesLen);
|
||||||
|
clResidual = openCLProgram.Context.CreateBuffer(MemFlags.READ_WRITE, residualBufferLen);
|
||||||
|
clBestRiceParams = openCLProgram.Context.CreateBuffer(MemFlags.READ_WRITE, riceParamsLen / 4);
|
||||||
|
clResidualTasks = openCLProgram.Context.CreateBuffer(MemFlags.READ_WRITE, residualTasksLen);
|
||||||
|
clBestResidualTasks = openCLProgram.Context.CreateBuffer(MemFlags.READ_WRITE, bestResidualTasksLen);
|
||||||
|
clWindowFunctions = openCLProgram.Context.CreateBuffer(MemFlags.READ_WRITE, wndLen);
|
||||||
|
clSelectedTasks = openCLProgram.Context.CreateBuffer(MemFlags.READ_WRITE, selectedLen);
|
||||||
|
clRiceOutput = openCLProgram.Context.CreateBuffer(MemFlags.READ_WRITE, riceLen);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
clSamplesBytes = openCLProgram.Context.CreateBuffer(MemFlags.READ_WRITE | MemFlags.ALLOC_HOST_PTR, (uint)samplesBytesLen);
|
clSamplesBytes = clSamplesBytesPinned;
|
||||||
clResidual = openCLProgram.Context.CreateBuffer(MemFlags.READ_WRITE | MemFlags.ALLOC_HOST_PTR, residualBufferLen);
|
clResidual = clResidualPinned;
|
||||||
clBestRiceParams = openCLProgram.Context.CreateBuffer(MemFlags.READ_WRITE | MemFlags.ALLOC_HOST_PTR, riceParamsLen / 4);
|
clBestRiceParams = clBestRiceParamsPinned;
|
||||||
clResidualTasks = openCLProgram.Context.CreateBuffer(MemFlags.READ_WRITE | MemFlags.ALLOC_HOST_PTR, residualTasksLen);
|
clResidualTasks = clResidualTasksPinned;
|
||||||
clBestResidualTasks = openCLProgram.Context.CreateBuffer(MemFlags.READ_WRITE | MemFlags.ALLOC_HOST_PTR, bestResidualTasksLen);
|
clBestResidualTasks = clBestResidualTasksPinned;
|
||||||
clWindowFunctions = openCLProgram.Context.CreateBuffer(MemFlags.READ_WRITE | MemFlags.ALLOC_HOST_PTR, wndLen);
|
clWindowFunctions = clWindowFunctionsPinned;
|
||||||
clSelectedTasks = openCLProgram.Context.CreateBuffer(MemFlags.READ_WRITE | MemFlags.ALLOC_HOST_PTR, selectedLen);
|
clSelectedTasks = clSelectedTasksPinned;
|
||||||
clRiceOutput = openCLProgram.Context.CreateBuffer(MemFlags.READ_WRITE | MemFlags.ALLOC_HOST_PTR, riceLen);
|
clRiceOutput = clRiceOutputPinned;
|
||||||
|
|
||||||
clSamplesBytesPtr = openCLCQ.EnqueueMapBuffer(clSamplesBytes, true, MapFlags.READ_WRITE, 0, samplesBytesLen);
|
|
||||||
clResidualPtr = openCLCQ.EnqueueMapBuffer(clResidual, true, MapFlags.READ_WRITE, 0, residualBufferLen);
|
|
||||||
clBestRiceParamsPtr = openCLCQ.EnqueueMapBuffer(clBestRiceParams, true, MapFlags.READ_WRITE, 0, riceParamsLen / 4);
|
|
||||||
clResidualTasksPtr = openCLCQ.EnqueueMapBuffer(clResidualTasks, true, MapFlags.READ_WRITE, 0, residualTasksLen);
|
|
||||||
clBestResidualTasksPtr = openCLCQ.EnqueueMapBuffer(clBestResidualTasks, true, MapFlags.READ_WRITE, 0, bestResidualTasksLen);
|
|
||||||
clWindowFunctionsPtr = openCLCQ.EnqueueMapBuffer(clWindowFunctions, true, MapFlags.READ_WRITE, 0, wndLen);
|
|
||||||
clSelectedTasksPtr = openCLCQ.EnqueueMapBuffer(clSelectedTasks, true, MapFlags.READ_WRITE, 0, selectedLen);
|
|
||||||
clRiceOutputPtr = openCLCQ.EnqueueMapBuffer(clRiceOutput, true, MapFlags.READ_WRITE, 0, riceLen);
|
|
||||||
|
|
||||||
//clSamplesBytesPtr = clSamplesBytes.HostPtr;
|
|
||||||
//clResidualPtr = clResidual.HostPtr;
|
|
||||||
//clBestRiceParamsPtr = clBestRiceParams.HostPtr;
|
|
||||||
//clResidualTasksPtr = clResidualTasks.HostPtr;
|
|
||||||
//clBestResidualTasksPtr = clBestResidualTasks.HostPtr;
|
|
||||||
//clWindowFunctionsPtr = clWindowFunctions.HostPtr;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
clSamples = openCLProgram.Context.CreateBuffer(MemFlags.READ_WRITE, samplesBufferLen);
|
clSamples = openCLProgram.Context.CreateBuffer(MemFlags.READ_WRITE, samplesBufferLen);
|
||||||
@@ -2641,8 +2627,6 @@ namespace CUETools.Codecs.FLACCL
|
|||||||
clRiceParams.Dispose();
|
clRiceParams.Dispose();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!this.UseMappedMemory)
|
|
||||||
{
|
|
||||||
if (clSamplesBytesPtr != IntPtr.Zero)
|
if (clSamplesBytesPtr != IntPtr.Zero)
|
||||||
openCLCQ.EnqueueUnmapMemObject(clSamplesBytesPinned, clSamplesBytesPtr);
|
openCLCQ.EnqueueUnmapMemObject(clSamplesBytesPinned, clSamplesBytesPtr);
|
||||||
clSamplesBytesPtr = IntPtr.Zero;
|
clSamplesBytesPtr = IntPtr.Zero;
|
||||||
@@ -2668,6 +2652,8 @@ namespace CUETools.Codecs.FLACCL
|
|||||||
openCLCQ.EnqueueUnmapMemObject(clRiceOutputPinned, clRiceOutputPtr);
|
openCLCQ.EnqueueUnmapMemObject(clRiceOutputPinned, clRiceOutputPtr);
|
||||||
clRiceOutputPtr = IntPtr.Zero;
|
clRiceOutputPtr = IntPtr.Zero;
|
||||||
|
|
||||||
|
if (!this.UseMappedMemory)
|
||||||
|
{
|
||||||
clSamplesBytesPinned.Dispose();
|
clSamplesBytesPinned.Dispose();
|
||||||
clResidualPinned.Dispose();
|
clResidualPinned.Dispose();
|
||||||
clBestRiceParamsPinned.Dispose();
|
clBestRiceParamsPinned.Dispose();
|
||||||
@@ -2677,17 +2663,6 @@ namespace CUETools.Codecs.FLACCL
|
|||||||
clSelectedTasksPinned.Dispose();
|
clSelectedTasksPinned.Dispose();
|
||||||
clRiceOutputPinned.Dispose();
|
clRiceOutputPinned.Dispose();
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
openCLCQ.EnqueueUnmapMemObject(clSamplesBytes, clSamplesBytesPtr);
|
|
||||||
openCLCQ.EnqueueUnmapMemObject(clResidual, clResidualPtr);
|
|
||||||
openCLCQ.EnqueueUnmapMemObject(clBestRiceParams, clBestRiceParamsPtr);
|
|
||||||
openCLCQ.EnqueueUnmapMemObject(clResidualTasks, clResidualTasksPtr);
|
|
||||||
openCLCQ.EnqueueUnmapMemObject(clBestResidualTasks, clBestResidualTasksPtr);
|
|
||||||
openCLCQ.EnqueueUnmapMemObject(clWindowFunctions, clWindowFunctionsPtr);
|
|
||||||
openCLCQ.EnqueueUnmapMemObject(clSelectedTasks, clSelectedTasksPtr);
|
|
||||||
openCLCQ.EnqueueUnmapMemObject(clRiceOutput, clRiceOutputPtr);
|
|
||||||
}
|
|
||||||
|
|
||||||
clSamples.Dispose();
|
clSamples.Dispose();
|
||||||
clSamplesBytes.Dispose();
|
clSamplesBytes.Dispose();
|
||||||
|
|||||||
Reference in New Issue
Block a user