LSSTApplications  10.0+286,10.0+36,10.0+46,10.0-2-g4f67435,10.1+152,10.1+37,11.0,11.0+1,11.0-1-g47edd16,11.0-1-g60db491,11.0-1-g7418c06,11.0-2-g04d2804,11.0-2-g68503cd,11.0-2-g818369d,11.0-2-gb8b8ce7
LSSTDataManagementBasePackage
CudaMemory.cc
Go to the documentation of this file.
1 // -*- LSST-C++ -*-
2 
3 /*
4  * LSST Data Management System
5  * Copyright 2008 - 2012 LSST Corporation.
6  *
7  * This product includes software developed by the
8  * LSST Project (http://www.lsst.org/).
9  *
10  * This program is free software: you can redistribute it and/or modify
11  * it under the terms of the GNU General Public License as published by
12  * the Free Software Foundation, either version 3 of the License, or
13  * (at your option) any later version.
14  *
15  * This program is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18  * GNU General Public License for more details.
19  *
20  * You should have received a copy of the LSST License Statement and
21  * the GNU General Public License along with this program. If not,
22  * see <http://www.lsstcorp.org/LegalNotices/>.
23  */
24 
38 #ifdef GPU_BUILD
39 
40 #include <cuda.h>
41 #include <cuda_runtime.h>
42 
43 #include "lsst/afw/image/Image.h"
47 
48 using namespace std;
49 
50 namespace lsst {
51 namespace afw {
52 namespace gpu {
53 namespace detail {
54 
55 template<typename T>
56 int GpuMemOwner<T>::TransferFromImageBase(const lsst::afw::image::ImageBase<T>& img)
57 {
58  const T* imgPtr=img.getArray().getData();
59  int const imgStride=img.getArray().getStrides()[0] ;
60  int const imgMemSize=imgStride * img.getHeight();
61  Transfer(imgPtr,imgMemSize);
62  return imgStride;
63 }
64 
65 template<typename T>
66 int GpuMemOwner<T>::AllocImageBaseBuffer(const lsst::afw::image::ImageBase<T>& img)
67 {
68  int const imgStride=img.getArray().getStrides()[0] ;
69  int const imgMemSize=imgStride * img.getHeight();
70  Alloc(imgMemSize);
71  return imgStride;
72 }
73 
74 template<typename T>
75 void GpuMemOwner<T>::CopyToImageBase(lsst::afw::image::ImageBase<T>& img) const
76 {
77  T* imgPtr=img.getArray().getData();
78  int const imgStride=img.getArray().getStrides()[0] ;
79  int const imgMemSize=imgStride * img.getHeight();
80  assert(imgMemSize==size);
81  CopyFromGpu(imgPtr);
82 }
83 
84 //
85 // Explicit instantiations
86 //
88 #define MASKEDIMAGE(PIXTYPE) afwImage::MaskedImage<PIXTYPE, afwImage::MaskPixel, afwImage::VariancePixel>
89 #define IMAGE(PIXTYPE) afwImage::Image<PIXTYPE>
90 #define NL /* */
91 
92 #define INSTANTIATE(PIXELT) \
93  template class GpuMemOwner<PIXELT>;
94 
95 INSTANTIATE(double)
96 INSTANTIATE(float)
97 INSTANTIATE(int)
98 INSTANTIATE(boost::uint16_t)
100 
101 
102 }}}} // namespace lsst::afw::gpu::detail ends
103 
104 #endif
105 
Index getStrides() const
Return a Vector of the strides of all dimensions.
Definition: ArrayBase.h:139
additional GPU exceptions
#define INSTANTIATE(MATCH)
The base class for all image classed (Image, Mask, MaskedImage, ...)
Definition: Image.h:115
contains GpuBuffer2D class (for simple handling of images or 2D arrays)
Support for 2-D images.
int getHeight() const
Return the number of rows in the image.
Definition: Image.h:239
Element * getData() const
Return a raw pointer to the first element of the array.
Definition: ArrayBase.h:117
Functions and a class to help allocating GPU global memory and transferring data to and from a GPU...