typename boost::enable_if<boost::is_same<T, typename U::value_type>, void>::type copy(U const& src, symbol<T[]> const& dst) { function_requires<RandomAccessContainerConcept<U> >(); assert((src.end() - src.begin()) == typename U::difference_type(dst.size())); CUDA_CALL(cudaMemcpyToSymbol(reinterpret_cast<char const*>(dst.data()), &*src.begin(), (src.end() - src.begin()) * sizeof(T), 0, cudaMemcpyHostToDevice)); }
typename boost::enable_if<boost::is_same<T, typename U::value_type>, void>::type copy(symbol<T[]> const& src, U& dst) { function_requires<RandomAccessContainerConcept<U> >(); assert(typename U::difference_type(src.size()) == (dst.end() - dst.begin())); CUDA_CALL(cudaMemcpyFromSymbol(&*dst.begin(), reinterpret_cast<char const*>(src.data()), src.size() * sizeof(T), 0, cudaMemcpyDeviceToHost)); }
void copy(vector<T> const& src, symbol<T[]>& dst, stream& stream) { assert(src.size() == dst.size()); CUDA_CALL(cudaMemcpyToSymbolAsync(reinterpret_cast<char const*>(dst.data()), src.data(), src.size() * sizeof(T), 0, cudaMemcpyDeviceToDevice, stream.data())); }
void copy(symbol<T[]> const& src, host::vector<T>& dst, stream& stream) { assert(src.size() == dst.size()); CUDA_CALL(cudaMemcpyFromSymbolAsync(dst.data(), reinterpret_cast<char const*>(src.data()), src.size() * sizeof(T), 0, cudaMemcpyDeviceToHost, stream.data())); }
typename boost::enable_if<boost::is_convertible<T_, T>, void>::type copy(T_ const& src, symbol<T> const& dst) { assert(1 == dst.size()); CUDA_CALL(cudaMemcpyToSymbol(reinterpret_cast<char const*>(dst.data()), &static_cast<T const&>(src), sizeof(T), 0, cudaMemcpyHostToDevice)); }
void copy(symbol<T[]> const& src, vector<T>& dst) { assert(src.size() == dst.size()); CUDA_CALL(cudaMemcpyFromSymbol(dst.data(), reinterpret_cast<char const*>(src.data()), src.size() * sizeof(T), 0, cudaMemcpyDeviceToDevice)); }
void copy(symbol<T> const& src, T& dst) { assert(src.size() == 1); CUDA_CALL(cudaMemcpyFromSymbol(&dst, reinterpret_cast<char const*>(src.data()), src.size() * sizeof(T), 0, cudaMemcpyDeviceToHost)); }