[clfft] 73/107: updating 2D real forward plan and transform
Ghislain Vaillant
ghisvail-guest at moszumanska.debian.org
Thu Jul 30 18:06:38 UTC 2015
This is an automated email from the git hooks/post-receive script.
ghisvail-guest pushed a commit to branch master
in repository clfft.
commit 6aa6a931ec39d8ec1a83539181728ec3fb30b728
Author: bragadeesh <bragadeesh.natarajan at amd>
Date: Tue Apr 14 17:30:07 2015 -0500
updating 2D real forward plan and transform
---
src/library/accessors.cpp | 7 +++-
src/library/plan.cpp | 38 +++++++++++++-----
src/library/transform.cpp | 99 +++++++++++++++++++++++++++++++++++++++--------
3 files changed, 115 insertions(+), 29 deletions(-)
diff --git a/src/library/accessors.cpp b/src/library/accessors.cpp
index 81f3fec..4b5bb4f 100644
--- a/src/library/accessors.cpp
+++ b/src/library/accessors.cpp
@@ -311,9 +311,12 @@ clfftStatus clfftSetPlanLength( clfftPlanHandle plHandle, const clfftDim dim, co
if( clLengths[ DimX ] == 0 || clLengths[ DimY ] == 0 )
return CLFFT_INVALID_ARG_VALUE;
- if( !IsASupportedLength( clLengths[ DimX ] ) || !IsASupportedLength( clLengths[ DimY ] ) )
+ if(!fftPlan->transflag)
{
- return CLFFT_NOTIMPLEMENTED;
+ if( !IsASupportedLength( clLengths[ DimX ] ) || !IsASupportedLength( clLengths[ DimY ] ) )
+ {
+ return CLFFT_NOTIMPLEMENTED;
+ }
}
fftPlan->length.push_back( clLengths[ DimX ] );
diff --git a/src/library/plan.cpp b/src/library/plan.cpp
index 4c61355..8f01aac 100644
--- a/src/library/plan.cpp
+++ b/src/library/plan.cpp
@@ -1857,20 +1857,28 @@ clfftStatus clfftBakePlan( clfftPlanHandle plHandle, cl_uint numQueues, cl_comma
OPENCL_V(clfftBakePlan(fftPlan->planX, numQueues, commQueueFFT, NULL, NULL ), _T( "BakePlan for planX failed" ) );
if( (rowPlan->inStride[0] == 1) && (rowPlan->outStride[0] == 1) &&
- (rowPlan->inStride[1] == length0) && (rowPlan->outStride[1] == Nt) )
+ ( ((rowPlan->inStride[1] == Nt*2) && (rowPlan->placeness == CLFFT_INPLACE)) ||
+ ((rowPlan->inStride[1] == length0) && (rowPlan->placeness == CLFFT_OUTOFPLACE)) )
+ && (rowPlan->outStride[1] == Nt) )
{
// create first transpose plan
//Transpose
// output --> tmp
- size_t transLengths[2] = { Nt, length1 };
+ size_t transLengths[2] = { length0, length1 };
OPENCL_V(clfftCreateDefaultPlanInternal( &fftPlan->planTX, fftPlan->context, CLFFT_2D, transLengths ),
- _T( "CreateDefaultPlan Large1d transpose failed" ) );
+ _T( "CreateDefaultPlan for planTX transpose failed" ) );
FFTPlan* trans1Plan = NULL;
lockRAII* trans1Lock = NULL;
OPENCL_V( fftRepo.getPlan( fftPlan->planTX, trans1Plan, trans1Lock ), _T( "fftRepo.getPlan failed" ) );
+ trans1Plan->transflag = true;
+
+ transLengths[0] = Nt;
+ OPENCL_V(clfftSetPlanLength( fftPlan->planTX, CLFFT_2D, transLengths ),
+ _T( "clfftSetPlanLength for planTX transpose failed" ) );
+
switch(fftPlan->outputLayout)
{
case CLFFT_HERMITIAN_INTERLEAVED:
@@ -1893,21 +1901,23 @@ clfftStatus clfftBakePlan( clfftPlanHandle plHandle, cl_uint numQueues, cl_comma
trans1Plan->tmpBufSize = fftPlan->tmpBufSize;
trans1Plan->batchsize = fftPlan->batchsize;
trans1Plan->envelope = fftPlan->envelope;
+ trans1Plan->forwardScale = 1.0f;
+ trans1Plan->backwardScale = 1.0f;
trans1Plan->inStride[0] = 1;
trans1Plan->inStride[1] = Nt;
trans1Plan->outStride[0] = 1;
trans1Plan->outStride[1] = length1;
- trans1Plan->iDist = fftPlan->iDist;
+ trans1Plan->iDist = rowPlan->oDist;
trans1Plan->oDist = Nt*length1;
trans1Plan->gen = Transpose_GCN;
- trans1Plan->transflag = true;
+
for (size_t index=2; index < fftPlan->length.size(); index++)
{
trans1Plan->length.push_back(fftPlan->length[index]);
- trans1Plan->inStride.push_back(fftPlan->inStride[index]);
+ trans1Plan->inStride.push_back(rowPlan->outStride[index]);
trans1Plan->outStride.push_back(trans1Plan->oDist);
trans1Plan->oDist *= fftPlan->length[index];
}
@@ -1938,8 +1948,8 @@ clfftStatus clfftBakePlan( clfftPlanHandle plHandle, cl_uint numQueues, cl_comma
colPlan->oDist = Nt*length1;
colPlan->precision = fftPlan->precision;
- colPlan->forwardScale = 1.0f;
- colPlan->backwardScale = 1.0f;
+ colPlan->forwardScale = fftPlan->forwardScale;
+ colPlan->backwardScale = fftPlan->backwardScale;
colPlan->tmpBufSize = fftPlan->tmpBufSize;
colPlan->gen = fftPlan->gen;
@@ -1970,14 +1980,20 @@ clfftStatus clfftBakePlan( clfftPlanHandle plHandle, cl_uint numQueues, cl_comma
//Transpose
//output --> tmp
- size_t trans2Lengths[2] = { length1, Nt };
+ size_t trans2Lengths[2] = { length1, length0 };
OPENCL_V(clfftCreateDefaultPlanInternal( &fftPlan->planTY, fftPlan->context, CLFFT_2D, trans2Lengths ),
- _T( "CreateDefaultPlan Large1d transpose failed" ) );
+ _T( "CreateDefaultPlan for planTY transpose failed" ) );
FFTPlan* trans2Plan = NULL;
lockRAII* trans2Lock = NULL;
OPENCL_V( fftRepo.getPlan( fftPlan->planTY, trans2Plan, trans2Lock ), _T( "fftRepo.getPlan failed" ) );
+ trans2Plan->transflag = true;
+
+ trans2Lengths[1] = Nt;
+ OPENCL_V(clfftSetPlanLength( fftPlan->planTY, CLFFT_2D, trans2Lengths ),
+ _T( "clfftSetPlanLength for planTY transpose failed" ) );
+
switch(fftPlan->outputLayout)
{
case CLFFT_HERMITIAN_INTERLEAVED:
@@ -2000,6 +2016,8 @@ clfftStatus clfftBakePlan( clfftPlanHandle plHandle, cl_uint numQueues, cl_comma
trans2Plan->tmpBufSize = fftPlan->tmpBufSize;
trans2Plan->batchsize = fftPlan->batchsize;
trans2Plan->envelope = fftPlan->envelope;
+ trans2Plan->forwardScale = 1.0f;
+ trans2Plan->backwardScale = 1.0f;
trans2Plan->inStride[0] = 1;
trans2Plan->inStride[1] = length1;
diff --git a/src/library/transform.cpp b/src/library/transform.cpp
index 8dc5e9f..2c500be 100644
--- a/src/library/transform.cpp
+++ b/src/library/transform.cpp
@@ -648,29 +648,94 @@ clfftStatus clfftEnqueueTransform(
{
if(fftPlan->inputLayout == CLFFT_REAL)
{
- if (fftPlan->placeness==CLFFT_INPLACE)
+ if(fftPlan->planTX)
{
- // deal with row
- OPENCL_V( clfftEnqueueTransform( fftPlan->planX, CLFFT_FORWARD, numQueuesAndEvents, commQueues, numWaitEvents,
- waitEvents, &rowOutEvents, clInputBuffers, NULL, localIntBuffer ),
+ //First row
+ OPENCL_V( clfftEnqueueTransform( fftPlan->planX, dir, numQueuesAndEvents, commQueues, numWaitEvents,
+ waitEvents, &rowOutEvents, clInputBuffers, clOutputBuffers, NULL ),
_T("clfftEnqueueTransform for row failed"));
- // deal with column
- OPENCL_V( clfftEnqueueTransform( fftPlan->planY, CLFFT_FORWARD, numQueuesAndEvents, commQueues, 1, &rowOutEvents,
- outEvents, clInputBuffers, NULL, localIntBuffer ),
- _T("clfftEnqueueTransform for column failed"));
+ cl_mem *mybuffers;
+
+ if (fftPlan->placeness==CLFFT_INPLACE)
+ mybuffers = clInputBuffers;
+ else
+ mybuffers = clOutputBuffers;
+
+#if defined(DEBUGGING)
+ OPENCL_V( clEnqueueReadBuffer( *commQueues, mybuffers[0], CL_TRUE, 0, buffSizeBytes*2, &output2[ 0 ], 0,
+ NULL, NULL ),
+ _T("Reading the result buffer failed") );
+#endif
+
+ cl_event transXOutEvents = NULL;
+ cl_event colOutEvents = NULL;
+
+
+ //First transpose
+ OPENCL_V( clfftEnqueueTransform( fftPlan->planTX, dir, numQueuesAndEvents, commQueues, 1, &rowOutEvents,
+ &transXOutEvents, mybuffers, &localIntBuffer, NULL ),
+ _T("clfftEnqueueTransform for first transpose failed"));
+ clReleaseEvent(rowOutEvents);
+
+#if defined(DEBUGGING)
+ OPENCL_V( clEnqueueReadBuffer( *commQueues, localIntBuffer, CL_TRUE, 0, buffSizeBytes*2, &output2[0], 0,
+ NULL, NULL ),
+ _T("Reading the result buffer failed") );
+#endif
+
+
+ //Second Row transform
+ OPENCL_V( clfftEnqueueTransform( fftPlan->planY, dir, numQueuesAndEvents, commQueues, 1, &transXOutEvents,
+ &colOutEvents, &localIntBuffer, NULL, NULL ),
+ _T("clfftEnqueueTransform for second row failed"));
+ clReleaseEvent(transXOutEvents);
+
+#if defined(DEBUGGING)
+ OPENCL_V( clEnqueueReadBuffer( *commQueues, localIntBuffer, CL_TRUE, 0, buffSizeBytes*2, &output2[0], 0,
+ NULL, NULL ),
+ _T("Reading the result buffer failed") );
+#endif
+
+ //Second transpose
+ OPENCL_V( clfftEnqueueTransform( fftPlan->planTY, dir, numQueuesAndEvents, commQueues, 1, &colOutEvents,
+ outEvents, &localIntBuffer, mybuffers, NULL ),
+ _T("clfftEnqueueTransform for second transpose failed"));
+ clReleaseEvent(colOutEvents);
+
+#if defined(DEBUGGING)
+ OPENCL_V( clEnqueueReadBuffer( *commQueues, mybuffers[0], CL_TRUE, 0, buffSizeBytes*2, &output2[0], 0,
+ NULL, NULL ),
+ _T("Reading the result buffer failed") );
+#endif
+
}
else
{
- // deal with row
- OPENCL_V( clfftEnqueueTransform( fftPlan->planX, CLFFT_FORWARD, numQueuesAndEvents, commQueues, numWaitEvents,
- waitEvents, &rowOutEvents, clInputBuffers, clOutputBuffers, localIntBuffer ),
- _T("clfftEnqueueTransform for row failed"));
-
- // deal with column
- OPENCL_V( clfftEnqueueTransform( fftPlan->planY, CLFFT_FORWARD, numQueuesAndEvents, commQueues, 1, &rowOutEvents,
- outEvents, clOutputBuffers, NULL, localIntBuffer ),
- _T("clfftEnqueueTransform for column failed"));
+ if (fftPlan->placeness==CLFFT_INPLACE)
+ {
+ // deal with row
+ OPENCL_V( clfftEnqueueTransform( fftPlan->planX, CLFFT_FORWARD, numQueuesAndEvents, commQueues, numWaitEvents,
+ waitEvents, &rowOutEvents, clInputBuffers, NULL, localIntBuffer ),
+ _T("clfftEnqueueTransform for row failed"));
+
+ // deal with column
+ OPENCL_V( clfftEnqueueTransform( fftPlan->planY, CLFFT_FORWARD, numQueuesAndEvents, commQueues, 1, &rowOutEvents,
+ outEvents, clInputBuffers, NULL, localIntBuffer ),
+ _T("clfftEnqueueTransform for column failed"));
+ }
+ else
+ {
+ // deal with row
+ OPENCL_V( clfftEnqueueTransform( fftPlan->planX, CLFFT_FORWARD, numQueuesAndEvents, commQueues, numWaitEvents,
+ waitEvents, &rowOutEvents, clInputBuffers, clOutputBuffers, localIntBuffer ),
+ _T("clfftEnqueueTransform for row failed"));
+
+ // deal with column
+ OPENCL_V( clfftEnqueueTransform( fftPlan->planY, CLFFT_FORWARD, numQueuesAndEvents, commQueues, 1, &rowOutEvents,
+ outEvents, clOutputBuffers, NULL, localIntBuffer ),
+ _T("clfftEnqueueTransform for column failed"));
+ }
}
}
else if(fftPlan->outputLayout == CLFFT_REAL)
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/debian-science/packages/clfft.git
More information about the debian-science-commits
mailing list