CudaSubsetMapping.inl

Go to the documentation of this file.
00001 /******************************************************************************
00002 *       SOFA, Simulation Open-Framework Architecture, version 1.0 beta 3      *
00003 *                (c) 2006-2008 MGH, INRIA, USTL, UJF, CNRS                    *
00004 *                                                                             *
00005 * This library is free software; you can redistribute it and/or modify it     *
00006 * under the terms of the GNU Lesser General Public License as published by    *
00007 * the Free Software Foundation; either version 2.1 of the License, or (at     *
00008 * your option) any later version.                                             *
00009 *                                                                             *
00010 * This library is distributed in the hope that it will be useful, but WITHOUT *
00011 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or       *
00012 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License *
00013 * for more details.                                                           *
00014 *                                                                             *
00015 * You should have received a copy of the GNU Lesser General Public License    *
00016 * along with this library; if not, write to the Free Software Foundation,     *
00017 * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301 USA.          *
00018 *******************************************************************************
00019 *                               SOFA :: Modules                               *
00020 *                                                                             *
00021 * Authors: The SOFA Team and external contributors (see Authors.txt)          *
00022 *                                                                             *
00023 * Contact information: contact@sofa-framework.org                             *
00024 ******************************************************************************/
00025 #ifndef SOFA_GPU_CUDA_CUDASUBSETMAPPING_INL
00026 #define SOFA_GPU_CUDA_CUDASUBSETMAPPING_INL
00027 
00028 #include "CudaSubsetMapping.h"
00029 #include <sofa/component/mapping/SubsetMapping.inl>
00030 
00031 namespace sofa
00032 {
00033 
00034 namespace gpu
00035 {
00036 
00037 namespace cuda
00038 {
00039 
00040 extern "C"
00041 {
00042 void SubsetMappingCuda3f_apply(unsigned int size, const void* map, void* out, const void* in);
00043 void SubsetMappingCuda3f_applyJ(unsigned int size, const void* map, void* out, const void* in);
00044 void SubsetMappingCuda3f_applyJT(unsigned int insize, unsigned int maxNOut, const void* mapT, void* out, const void* in);
00045 void SubsetMappingCuda3f_applyJT1(unsigned int size, const void* map, void* out, const void* in);
00046 
00047 void SubsetMappingCuda3f1_apply(unsigned int size, const void* map, void* out, const void* in);
00048 void SubsetMappingCuda3f1_applyJ(unsigned int size, const void* map, void* out, const void* in);
00049 void SubsetMappingCuda3f1_applyJT(unsigned int insize, unsigned int maxNOut, const void* mapT, void* out, const void* in);
00050 void SubsetMappingCuda3f1_applyJT1(unsigned int size, const void* map, void* out, const void* in);
00051 
00052 void SubsetMappingCuda3f1_3f_apply(unsigned int size, const void* map, void* out, const void* in);
00053 void SubsetMappingCuda3f1_3f_applyJ(unsigned int size, const void* map, void* out, const void* in);
00054 void SubsetMappingCuda3f1_3f_applyJT(unsigned int insize, unsigned int maxNOut, const void* mapT, void* out, const void* in);
00055 void SubsetMappingCuda3f1_3f_applyJT1(unsigned int size, const void* map, void* out, const void* in);
00056 
00057 void SubsetMappingCuda3f_3f1_apply(unsigned int size, const void* map, void* out, const void* in);
00058 void SubsetMappingCuda3f_3f1_applyJ(unsigned int size, const void* map, void* out, const void* in);
00059 void SubsetMappingCuda3f_3f1_applyJT(unsigned int insize, unsigned int maxNOut, const void* mapT, void* out, const void* in);
00060 void SubsetMappingCuda3f_3f1_applyJT1(unsigned int size, const void* map, void* out, const void* in);
00061 }
00062 
00063 } // namespace cuda
00064 
00065 } // namespace gpu
00066 
00067 namespace component
00068 {
00069 
00070 namespace mapping
00071 {
00072 
00073 using namespace gpu::cuda;
00074 
00075 template <>
00076 void SubsetMapping<sofa::core::componentmodel::behavior::MechanicalMapping< sofa::core::componentmodel::behavior::MechanicalState<gpu::cuda::CudaVec3fTypes>, sofa::core::componentmodel::behavior::MechanicalState<gpu::cuda::CudaVec3fTypes> > >::postInit()
00077 {
00078     const IndexArray& indices = this->f_indices.getValue();
00079     if (!indices.empty())
00080     {
00081         this->data.clear(indices.size());
00082         for (unsigned int i=0;i<indices.size();i++)
00083             this->data.addPoint(indices[i]);
00084         this->data.init(this->fromModel->getX()->size());
00085     }
00086 }
00087 
00088 template <>
00089 void SubsetMapping<sofa::core::Mapping< sofa::core::componentmodel::behavior::State<gpu::cuda::CudaVec3fTypes>, sofa::core::componentmodel::behavior::MappedModel<gpu::cuda::CudaVec3fTypes> > >::postInit()
00090 {
00091     const IndexArray& indices = this->f_indices.getValue();
00092     if (!indices.empty())
00093     {
00094         this->data.clear(indices.size());
00095         for (unsigned int i=0;i<indices.size();i++)
00096             this->data.addPoint(indices[i]);
00097         this->data.init(this->fromModel->getX()->size());
00098     }
00099 }
00100 
00101 template <>
00102 void SubsetMapping<sofa::core::componentmodel::behavior::MechanicalMapping< sofa::core::componentmodel::behavior::MechanicalState<gpu::cuda::CudaVec3fTypes>, sofa::core::componentmodel::behavior::MechanicalState<gpu::cuda::CudaVec3fTypes> > >::apply( Out::VecCoord& out, const In::VecCoord& in )
00103 {
00104     out.fastResize(data.map.size());
00105     SubsetMappingCuda3f_apply(data.map.size(), data.map.deviceRead(), out.deviceWrite(), in.deviceRead());
00106 }
00107 
00108 template <>
00109 void SubsetMapping<sofa::core::componentmodel::behavior::MechanicalMapping< sofa::core::componentmodel::behavior::MechanicalState<gpu::cuda::CudaVec3fTypes>, sofa::core::componentmodel::behavior::MechanicalState<gpu::cuda::CudaVec3fTypes> > >::applyJ( Out::VecDeriv& out, const In::VecDeriv& in )
00110 {
00111     out.fastResize(data.map.size());
00112     SubsetMappingCuda3f_applyJ(data.map.size(), data.map.deviceRead(), out.deviceWrite(), in.deviceRead());
00113 }
00114 
00115 template <>
00116 void SubsetMapping<sofa::core::componentmodel::behavior::MechanicalMapping< sofa::core::componentmodel::behavior::MechanicalState<gpu::cuda::CudaVec3fTypes>, sofa::core::componentmodel::behavior::MechanicalState<gpu::cuda::CudaVec3fTypes> > >::applyJT( In::VecDeriv& out, const Out::VecDeriv& in )
00117 {
00118     if (data.map.size() == 0) return;
00119     unsigned int insize = out.size();
00120     if (data.mapT.empty())
00121         SubsetMappingCuda3f_applyJT1(data.map.size(), data.map.deviceRead(), out.deviceWrite(), in.deviceRead());
00122     else
00123         SubsetMappingCuda3f_applyJT(insize, data.maxNOut, data.mapT.deviceRead(), out.deviceWrite(), in.deviceRead());
00124 }
00125 
00126 template <>
00127 void SubsetMapping<sofa::core::Mapping< sofa::core::componentmodel::behavior::State<gpu::cuda::CudaVec3fTypes>, sofa::core::componentmodel::behavior::MappedModel<gpu::cuda::CudaVec3fTypes> > >::apply( Out::VecCoord& out, const In::VecCoord& in )
00128 {
00129     out.fastResize(data.map.size());
00130     SubsetMappingCuda3f_apply(data.map.size(), data.map.deviceRead(), out.deviceWrite(), in.deviceRead());
00131 }
00132 
00133 template <>
00134 void SubsetMapping<sofa::core::Mapping< sofa::core::componentmodel::behavior::State<gpu::cuda::CudaVec3fTypes>, sofa::core::componentmodel::behavior::MappedModel<gpu::cuda::CudaVec3fTypes> > >::applyJ( Out::VecDeriv& out, const In::VecDeriv& in )
00135 {
00136     out.fastResize(data.map.size());
00137     SubsetMappingCuda3f_apply(data.map.size(), data.map.deviceRead(), out.deviceWrite(), in.deviceRead());
00138 }
00139 
00140 
00142 
00143 template <>
00144 void SubsetMapping<sofa::core::componentmodel::behavior::MechanicalMapping< sofa::core::componentmodel::behavior::MechanicalState<gpu::cuda::CudaVec3f1Types>, sofa::core::componentmodel::behavior::MechanicalState<gpu::cuda::CudaVec3f1Types> > >::postInit()
00145 {
00146     const IndexArray& indices = this->f_indices.getValue();
00147     if (!indices.empty())
00148     {
00149         this->data.clear(indices.size());
00150         for (unsigned int i=0;i<indices.size();i++)
00151             this->data.addPoint(indices[i]);
00152         this->data.init(this->fromModel->getX()->size());
00153     }
00154 }
00155 
00156 template <>
00157 void SubsetMapping<sofa::core::Mapping< sofa::core::componentmodel::behavior::State<gpu::cuda::CudaVec3f1Types>, sofa::core::componentmodel::behavior::MappedModel<gpu::cuda::CudaVec3f1Types> > >::postInit()
00158 {
00159     const IndexArray& indices = this->f_indices.getValue();
00160     if (!indices.empty())
00161     {
00162         this->data.clear(indices.size());
00163         for (unsigned int i=0;i<indices.size();i++)
00164             this->data.addPoint(indices[i]);
00165         this->data.init(this->fromModel->getX()->size());
00166     }
00167 }
00168 
00169 template <>
00170 void SubsetMapping<sofa::core::componentmodel::behavior::MechanicalMapping< sofa::core::componentmodel::behavior::MechanicalState<gpu::cuda::CudaVec3f1Types>, sofa::core::componentmodel::behavior::MechanicalState<gpu::cuda::CudaVec3f1Types> > >::apply( Out::VecCoord& out, const In::VecCoord& in )
00171 {
00172     out.fastResize(data.map.size());
00173     SubsetMappingCuda3f1_apply(data.map.size(), data.map.deviceRead(), out.deviceWrite(), in.deviceRead());
00174 }
00175 
00176 template <>
00177 void SubsetMapping<sofa::core::componentmodel::behavior::MechanicalMapping< sofa::core::componentmodel::behavior::MechanicalState<gpu::cuda::CudaVec3f1Types>, sofa::core::componentmodel::behavior::MechanicalState<gpu::cuda::CudaVec3f1Types> > >::applyJ( Out::VecDeriv& out, const In::VecDeriv& in )
00178 {
00179     out.fastResize(data.map.size());
00180     SubsetMappingCuda3f1_applyJ(data.map.size(), data.map.deviceRead(), out.deviceWrite(), in.deviceRead());
00181 }
00182 
00183 template <>
00184 void SubsetMapping<sofa::core::componentmodel::behavior::MechanicalMapping< sofa::core::componentmodel::behavior::MechanicalState<gpu::cuda::CudaVec3f1Types>, sofa::core::componentmodel::behavior::MechanicalState<gpu::cuda::CudaVec3f1Types> > >::applyJT( In::VecDeriv& out, const Out::VecDeriv& in )
00185 {
00186     if (data.map.size() == 0) return;
00187     unsigned int insize = out.size();
00188     if (data.mapT.empty())
00189         SubsetMappingCuda3f1_applyJT1(data.map.size(), data.map.deviceRead(), out.deviceWrite(), in.deviceRead());
00190     else
00191         SubsetMappingCuda3f1_applyJT(insize, data.maxNOut, data.mapT.deviceRead(), out.deviceWrite(), in.deviceRead());
00192 }
00193 
00194 template <>
00195 void SubsetMapping<sofa::core::Mapping< sofa::core::componentmodel::behavior::State<gpu::cuda::CudaVec3f1Types>, sofa::core::componentmodel::behavior::MappedModel<gpu::cuda::CudaVec3f1Types> > >::apply( Out::VecCoord& out, const In::VecCoord& in )
00196 {
00197     out.fastResize(data.map.size());
00198     SubsetMappingCuda3f1_apply(data.map.size(), data.map.deviceRead(), out.deviceWrite(), in.deviceRead());
00199 }
00200 
00201 template <>
00202 void SubsetMapping<sofa::core::Mapping< sofa::core::componentmodel::behavior::State<gpu::cuda::CudaVec3f1Types>, sofa::core::componentmodel::behavior::MappedModel<gpu::cuda::CudaVec3f1Types> > >::applyJ( Out::VecDeriv& out, const In::VecDeriv& in )
00203 {
00204     out.fastResize(data.map.size());
00205     SubsetMappingCuda3f1_apply(data.map.size(), data.map.deviceRead(), out.deviceWrite(), in.deviceRead());
00206 }
00207 
00208 
00209 
00210 template <>
00211 void SubsetMapping<sofa::core::componentmodel::behavior::MechanicalMapping< sofa::core::componentmodel::behavior::MechanicalState<gpu::cuda::CudaVec3f1Types>, sofa::core::componentmodel::behavior::MechanicalState<gpu::cuda::CudaVec3fTypes> > >::postInit()
00212 {
00213     const IndexArray& indices = this->f_indices.getValue();
00214     if (!indices.empty())
00215     {
00216         this->data.clear(indices.size());
00217         for (unsigned int i=0;i<indices.size();i++)
00218             this->data.addPoint(indices[i]);
00219         this->data.init(this->fromModel->getX()->size());
00220     }
00221 }
00222 
00223 template <>
00224 void SubsetMapping<sofa::core::Mapping< sofa::core::componentmodel::behavior::State<gpu::cuda::CudaVec3f1Types>, sofa::core::componentmodel::behavior::MappedModel<gpu::cuda::CudaVec3fTypes> > >::postInit()
00225 {
00226     const IndexArray& indices = this->f_indices.getValue();
00227     if (!indices.empty())
00228     {
00229         this->data.clear(indices.size());
00230         for (unsigned int i=0;i<indices.size();i++)
00231             this->data.addPoint(indices[i]);
00232         this->data.init(this->fromModel->getX()->size());
00233     }
00234 }
00235 
00236 template <>
00237 void SubsetMapping<sofa::core::componentmodel::behavior::MechanicalMapping< sofa::core::componentmodel::behavior::MechanicalState<gpu::cuda::CudaVec3f1Types>, sofa::core::componentmodel::behavior::MechanicalState<gpu::cuda::CudaVec3fTypes> > >::apply( Out::VecCoord& out, const In::VecCoord& in )
00238 {
00239     out.fastResize(data.map.size());
00240     SubsetMappingCuda3f1_3f_apply(data.map.size(), data.map.deviceRead(), out.deviceWrite(), in.deviceRead());
00241 }
00242 
00243 template <>
00244 void SubsetMapping<sofa::core::componentmodel::behavior::MechanicalMapping< sofa::core::componentmodel::behavior::MechanicalState<gpu::cuda::CudaVec3f1Types>, sofa::core::componentmodel::behavior::MechanicalState<gpu::cuda::CudaVec3fTypes> > >::applyJ( Out::VecDeriv& out, const In::VecDeriv& in )
00245 {
00246     out.fastResize(data.map.size());
00247     SubsetMappingCuda3f1_3f_applyJ(data.map.size(), data.map.deviceRead(), out.deviceWrite(), in.deviceRead());
00248 }
00249 
00250 template <>
00251 void SubsetMapping<sofa::core::componentmodel::behavior::MechanicalMapping< sofa::core::componentmodel::behavior::MechanicalState<gpu::cuda::CudaVec3f1Types>, sofa::core::componentmodel::behavior::MechanicalState<gpu::cuda::CudaVec3fTypes> > >::applyJT( In::VecDeriv& out, const Out::VecDeriv& in )
00252 {
00253     if (data.map.size() == 0) return;
00254     unsigned int insize = out.size();
00255     if (data.mapT.empty())
00256         SubsetMappingCuda3f1_3f_applyJT1(data.map.size(), data.map.deviceRead(), out.deviceWrite(), in.deviceRead());
00257     else
00258         SubsetMappingCuda3f1_3f_applyJT(insize, data.maxNOut, data.mapT.deviceRead(), out.deviceWrite(), in.deviceRead());
00259 }
00260 
00261 template <>
00262 void SubsetMapping<sofa::core::Mapping< sofa::core::componentmodel::behavior::State<gpu::cuda::CudaVec3f1Types>, sofa::core::componentmodel::behavior::MappedModel<gpu::cuda::CudaVec3fTypes> > >::apply( Out::VecCoord& out, const In::VecCoord& in )
00263 {
00264     out.fastResize(data.map.size());
00265     SubsetMappingCuda3f1_3f_apply(data.map.size(), data.map.deviceRead(), out.deviceWrite(), in.deviceRead());
00266 }
00267 
00268 template <>
00269 void SubsetMapping<sofa::core::Mapping< sofa::core::componentmodel::behavior::State<gpu::cuda::CudaVec3f1Types>, sofa::core::componentmodel::behavior::MappedModel<gpu::cuda::CudaVec3fTypes> > >::applyJ( Out::VecDeriv& out, const In::VecDeriv& in )
00270 {
00271     out.fastResize(data.map.size());
00272     SubsetMappingCuda3f1_3f_apply(data.map.size(), data.map.deviceRead(), out.deviceWrite(), in.deviceRead());
00273 }
00274 
00275 
00276 
00277 template <>
00278 void SubsetMapping<sofa::core::componentmodel::behavior::MechanicalMapping< sofa::core::componentmodel::behavior::MechanicalState<gpu::cuda::CudaVec3fTypes>, sofa::core::componentmodel::behavior::MechanicalState<gpu::cuda::CudaVec3f1Types> > >::postInit()
00279 {
00280     const IndexArray& indices = this->f_indices.getValue();
00281     if (!indices.empty())
00282     {
00283         this->data.clear(indices.size());
00284         for (unsigned int i=0;i<indices.size();i++)
00285             this->data.addPoint(indices[i]);
00286         this->data.init(this->fromModel->getX()->size());
00287     }
00288 }
00289 
00290 template <>
00291 void SubsetMapping<sofa::core::Mapping< sofa::core::componentmodel::behavior::State<gpu::cuda::CudaVec3fTypes>, sofa::core::componentmodel::behavior::MappedModel<gpu::cuda::CudaVec3f1Types> > >::postInit()
00292 {
00293     const IndexArray& indices = this->f_indices.getValue();
00294     if (!indices.empty())
00295     {
00296         this->data.clear(indices.size());
00297         for (unsigned int i=0;i<indices.size();i++)
00298             this->data.addPoint(indices[i]);
00299         this->data.init(this->fromModel->getX()->size());
00300     }
00301 }
00302 
00303 template <>
00304 void SubsetMapping<sofa::core::componentmodel::behavior::MechanicalMapping< sofa::core::componentmodel::behavior::MechanicalState<gpu::cuda::CudaVec3fTypes>, sofa::core::componentmodel::behavior::MechanicalState<gpu::cuda::CudaVec3f1Types> > >::apply( Out::VecCoord& out, const In::VecCoord& in )
00305 {
00306     out.fastResize(data.map.size());
00307     SubsetMappingCuda3f_3f1_apply(data.map.size(), data.map.deviceRead(), out.deviceWrite(), in.deviceRead());
00308 }
00309 
00310 template <>
00311 void SubsetMapping<sofa::core::componentmodel::behavior::MechanicalMapping< sofa::core::componentmodel::behavior::MechanicalState<gpu::cuda::CudaVec3fTypes>, sofa::core::componentmodel::behavior::MechanicalState<gpu::cuda::CudaVec3f1Types> > >::applyJ( Out::VecDeriv& out, const In::VecDeriv& in )
00312 {
00313     out.fastResize(data.map.size());
00314     SubsetMappingCuda3f_3f1_applyJ(data.map.size(), data.map.deviceRead(), out.deviceWrite(), in.deviceRead());
00315 }
00316 
00317 template <>
00318 void SubsetMapping<sofa::core::componentmodel::behavior::MechanicalMapping< sofa::core::componentmodel::behavior::MechanicalState<gpu::cuda::CudaVec3fTypes>, sofa::core::componentmodel::behavior::MechanicalState<gpu::cuda::CudaVec3f1Types> > >::applyJT( In::VecDeriv& out, const Out::VecDeriv& in )
00319 {
00320     if (data.map.size() == 0) return;
00321     unsigned int insize = out.size();
00322     if (data.mapT.empty())
00323         SubsetMappingCuda3f_3f1_applyJT1(data.map.size(), data.map.deviceRead(), out.deviceWrite(), in.deviceRead());
00324     else
00325         SubsetMappingCuda3f_3f1_applyJT(insize, data.maxNOut, data.mapT.deviceRead(), out.deviceWrite(), in.deviceRead());
00326 }
00327 
00328 template <>
00329 void SubsetMapping<sofa::core::Mapping< sofa::core::componentmodel::behavior::State<gpu::cuda::CudaVec3fTypes>, sofa::core::componentmodel::behavior::MappedModel<gpu::cuda::CudaVec3f1Types> > >::apply( Out::VecCoord& out, const In::VecCoord& in )
00330 {
00331     out.fastResize(data.map.size());
00332     SubsetMappingCuda3f_3f1_apply(data.map.size(), data.map.deviceRead(), out.deviceWrite(), in.deviceRead());
00333 }
00334 
00335 template <>
00336 void SubsetMapping<sofa::core::Mapping< sofa::core::componentmodel::behavior::State<gpu::cuda::CudaVec3fTypes>, sofa::core::componentmodel::behavior::MappedModel<gpu::cuda::CudaVec3f1Types> > >::applyJ( Out::VecDeriv& out, const In::VecDeriv& in )
00337 {
00338     out.fastResize(data.map.size());
00339     SubsetMappingCuda3f_3f1_apply(data.map.size(), data.map.deviceRead(), out.deviceWrite(), in.deviceRead());
00340 }
00341 
00342 } // namespace mapping
00343 
00344 } // namespace component
00345 
00346 } // namespace sofa
00347 
00348 #endif

Generated on Sun Nov 23 04:02:04 2008 for Sofa by  doxygen 1.5.7.1