本人 CUDA小白一枚,要是有什么不对,还望各位大佬指点。
本文及后面的几篇将分别从几个方面来大概阐述一下Thrust的一些接口。原来的网址在这里
7.1 Complex Numbers 复数
templatestruct thrust::complex; typedef see below thrust::complex::value_type; // 复数 __host__ __device__ thrust::complex::complex(const T & re); __host__ __device__ thrust::complex::complex(const T & re, const T & im); template __host__ __device__ thrust::complex::complex(const complex< U > & z); __host__ __device__ thrust::complex::complex(const std::complex< T > & z); template __host__ __device__ thrust::complex::complex(const std::complex< U > & z); // =重构 __host__ __device__ complex & thrust::complex::operator=(const T & re); complex & thrust::complex::operator=(const complex< T > & z) = default; template __host__ __device__ complex & thrust::complex::operator=(const complex< U > & z); __host__ __device__ complex & thrust::complex::operator=(const std::complex< T > & z); template __host__ __device__ complex & thrust::complex::operator=(const std::complex< U > & z); // += 重构 template __host__ __device__ complex< T > & thrust::complex::operator+=(const complex< U > & z); // -= 重构 template __host__ __device__ complex< T > & thrust::complex::operator-=(const complex< U > & z); // *= 重构 template __host__ __device__ complex< T > & thrust::complex::operator*=(const complex< U > & z); // /= 重构 template __host__ __device__ complex< T > & thrust::complex::operator/=(const complex< U > & z); // += 重构 template __host__ __device__ complex< T > & thrust::complex::operator+=(const U & z); // -= 重构 template __host__ __device__ complex< T > & thrust::complex::operator-=(const U & z); // *= 重构 template __host__ __device__ complex< T > & thrust::complex::operator*=(const U & z); // /= 重构 template __host__ __device__ complex< T > & thrust::complex::operator/=(const U & z); // 返回实部 __host__ __device__ T thrust::complex::real() const; // 返回虚部 __host__ __device__ T thrust::complex::imag() const; // 返回实部 __host__ __device__ T thrust::complex::real() const; // 返回虚部 __host__ __device__ T thrust::complex::imag() const; // 返回实部 __host__ __device__ void thrust::complex::real(T re); // 返回虚部 __host__ __device__ void thrust::complex::imag(T im); // 返回实部 __host__ __device__ void thrust::complex::real(T re); // 返回虚部 __host__ __device__ void thrust::complex::imag(T im); __host__ thrust::complex::complex< T >() const; // 返回绝对值 template __host__ __device__ T thrust::abs(const complex< T > & z); // 返回弧度制的相位角 template __host__ __device__ T thrust::arg(const complex< T > & z); // 返回复数的平方根 template __host__ __device__ T thrust::norm(const complex< T > & z); // 返回复共轭 template __host__ __device__ complex< T > thrust::conj(const complex< T > & z); // 返回特定复数平方根和特定相位的复数 template __host__ __device__ complex< typename detail::promoted_numerical_type< T0, T1 >::type > thrust::polar(const T0 & m, const T1 & theta = T1()); // 返回复数在黎曼球面上面的投影 template __host__ __device__ complex< T > thrust::proj(const T & z); // + 重构 template __host__ __device__ complex< typename detail::promoted_numerical_type< T0, T1 >::type > thrust::operator+( const complex< T0 > & x, const complex< T1 > & y); // + 重构 template __host__ __device__ complex< typename detail::promoted_numerical_type< T0, T1 >::type > thrust::operator+( const complex< T0 > & x, const T1 & y); // + 重构 template __host__ __device__ complex< typename detail::promoted_numerical_type< T0, T1 >::type > thrust::operator+( const T0 & x, const complex< T1 > & y); // + 重构 template __host__ __device__ complex< typename detail::promoted_numerical_type< T0, T1 >::type > thrust::operator-(const complex< T0 > & x, const complex< T1 > & y); // - 重构 template __host__ __device__ complex< typename detail::promoted_numerical_type< T0, T1 >::type > thrust::operator-( const complex< T0 > & x, const T1 & y); // - 重构 template __host__ __device__ complex< typename detail::promoted_numerical_type< T0, T1 >::type > thrust::operator-( const T0 & x, const complex< T1 > & y); // * 重构 template __host__ __device__ complex< typename detail::promoted_numerical_type< T0, T1 >::type > thrust::operator*( const complex< T0 > & x, const complex< T1 > & y); // * 重构 template __host__ __device__ complex< typename detail::promoted_numerical_type< T0, T1 >::type > thrust::operator*( const complex< T0 > & x, const T1 & y); // * 重构 template __host__ __device__ complex< typename detail::promoted_numerical_type< T0, T1 >::type > thrust::operator*( const T0 & x, const complex< T1 > & y); // / 重构 template __host__ __device__ complex< typename detail::promoted_numerical_type< T0, T1 >::type > thrust::operator/(const complex< T0 > & x, const complex< T1 > & y); // / 重构 template __host__ __device__ complex< typename detail::promoted_numerical_type< T0, T1 >::type > thrust::operator/(const complex< T0 > & x, const T1 & y); // / 重构 template __host__ __device__ complex< typename detail::promoted_numerical_type< T0, T1 >::type > thrust::operator/(const T0 & x, const complex< T1 > & y); // + 重构 template __host__ __device__ complex< T > thrust::operator+(const complex< T > & y); // - 重构 template __host__ __device__ complex< T > thrust::operator-(const complex< T > & y); // e指数 template __host__ __device__ complex< T > thrust::exp(const complex< T > & z); // 对数 template __host__ __device__ complex< T > thrust::log(const complex< T > & z); // 10底对数 template __host__ __device__ complex< T > thrust::log10(const complex< T > & z); // 次方 template __host__ __device__ complex< typename detail::promoted_numerical_type< T0, T1 >::type > thrust::pow( const complex< T0 > & x, const complex< T1 > & y); // 次方 template __host__ __device__ complex< typename detail::promoted_numerical_type< T0, T1 >::type > thrust::pow( const complex< T0 > & x, const T1 & y); // 次方 template __host__ __device__ complex< typename detail::promoted_numerical_type< T0, T1 >::type > thrust::pow(const T0 & x, const complex< T1 > & y); // 求根 template __host__ __device__ complex< T > thrust::sqrt(const complex< T > & z); // 余弦 template __host__ __device__ complex< T > thrust::cos(const complex< T > & z); // 正弦 template __host__ __device__ complex< T > thrust::sin(const complex< T > & z); // 正切 template __host__ __device__ complex< T > thrust::tan(const complex< T > & z); // 双曲余弦 template __host__ __device__ complex< T > thrust::cosh(const complex< T > & z); // 双曲正弦 template __host__ __device__ complex< T > thrust::sinh(const complex< T > & z); // 双曲正切 template __host__ __device__ complex< T > thrust::tanh(const complex< T > & z); // 反余弦 template __host__ __device__ complex< T > thrust::acos(const complex< T > & z); // 反正弦 template __host__ __device__ complex< T > thrust::asin(const complex< T > & z); // 反正切 template __host__ __device__ complex< T > thrust::atan(const complex< T > & z); // 反双曲余弦 template __host__ __device__ complex< T > thrust::acosh(const complex< T > & z); // 反双曲正弦 template __host__ __device__ complex< T > thrust::asinh(const complex< T > & z); // 反双曲正切 template __host__ __device__ complex< T > thrust::atanh(const complex< T > & z); // << 重构 template std::basic_ostream< CharT, Traits > & thrust::operator<<( std::basic_ostream< CharT, Traits > & os, const complex< T > & z); // >> 重构 template __host__ std::basic_istream< CharT, Traits > & thrust::operator>>( std::basic_istream< CharT, Traits > & is, complex< T > & z); // == 重构 template __host__ __device__ bool thrust::operator==( const complex< T0 > & x, const complex< T1 > & y); // == 重构 template __host__ __device__ bool thrust::operator==( const complex< T0 > & x, const std::complex< T1 > & y); // == 重构 template __host__ __device__ bool thrust::operator==( const std::complex< T0 > & x, const complex< T1 > & y); // == 重构 template __host__ __device__ bool thrust::operator==( const T0 & x, const complex< T1 > & y); // == 重构 template __host__ __device__ bool thrust::operator==( const complex< T0 > & x, const T1 & y); // == 重构 template __host__ __device__ bool thrust::operator!=( const complex< T0 > & x, const complex< T1 > & y); // != 重构 template __host__ __device__ bool thrust::operator!=( const complex< T0 > & x, const std::complex< T1 > & y); // != 重构 template __host__ __device__ bool thrust::operator!=( const std::complex< T0 > & x, const complex< T1 > & y); // != 重构 template __host__ __device__ bool thrust::operator!=( const T0 & x, const complex< T1 > & y); // != 重构 template __host__ __device__ bool thrust::operator!=( const complex< T0 > & x, const T1 & y);



