55 static void free(T * p) {
delete[] p; }
56 static T * alloc(
size_t s) {
return new T[s]; }
58 static void copy( T* begin, T* end, T* dst ) {
59 std::copy ( begin, end, dst );
62 static T* clone (T* begin, T* end) {
63 T* p = alloc( end - begin );
64 copy( begin, end, p );
77 static void free(T * p) { cudaFree(p); }
78 static T * alloc(
size_t s) {
80 cudaMalloc(&p, s *
sizeof(T) );
84 static void copy( T* begin, T* end, T* dst ) {
85 cudaMemcpy( dst, begin, (end-begin)*
sizeof(T), cudaMemcpyDeviceToDevice );
88 static T* clone (T* begin, T* end) {
89 T* p = alloc( end - begin );
90 copy( begin, end, p );
104 static void free(T * p) { cudaFreeHost(p); }
105 static T * alloc(
size_t s) {
107 cudaMallocHost(&p, s *
sizeof(T) );
111 static void copy( T* begin, T* end, T* dst ) {
112 cudaMemcpy( dst, begin, (end-begin)*
sizeof(T), cudaMemcpyHostToHost );
115 static T* clone (T* begin, T* end) {
116 T* p = alloc( end - begin );
117 copy( begin, end, p );
130 static T * alloc(
size_t s) {
132 cudaHostAlloc(&p, s *
sizeof(T), cudaHostAllocMapped );
143 cudaGetDevicePointer(&dp,hp,0);
151 template<
class A,
class T>
153 A::copy(begin,end,dst);
159 cudaMemcpy(dst, begin, (end-begin)*
sizeof(T), cudaMemcpyHostToDevice);
165 cudaMemcpy(dst, begin, (end-begin)*
sizeof(T), cudaMemcpyDeviceToHost);