<div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr">Here it is the piece of codes:<div><br></div><div><div>  typedef float PixelType;</div><div>  const unsigned int Dimension = 3;</div><div>  typedef itk::CudaImage< PixelType, Dimension > CudaImageType;</div><div>  typedef itk::Image< PixelType, Dimension > ImageType;</div><div>  typedef itk::ImportImageFilter <PixelType, Dimension> ImportFilterType;</div></div><div><br></div><div><div> extern "C"  int idlrtkbackprojection_gpu(int argc, float * argv[])</div><div>{</div></div><div><div><span style="white-space:pre">    </span>volume                =  (float *)  argv[0];</div><div><span style="white-space:pre">        </span>projection            =  (float *)  argv[1];</div><div>        debug                 =  *(unsigned int*) argv[2];</div><div>        gpu                   =  *(unsigned int*) argv[3];  </div><div>        bp_arg                =  *(unsigned int*) argv[4];  //string((*(idls *) argv[4]).s);</div><div>       geometry              =  std::string((*(idls *) argv[5]).s);</div><div>       sizexv                =  *(unsigned int*) argv[6];</div><div><span style="white-space:pre">   </span>sizeyv                =  *(unsigned int*) argv[7];</div><div><span style="white-space:pre">   </span>sizezv                =  *(unsigned int*) argv[8];</div><div><span style="white-space:pre">   </span>spacingxv             =  *(float *) argv[9];</div><div><span style="white-space:pre">  </span>spacingyv             =  *(float *) argv[10];</div><div><span style="white-space:pre"> </span>spacingzv             =  *(float *) argv[11];</div><div><span style="white-space:pre"> </span>offsetxv              =  *(float *) argv[12];</div><div><span style="white-space:pre"> </span>offsetyv              =  *(float *) argv[13];</div><div><span style="white-space:pre"> </span>offsetzv              =  *(float *) argv[14];</div><div><span style="white-space:pre"> </span>sizexp                =  *(unsigned int*) argv[15];</div><div><span style="white-space:pre">  </span>sizeyp                =  *(unsigned int*) argv[16];</div><div><span style="white-space:pre">  </span>sizezp                =  *(unsigned int*) argv[17];</div><div><span style="white-space:pre">  </span>spacingxp             =  *(float *) argv[18];</div><div><span style="white-space:pre"> </span>spacingyp             =  *(float *) argv[19];</div><div><span style="white-space:pre"> </span>spacingzp             =  *(float *) argv[20];</div><div><span style="white-space:pre"> </span>offsetxp              =  *(float *) argv[21];</div><div><span style="white-space:pre"> </span>offsetyp              =  *(float *) argv[22];</div><div><span style="white-space:pre"> </span>offsetzp              =  *(float *) argv[23];</div></div><div><br></div><div><div>// Geometry</div><div>  rtk::ThreeDCircularProjectionGeometryXMLFileReader::Pointer geometryReader;</div><div>  geometryReader = rtk::ThreeDCircularProjectionGeometryXMLFileReader::New();</div><div>  geometryReader->SetFilename(geometry);</div><div>  TRY_AND_EXIT_ON_ITK_EXCEPTION( geometryReader->GenerateOutputInformation() )</div><div>    </div><div>// Volume reader</div><div>        ImportFilterType::Pointer volumeReader = ImportFilterType::New();</div><div><br></div><div>        ImageType::SizeType sizev;// = {{sizexv,sizeyv,sizezv}};  </div><div><span style="white-space:pre">        </span>sizev[0] = sizexv; //406;        //int(dim[0]);</div><div><span style="white-space:pre">   </span>sizev[1] = sizeyv; //408;        //int(dim[1]);</div><div><span style="white-space:pre">   </span>sizev[2] = sizezv;</div><div><br></div><div>        ImageType::IndexType start;// = {{0,0,0}};  </div><div><span style="white-space:pre">  </span>start[0] = 0;</div><div><span style="white-space:pre"> </span>start[1] = 0;</div><div><span style="white-space:pre"> </span>start[2] = 0;</div><div>        ImageType::RegionType regionv;</div><div><span style="white-space:pre">        </span>regionv.SetSize(sizev);</div><div><span style="white-space:pre">       </span>regionv.SetIndex(start);</div><div>        volumeReader->SetRegion(regionv);</div><div><br></div><div>       double spacingv[3];</div><div><span style="white-space:pre"> </span>spacingv[0] = spacingxv;</div><div><span style="white-space:pre">      </span>spacingv[1] = spacingyv;</div><div><span style="white-space:pre">      </span>spacingv[2] = spacingzv;</div><div><span style="white-space:pre">      </span>volumeReader->SetSpacing(spacingv);</div><div><br></div><div><span style="white-space:pre">       </span>double originv[3];</div><div><span style="white-space:pre">    </span>originv[0] = offsetxv;</div><div><span style="white-space:pre">        </span>originv[1] = offsetyv;</div><div><span style="white-space:pre">        </span>originv[2] = offsetzv;</div><div><span style="white-space:pre">        </span>volumeReader->SetOrigin(originv);</div><div><br></div><div><div>// Projections reader</div><div>       ImportFilterType::Pointer projectionReader = ImportFilterType::New();</div><div>       ImageType::SizeType sizep;</div><div><span style="white-space:pre">       </span>sizep[0] = sizexp; //406;        //int(dim[0]);</div><div><span style="white-space:pre">   </span>sizep[1] = sizeyp; //408;        //int(dim[1]);</div><div><span style="white-space:pre">   </span>sizep[2] = sizezp;</div><div><br></div><div>       ImageType::RegionType regionp;</div><div><span style="white-space:pre">   </span>regionp.SetSize(sizep);</div><div><span style="white-space:pre">       </span>regionp.SetIndex(start);</div><div>       projectionReader->SetRegion(regionp);</div><div><br></div><div>       double spacingp[3];</div><div><span style="white-space:pre">      </span>spacingp[0] = spacingxp;</div><div><span style="white-space:pre">      </span>spacingp[1] = spacingyp;</div><div><span style="white-space:pre">      </span>spacingp[2] = spacingzp;</div><div><span style="white-space:pre">      </span>projectionReader->SetSpacing(spacingp);</div><div><br></div><div><span style="white-space:pre">   </span>double originp[3];</div><div><span style="white-space:pre">    </span>originp[0] = offsetxp;</div><div><span style="white-space:pre">        </span>originp[1] = offsetyp;</div><div><span style="white-space:pre">        </span>originp[2] = offsetzp;</div><div>       projectionReader->SetOrigin(originp);</div></div><div><br></div></div><div><div>// Create backprojection image filter</div><div>  rtk::CudaFDKBackProjectionImageFilter::Pointer bp;</div></div><div>  bp = rtk::CudaFDKBackProjectionImageFilter::New();                                           // where error was thrown out<br></div><div><br></div><div><div>  CudaImageType::Pointer cuImg1 = CudaImageType::New();</div><div>  cuImg1->Graft(projectionReader->GetOutput());</div><div>  CudaImageType::Pointer cuImg2 = CudaImageType::New();</div><div>  cuImg2->Graft(volumeReader->GetOutput());</div><div>  bp->SetInput( cuImg2 );</div><div>  bp->SetInput( 1, cuImg1 );</div></div><div><br></div><div><div>  bp->SetGeometry( geometryReader->GetOutputObject() );</div><div>  TRY_AND_EXIT_ON_ITK_EXCEPTION( bp->Update() )</div></div><div><br></div><div><br></div><div>Thanks,</div><div>Tao</div></div></div></div></div></div></div></div></div></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">Simon Rit <<a href="mailto:simon.rit@creatis.insa-lyon.fr">simon.rit@creatis.insa-lyon.fr</a>> 於 2019年1月30日 週三 上午11:29寫道:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr">Can you send the code if you want us to help? <br></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Wed, Jan 30, 2019 at 5:21 PM tao sun <<a href="mailto:colddiesun@gmail.com" target="_blank">colddiesun@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div dir="ltr">No I am not using that. But the error was thrown before GRAFT() function was called. It happens when I initialized the backprojector:<div> bp = rtk::CudaRayCastBackProjectionImageFilter::New(). <br><div> </div></div><div>Tao</div></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">Simon Rit <<a href="mailto:simon.rit@creatis.insa-lyon.fr" target="_blank">simon.rit@creatis.insa-lyon.fr</a>> 於 2019年1月30日 週三 上午11:13寫道:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div dir="ltr">Are you using the HEAD version of the git ? Because I recently corrected a bug in the Graft function (commit b2d73642ce171ba9890af2c107a1a31f923454b5).</div><div>Simon<br></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Wed, Jan 30, 2019 at 5:05 PM tao sun <<a href="mailto:colddiesun@gmail.com" target="_blank">colddiesun@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div dir="ltr">Hi Simon,<div><br></div><div>CUDA_HAVE_GPU is on. So is CUDA_FOUND. I can run examples like rtkfdk with gpu on without any problem though,</div><div>By the way I am using CUDA 9.2.88.</div><div><br></div><div>Tao</div><div><br></div><div><br></div><div><br></div><div><br></div></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">Simon Rit <<a href="mailto:simon.rit@creatis.insa-lyon.fr" target="_blank">simon.rit@creatis.insa-lyon.fr</a>> 於 2019年1月30日 週三 上午1:25寫道:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div dir="ltr"><div>Hi,</div><div>No, not really. In my experience, this occurs mainly when you don't have a GPU properly configured for CUDA. Can you check the value of CUDA_HAVE_GPU in cmake ? If it's OFF, then this is indeed the problem.<br></div><div>Simon<br></div></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Wed, Jan 30, 2019 at 1:23 AM tao sun <<a href="mailto:colddiesun@gmail.com" target="_blank">colddiesun@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div dir="ltr"><div dir="ltr">Hi again,<div><br></div><div>Finally I got time to work on this. I was able to compile the program this time using the Graft() function. However, there's a runtime error when I run the program:</div><div><br></div><div><div>    /home/tsun/bin/RTK-1.4.0/utilities/ITKCudaCommon/src/itkCudaDataManager.cxx:38 @ unknown : Cuda Error #3</div><div>    terminate called after throwing an instance of 'itk::ExceptionObject'</div><div>    what():  /home/tsun/bin/RTK-1.4.0/utilities/ITKCudaCommon/src/itkCudaDataManager.cxx:38:</div><div>    Cuda Error # 3</div><div>    Aborted</div></div><div><br></div><div>It happens when a new gpu backprojector is created:</div><div>    bp = rtk::CudaRayCastBackProjectionImageFilter::New();<br></div><div><br></div><div>Any insights for this?</div><div><br></div><div>Thanks,</div><div>Tao</div></div></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">tao sun <<a href="mailto:colddiesun@gmail.com" target="_blank">colddiesun@gmail.com</a>> 於 2019年1月19日 週六 下午8:51寫道:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr">Thank you all! I will give a try using your solutions.<div>Tao</div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">Simon Rit <<a href="mailto:simon.rit@creatis.insa-lyon.fr" target="_blank">simon.rit@creatis.insa-lyon.fr</a>> 於 2019年1月17日 週四 上午12:26寫道:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div>Hi,</div><div>That's one solution. Two other:</div><div>- graft the output to a Cuda image</div><div>itk::CudaImage<float, 3>::Pointer cuImg = itk::CudaImage<float, 3>::New();</div><div>cuImg->Graft(projectionReader->GetOutput())</div><div>- use the rtk::ImportImageFilter which is templated over image type to allow precisely this (I used it in Gate <a href="https://github.com/OpenGATE/Gate/blob/develop/source/digits_hits/src/GateFixedForcedDetectionActor.cc#L1583" target="_blank">here</a>).</div><div>Best regards,</div><div>Simon<br></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail-m_7828868116902417530gmail-m_-5682795666777629372gmail-m_-6928066469225963281gmail-m_2083612832876678240gmail-m_1585271949393647574gmail-m_-485280682349819555gmail-m_6672558738276974937gmail-m_5619079691586473791gmail_attr">On Wed, Jan 16, 2019 at 11:06 PM Andreas Andersen <<a href="mailto:andreasga22@gmail.com" target="_blank">andreasga22@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr">Hi Tao,<br><br>I think you want the <a href="https://itk.org/Doxygen/html/classitk_1_1CastImageFilter.html" target="_blank">CastImageFilter</a> from ITK.<br><br></div><div dir="ltr">Something like this:<br><div dir="ltr">using castToImageType = itk::CastImageFilter<<span style="color:rgb(0,0,0)">itk:::Image<float,3></span>, <span style="color:rgb(0,0,0)">itk::CudaImage<float,3></span>>;</div><div dir="ltr">typename castToImageType::Pointer castfilter = castToImageType::New();</div><div dir="ltr">castfilter->SetInput(projectionReader->GetOutput());</div><div dir="ltr">castfilter->Update();</div><div dir="ltr">auto cuda_image = castfilter->GetOutput();</div><div><br></div><div>Best regards Andreas</div><div><div dir="ltr" class="gmail-m_7828868116902417530gmail-m_-5682795666777629372gmail-m_-6928066469225963281gmail-m_2083612832876678240gmail-m_1585271949393647574gmail-m_-485280682349819555gmail-m_6672558738276974937gmail-m_5619079691586473791gmail-m_8518759442569938gmail_signature"><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr"><p style="margin-bottom:0.0001pt"><span style="color:rgb(31,73,125)" lang="EN-US"><span style="font-size:11pt;line-height:16.8667px;font-family:Calibri,sans-serif" lang="EN-US">__________________________________</span></span></p><p style="margin-bottom:0.0001pt"><span style="color:rgb(31,73,125)" lang="EN-US"><span style="font-size:11pt;line-height:16.8667px;font-family:Calibri,sans-serif" lang="EN-US">Andreas Gravgaard Andersen</span></span></p><div><p style="margin:0cm 0cm 0.0001pt;font-size:12pt;font-family:"Times New Roman",serif;color:black"><span style="font-size:11pt;font-family:Calibri,sans-serif;color:rgb(31,73,125)">Department of Oncology, </span></p><p style="margin:0cm 0cm 0.0001pt;font-size:12pt;font-family:"Times New Roman",serif;color:black"><span style="font-size:11pt;font-family:Calibri,sans-serif;color:rgb(31,73,125)">Aarhus University Hospital<u></u><u></u></span></p><p style="margin:0cm 0cm 0.0001pt;font-size:12pt;font-family:"Times New Roman",serif;color:black"><span style="font-size:11pt;font-family:Calibri,sans-serif;color:rgb(31,73,125)" lang="DA">Nørrebrogade 44,</span></p><p style="margin:0cm 0cm 0.0001pt;font-size:12pt;font-family:"Times New Roman",serif;color:black"><span style="font-size:11pt;font-family:Calibri,sans-serif;color:rgb(31,73,125)" lang="DA">8000, Aarhus C<u></u></span></p><p style="margin:0cm 0cm 0.0001pt;font-size:12pt;font-family:"Times New Roman",serif;color:black"><span style="font-size:11pt;font-family:Calibri,sans-serif;color:rgb(31,73,125)" lang="DA">Mail:     <a href="mailto:agravgaard@protonmail.com" target="_blank">agravgaard@protonmail.com</a></span></p><p style="margin:0cm 0cm 0.0001pt;font-size:12pt;font-family:"Times New Roman",serif;color:black"><span style="color:rgb(31,73,125);font-family:Calibri,sans-serif;font-size:11pt">Cell:     </span><span style="color:rgb(31,73,125);font-family:Calibri,sans-serif;font-size:11pt"> </span><a value="+4523382411" style="font-family:Calibri,sans-serif;font-size:11pt;color:rgb(17,85,204)">+45 3165 8140</a></p></div></div></div></div></div></div></div></div><br></div></div></div></div></div><br><div class="gmail_quote"><div dir="ltr">On Wed, 16 Jan 2019 at 22:59, tao sun <<a href="mailto:colddiesun@gmail.com" target="_blank">colddiesun@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div dir="ltr"><span style="color:rgb(0,0,0)">Hi,</span><div style="color:rgb(0,0,0)"><br></div><div style="color:rgb(0,0,0)">I have read in some image using  itk::ImportImageFilter. </div><div style="color:rgb(0,0,0)"> ImportFilterType::Pointer projectionReader = ImportFilterType::New();<br></div><div style="color:rgb(0,0,0)">...</div><div style="color:rgb(0,0,0)"> projectionReader->Update();<br></div><div style="color:rgb(0,0,0)"><br></div><div style="color:rgb(0,0,0)">The type of the image is itk:::Image<float,3>. I wonder if there is any way I can cast it to itk::CudaImage<float,3>? </div><div style="color:rgb(0,0,0)">In rtkforwardprojections.cxx the imageReaderType is defined as CudaImageType so there is no such problem.</div><div style="color:rgb(0,0,0)"><br></div><div style="color:rgb(0,0,0)">Thanks,</div><div style="color:rgb(0,0,0)">Tao</div></div></div>
_______________________________________________<br>
Rtk-users mailing list<br>
<a href="mailto:Rtk-users@public.kitware.com" target="_blank">Rtk-users@public.kitware.com</a><br>
<a href="https://public.kitware.com/mailman/listinfo/rtk-users" rel="noreferrer" target="_blank">https://public.kitware.com/mailman/listinfo/rtk-users</a><br>
</blockquote></div>
_______________________________________________<br>
Rtk-users mailing list<br>
<a href="mailto:Rtk-users@public.kitware.com" target="_blank">Rtk-users@public.kitware.com</a><br>
<a href="https://public.kitware.com/mailman/listinfo/rtk-users" rel="noreferrer" target="_blank">https://public.kitware.com/mailman/listinfo/rtk-users</a><br>
</blockquote></div>
</blockquote></div>
</blockquote></div>
_______________________________________________<br>
Rtk-users mailing list<br>
<a href="mailto:Rtk-users@public.kitware.com" target="_blank">Rtk-users@public.kitware.com</a><br>
<a href="https://public.kitware.com/mailman/listinfo/rtk-users" rel="noreferrer" target="_blank">https://public.kitware.com/mailman/listinfo/rtk-users</a><br>
</blockquote></div>
</blockquote></div>
</blockquote></div>
</blockquote></div>
</blockquote></div>
</blockquote></div>