<div dir="ltr">Xiaopeng, <div><br></div><div>I changed your target_link_libraries line to be</div><div><br></div><div><div>target_link_libraries(itkGPUDemonsRegistrationFilterTest ITKGPUPDEDeformable ${ITK_LIBRARIES} )</div></div><div><br></div><div>Without adding ITKGPUPDEDeformable to the target_link_libraries, I would get an error in linking like you had.    </div><div><br></div><div>When ITK is built, the kernel functions (OpenCL code) are "compiled into" the C++ code. Basically, the .cl files are converted into a C++ file where the OpenCL code is encoded as a C++ string. This C++ code implements the method GetOpenCLSource() which returns that string containing the OpenCL code.  The PDE registration OpenCL kernels are compiled into the library ITKGPUPDEDeformable. If you had used other GPU filters, you would have had to add the libraries that contain those kernels as well to your target_link_libraries.</div><div><br></div><div>Jim</div><div><br></div><div><br></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Thu, Nov 27, 2014 at 7:34 AM, Xiaopeng Yang <span dir="ltr"><<a href="mailto:yxp233@postech.ac.kr" target="_blank">yxp233@postech.ac.kr</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hi Jim,<br>
<br>
I am sorry but could you please build the code enclosed to check whether you<br>
also have that kind of errors or not?<br>
<br>
Thank you very much.<br>
<br>
Best,<br>
Xiaopeng<br>
<br>
-----Original Message-----<br>
From: Xiaopeng Yang [mailto:<a href="mailto:yxp233@postech.ac.kr">yxp233@postech.ac.kr</a>]<br>
Sent: Wednesday, November 26, 2014 9:34 PM<br>
To: 'Jim Miller'<br>
Cc: 'Michael Pinkert'; '<a href="mailto:insight-users@itk.org">insight-users@itk.org</a>'<br>
Subject: RE: [ITK-users] GPU Implementation<br>
<br>
Hi,<br>
<br>
I tried to compile the code from Modules\Registration\GPUPDEDeformable\test<br>
folder. Enclosed please find the code and CMakeLists file. I am quite new to<br>
GPU, sorry I could not understand your explanation. Could you point out what<br>
I missed please?<br>
<br>
Thanks,<br>
Xiaopeng<br>
<div><div class="h5"><br>
-----Original Message-----<br>
From: Jim Miller [mailto:<a href="mailto:millerjv@gmail.com">millerjv@gmail.com</a>]<br>
Sent: Wednesday, November 26, 2014 9:10 PM<br>
To: Xiaopeng Yang<br>
Cc: Michael Pinkert; <a href="mailto:insight-users@itk.org">insight-users@itk.org</a><br>
Subject: Re: [ITK-users] GPU Implementation<br>
<br>
This doesn't look like any issue with finding OpenCL. The link error is<br>
saying it cannot find the implementation of an ITK method.<br>
<br>
I think  GPUPDEDeformableRegistrationFilterKernel::GetOpenCLSource(void) is<br>
supposed to return the kernel's implementation (probably as a string<br>
containing the OpenCL code).<br>
<br>
Is there a txx file that is not being included? Does your program contain<br>
the same headers and test?<br>
<br>
(I guess the error could occur if OpenCL was not found if the implementation<br>
of this method in  GPUPDEDeformableRegistrationFilterKernel is within<br>
#ifdef/#endif on OpenCL.)<br>
<br>
Jim<br>
<br>
> On Nov 25, 2014, at 10:03 PM, Xiaopeng Yang <<a href="mailto:yxp233@postech.ac.kr">yxp233@postech.ac.kr</a>> wrote:<br>
><br>
> Hi Michael,<br>
><br>
> I also had the same errors while building my GPU registration program.<br>
> Have you solved the problems? I guess the error was caused by improper<br>
> setting in CMakeLists.txt file, but I could not find any<br>
> CMakeLists.txt sample regarding GPU implementation in ITK. I doubt<br>
> whether there are users using this GPU module or not.<br>
><br>
> Best regards,<br>
> Xiaopeng Yang<br>
><br>
><br>
> This is the question you raised:<br>
><br>
> I am trying to implement the GPU demons registration algorithm, but I<br>
> have been having difficulty getting the program to compile.  I believe<br>
> the errors are because it cannot find the OpenCL library correctly,<br>
> but I'm not sure how to fix it.<br>
><br>
> I am using a NVIDIA Quadro FX 570 and am currently using OpenCL<br>
> through the CUDA Computing Toolkit 4.2.  My cmake file is attached,<br>
> but I have had to manually enter in the directory locations to CMake<br>
> because I have not been able to find a FindOpenCL.cmake file that<br>
> works correctly.  My operating system is Windows 7 x64.<br>
><br>
> I am able to compile ITK after generating it in CMake with manually<br>
> linked directories and Itk_Use_Gpu checked, but I have not been able<br>
> to compile my program without getting errors, which are listed at the<br>
bottom.<br>
><br>
> Does anyone have suggestions as to how to fix this?<br>
><br>
> Best regards,<br>
> Michael Pinkert<br>
><br>
> 2>registrationFunctions.obj : error LNK2019: unresolved external<br>
</div></div>> 2>symbol<br>
<span class="">> "public: static char const * __cdecl<br>
> itk::GPUPDEDeformableRegistrationFilterKernel::GetOpenCLSource(void)"<br>
> (?GetOpenCLSource@GPUPDEDeformableRegistrationFilterKernel@itk@@SAPEBD<br>
</span>> XZ) referenced in function "public: static char const * __cdecl<br>
<span class="">> itk::GPUPDEDeformableRegistrationFilter<class<br>
> itk::GPUImage<float,3>,class itk::GPUImage<float,3>,class<br>
> itk::GPUImage<class itk::Vector<float,3>,3>,class<br>
> itk::DemonsRegistrationFilter<class<br>
> itk::GPUImage<float,3>,class itk::GPUImage<float,3>,class<br>
> itk::GPUImage<class itk::Vector<float,3>,3> > >::GetOpenCLSource(void)"<br>
> (?GetOpenCLSource@?$GPUPDEDeformableRegistrationFilter@V?$GPUImage@M$0<br>
> 2@itk@<br>
> @V12@V?$GPUImage@V?$Vector@M$02@itk@@$02@2@V?$DemonsRegistrationFilter<br>
> @V?$GP<br>
> UImage@M$02@itk@@V12@V?$GPUImage@V?$Vector@M$02@itk@@$02@2@@2@@itk@@SA<br>
> PEBDXZ<br>
> )<br>
><br>
> 2>registrationFunctions.obj : error LNK2019: unresolved external<br>
</span>> 2>symbol<br>
<div class="HOEnZb"><div class="h5">> "public: static char const * __cdecl<br>
> itk::GPUDemonsRegistrationFunctionKernel::GetOpenCLSource(void)"<br>
> (?GetOpenCLSource@GPUDemonsRegistrationFunctionKernel@itk@@SAPEBDXZ)<br>
> referenced in function "public: static char const * __cdecl<br>
> itk::GPUDemonsRegistrationFunction<class itk::GPUImage<float,3>,class<br>
> itk::GPUImage<float,3>,classitk::GPUImage<class<br>
> itk::Vector<float,3>,3><br>
>> ::GetOpenCLSource(void)"<br>
> (?GetOpenCLSource@?$GPUDemonsRegistrationFunction@V?$GPUImage@M$02@itk<br>
> @@V12@<br>
> V?$GPUImage@V?$Vector@M$02@itk@@$02@2@@itk@@SAPEBDXZ)<br>
><br>
><br>
><br>
><br>
> _____________________________________<br>
> Powered by <a href="http://www.kitware.com" target="_blank">www.kitware.com</a><br>
><br>
> Visit other Kitware open-source projects at<br>
> <a href="http://www.kitware.com/opensource/opensource.html" target="_blank">http://www.kitware.com/opensource/opensource.html</a><br>
><br>
> Kitware offers ITK Training Courses, for more information visit:<br>
> <a href="http://www.kitware.com/products/protraining.php" target="_blank">http://www.kitware.com/products/protraining.php</a><br>
><br>
> Please keep messages on-topic and check the ITK FAQ at:<br>
> <a href="http://www.itk.org/Wiki/ITK_FAQ" target="_blank">http://www.itk.org/Wiki/ITK_FAQ</a><br>
><br>
> Follow this link to subscribe/unsubscribe:<br>
> <a href="http://public.kitware.com/mailman/listinfo/insight-users" target="_blank">http://public.kitware.com/mailman/listinfo/insight-users</a><br>
<br>
<br>
<br>
</div></div></blockquote></div><br></div>