[gdal-dev] Re: OpenCL, GDAL, and You
Even Rouault
even.rouault at mines-paris.org
Fri Dec 17 18:31:05 EST 2010
Le samedi 18 décembre 2010 00:09:44, Seth Price a écrit :
> > I can't help for MacOS build system.
>
> Good thing I'm here. :) Do you want an account on my machine for
> testing?
well, we can try, but do a full backup before I break things due to my Mac
illiteracy ;-)
>
> > It's me. You can find the culprit of any commit by doing a svn blame
> > or looking
> > at the log ;-)
>
> Most of that clampToDst() code was brought over from
> GWKSetPixelValue(). I'm not sure if it's a good idea to remove it. The
> original .cpp file should be the same as the new OpenCL code/. My goal
> is to make the code execution identical so I don't need to do any post-
> processing of pixels when I copy them out of OpenCL memory.
If you actually look at the GWKSetPixelValue() code, you'll see that the
GDT_Float32 has a very special implementation (actually, that's the integer
cases that have a very special implementation), which doesn't do the clamping
done for the integer case, so it's legitimate to find the same distinction in
the OpenCL code.
>
> > Which error did you get ? You are just changing some whitespace
> > change that
> > seem to be equivalent to the trunk code. Or do I miss something ?
>
> I was getting a weird build options error that seems to be caused by
> an extra space. So you're right that it's a whitespace change, but
> it's non-trivial.
ok, I've just applied your change. It didn't hurt on my side.
> ~Seth
>
> On Dec 17, 2010, at 3:54 PM, Even Rouault wrote:
> > Le vendredi 17 décembre 2010 23:41:53, Seth Price a écrit :
> >> I'm working on the trunk OpenCL build on my Mac now.
> >>
> >> ****** First, on my mac I get an error at the end of make:
> >> [...] ./ogr/.libs/ogr_srs_xml.o ./ogr/.libs/ograssemblepolygon.o ./
> >> ogr/.libs/ogr2gmlgeometry.o ./ogr/.libs/gml2ogrgeometry.o ./
> >> ogr/.libs/
> >> ogr_expat.o /opt/local/lib/libsqlite3.dylib -L/opt/local/lib -L/
> >> usr/
> >> local/lib /usr/local/lib/libexpat.dylib /usr/local/lib/
> >> libjpeg.dylib /
> >> usr/local/lib/libtiff.dylib /usr/local/lib/libpng12.dylib -lpthread -
> >> ldl /opt/local/lib/libcurl.dylib /opt/local/lib/libidn.dylib -lssl -
> >> lcrypto -lz -lOpenCL -install_name /usr/local/lib/libgdal.
> >> 1.dylib -
> >> compatibility_version 16 -current_version 16.0 -Wl,-single_module
> >> ld: library not found for -lOpenCL
> >> collect2: ld returned 1 exit status
> >> make[1]: *** [libgdal.la] Error 1
> >> make: *** [check-lib] Error 2
> >> seth:gdal-svn-trunk-2010.12.17 sprice$
> >>
> >> To fix this, I changed "OPENCL_LIB = -lOpenCL" to
> >> "OPENCL_LIB = -framework OpenCL" in GDALMmake.opt.
> >
> > I can't help for MacOS build system.
> >
> >> ***** Why is USE_CLAMP_TO_DST_FLOAT in there? I would think that is
> >> required even if it isn't on ATI. I'm not sure who inserted its use,
> >> but I'm just wondering if the reasoning is documented somewhere.
> >
> > It's me. You can find the culprit of any commit by doing a svn blame
> > or looking
> > at the log ;-)
> >
> > The reasoning was that I observed with my ATI card that float
> > buffers didn't get
> > to be multiplied by FLT_MAX. The values weren't normalized between 0
> > and 1,
> > but had directly the expected value. (in the float case, I also
> > dropped the
> > rounding to nearest integer which is clearly not desired, and not in
> > the CPU
> > implementation)
> >
> > This is perhaps also needed for NVidia, but I have no way to check,
> > so I just
> > put the condition you saw. If you can check this is unneeded, the
> > condition
> > can go away.
> >
> >> ***** I had to make this change to alg/gdalwarpkernel_opencl.c to get
> >> it to build without a build option error.
> >>
> >> @@ -1168,7 +1168,7 @@
> >>
> >> //Assemble the compiler arg string for speed. All invariants
> >>
> >> should be defined here.
> >>
> >> sprintf(buffer, "-cl-fast-relaxed-math -Werror -D FALSE=0 -D
> >>
> >> TRUE=1 "
> >> - "%s "
> >> + "%s"
> >>
> >> "-D iSrcWidth=%d -D iSrcHeight=%d -D iDstWidth=%d -D
> >>
> >> iDstHeight=%d "
> >>
> >> "-D useUnifiedSrcDensity=%d -D useUnifiedSrcValid=%d "
> >> "-D useDstDensity=%d -D useDstValid=%d -D useImag=%d "
> >>
> >> @@ -1176,9 +1176,9 @@
> >>
> >> "-D nXRadius=%d -D nYRadius=%d -D nFiltInitX=%d -D
> >>
> >> nFiltInitY=%d "
> >>
> >> "-D PI=%015.15lff -D outType=%s -D dstMinVal=
> >>
> >> %015.15lff -
> >> D dstMaxVal=%015.15lff "
> >>
> >> "-D useDstNoDataReal=%d -D vecf=%s %s -D doCubicSpline=
> >>
> >> %d "
> >> - "-D useUseBandSrcValid=%d -D iCoordMult=%d",
> >> + "-D useUseBandSrcValid=%d -D iCoordMult=%d ",
> >>
> >> /* FIXME: Is it really a ATI specific thing ? */
> >>
> >> - (warper->imageFormat == CL_FLOAT && warper->bIsATI) ?
> >> "-D
> >> USE_CLAMP_TO_DST_FLOAT=1" : "",
> >> + (warper->imageFormat == CL_FLOAT && warper->bIsATI) ?
> >> "-D
> >> USE_CLAMP_TO_DST_FLOAT=1 " : "",
> >>
> >> warper->srcWidth, warper->srcHeight, warper->dstWidth,
> >>
> >> warper->dstHeight,
> >>
> >> warper->useUnifiedSrcDensity, warper-
> >> >
> >> >useUnifiedSrcValid,
> >> >
> >> warper->useDstDensity, warper->useDstValid, warper-
> >>>
> >>> imagWorkCL != NULL,
> >
> > Which error did you get ? You are just changing some whitespace
> > change that
> > seem to be equivalent to the trunk code. Or do I miss something ?
> >
> >> **** After doing all of the above to make things compile, I don't get
> >> the bug described below. I'm working off of the latest trunk daily.
> >
> > Yeah, that's probably an issue with the ATI SDK.
> >
> >> ~Seth
> >>
> >> On Dec 8, 2010, at 1:12 PM, Even Rouault wrote:
> >>> Seth,
> >>>
> >>> Thanks for your help.
> >>>
> >>>> It's more than a little strange that none of those image sizes
> >>>> work.
> >>>> Perhaps it's a problem with the image format? Can you verify that
> >>>> the
> >>>> given format should work?
> >>>
> >>> The image format was CL_UNORM_INT8 (for GDT_Byte)
> >>>
> >>>> Looking at the spec, it might also be a problem with the 'sz'
> >>>> argument. What value is that passing?
> >>>
> >>> It's 1.
> >>>
> >>> I managed to found the following workaround that enables gdalwarp to
> >>> complete
> >>> (see http://trac.osgeo.org/gdal/changeset/21220 that basically
> >>> passes a dummy
> >>> buffer instead of a NULL pointer).
> >>>
> >>> However the visual result of the warping is really poor. I see 4
> >>> "ghost"
> >>> images shifted.
> >>>
> >>> For better understanding I've attached the source image
> >>> (small_world_b1.tif)
> >>> and the result of bilinear resampling (but I get similar weird
> >>> visual effects
> >>> with cubic, cubic spline or lanczos)
> >>>
> >>> gdalwarp -rb small_world_b1.tif out_bilinear.tif
> >>>
> >>> Best regards,
> >>>
> >>> Even
> >>> <small_world_b1.tif><out_bilinear.tif>
More information about the gdal-dev
mailing list