[gdal-dev] Re: OpenCL, GDAL, and You
Seth Price
seth at pricepages.org
Fri Dec 17 18:09:44 EST 2010
> I can't help for MacOS build system.
Good thing I'm here. :) Do you want an account on my machine for
testing?
> 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.
> 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.
~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>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.osgeo.org/pipermail/gdal-dev/attachments/20101217/10330167/attachment-0001.html
More information about the gdal-dev
mailing list