<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40"><head><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=us-ascii"><meta name=Generator content="Microsoft Word 12 (filtered medium)"><!--[if !mso]><style>v\:* {behavior:url(#default#VML);}
o\:* {behavior:url(#default#VML);}
w\:* {behavior:url(#default#VML);}
.shape {behavior:url(#default#VML);}
</style><![endif]--><style><!--
/* Font Definitions */
@font-face
        {font-family:SimSun;
        panose-1:2 1 6 0 3 1 1 1 1 1;}
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:Tahoma;
        panose-1:2 11 6 4 3 5 4 4 2 4;}
@font-face
        {font-family:"\@SimSun";
        panose-1:2 1 6 0 3 1 1 1 1 1;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0cm;
        margin-bottom:.0001pt;
        font-size:12.0pt;
        font-family:"Times New Roman","serif";}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
p.MsoAcetate, li.MsoAcetate, div.MsoAcetate
        {mso-style-priority:99;
        mso-style-link:"\6279\6CE8\6846\6587\672C Char";
        margin:0cm;
        margin-bottom:.0001pt;
        font-size:9.0pt;
        font-family:"Times New Roman","serif";}
span.EmailStyle17
        {mso-style-type:personal-reply;
        font-family:"Calibri","sans-serif";
        color:#44546A;}
span.Char
        {mso-style-name:"\6279\6CE8\6846\6587\672C Char";
        mso-style-priority:99;
        mso-style-link:\6279\6CE8\6846\6587\672C;
        font-family:"Times New Roman","serif";}
.MsoChpDefault
        {mso-style-type:export-only;
        font-size:11.0pt;}
@page WordSection1
        {size:612.0pt 792.0pt;
        margin:3.0cm 72.0pt 72.0pt 72.0pt;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="2050" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]--></head><body lang=ZH-CN link=blue vlink=purple><div class=WordSection1><p class=MsoNormal><span lang=EN-US style='font-size:10.5pt;font-family:"Calibri","sans-serif";color:#44546A'>Dear Jim,<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='font-size:10.5pt;font-family:"Calibri","sans-serif";color:#44546A'><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-US style='font-size:10.5pt;font-family:"Calibri","sans-serif";color:#44546A'>Thanks for your help. I built the test successfully, but I met an error when I run the program. Please see the attached image file. <o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='font-size:10.5pt;font-family:"Calibri","sans-serif";color:#44546A'><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-US style='font-size:10.5pt;font-family:"Calibri","sans-serif";color:#44546A'>Best,<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='font-size:10.5pt;font-family:"Calibri","sans-serif";color:#44546A'>Xiaopeng<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='font-size:10.5pt;font-family:"Calibri","sans-serif";color:#44546A'><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-US style='font-size:10.5pt;font-family:"Calibri","sans-serif";color:#44546A'><img width=677 height=730 id="_x56fe__x7247__x0020_1" src="cid:image001.png@01D01099.88EA6DD0"></span><span lang=EN-US style='font-size:10.5pt;font-family:"Calibri","sans-serif";color:#44546A'><o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='font-size:10.5pt;font-family:"Calibri","sans-serif";color:#44546A'><o:p> </o:p></span></p><div style='border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0cm 0cm 0cm'><p class=MsoNormal><b><span lang=EN-US style='font-size:10.0pt;font-family:"Tahoma","sans-serif"'>From:</span></b><span lang=EN-US style='font-size:10.0pt;font-family:"Tahoma","sans-serif"'> Jim Miller [mailto:millerjv@gmail.com] <br><b>Sent:</b> Friday, December 05, 2014 6:26 AM<br><b>To:</b> Xiaopeng Yang<br><b>Cc:</b> Insight-Users@Itk. Org<br><b>Subject:</b> Re: [ITK-users] GPU Implementation<o:p></o:p></span></p></div><p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p><div><p class=MsoNormal><span lang=EN-US>Xiaopeng, <o:p></o:p></span></p><div><p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p></div><div><p class=MsoNormal><span lang=EN-US>I changed your target_link_libraries line to be<o:p></o:p></span></p></div><div><p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p></div><div><div><p class=MsoNormal><span lang=EN-US>target_link_libraries(itkGPUDemonsRegistrationFilterTest ITKGPUPDEDeformable ${ITK_LIBRARIES} )<o:p></o:p></span></p></div></div><div><p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p></div><div><p class=MsoNormal><span lang=EN-US>Without adding ITKGPUPDEDeformable to the target_link_libraries, I would get an error in linking like you had.    <o:p></o:p></span></p></div><div><p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p></div><div><p class=MsoNormal><span lang=EN-US>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.<o:p></o:p></span></p></div><div><p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p></div><div><p class=MsoNormal><span lang=EN-US>Jim<o:p></o:p></span></p></div><div><p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p></div><div><p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p></div></div><div><p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p><div><p class=MsoNormal><span lang=EN-US>On Thu, Nov 27, 2014 at 7:34 AM, Xiaopeng Yang <<a href="mailto:yxp233@postech.ac.kr" target="_blank">yxp233@postech.ac.kr</a>> wrote:<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>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<o:p></o:p></span></p><div><div><p class=MsoNormal><span lang=EN-US><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<o:p></o:p></span></p></div></div><p class=MsoNormal><span lang=EN-US>> 2>symbol<br>> "public: static char const * __cdecl<br>> itk::GPUPDEDeformableRegistrationFilterKernel::GetOpenCLSource(void)"<br>> (?GetOpenCLSource@GPUPDEDeformableRegistrationFilterKernel@itk@@SAPEBD<br>> XZ) referenced in function "public: static char const * __cdecl<br>> 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>> 2>symbol<o:p></o:p></span></p><div><div><p class=MsoNormal style='margin-bottom:12.0pt'><span lang=EN-US>> "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><o:p></o:p></span></p></div></div></div><p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p></div></div></body></html>