我目前正在与CUSPARSE合作。我遇到了麻烦,因为我不知道如何打印复杂的数字。例如,当我写:
cuComplex a;
a.x = 1.2;
a.y = 2.2;
如何打印varable? 我试过了:
COUT<<一个;
但它没有用。
答案 0 :(得分:3)
您需要重载<<
运算符以接受cuComplex和cuDoubleComplex数据类型。
std::ostream& operator<<(std::ostream& strm, const cuComplex& in)
{
char sgn[2] = "+-"
strm << in.x << sgn[in.y < 0] << " i"<< std::abs(in.y);
return strm;
}
您可以对cuDoubleComplex
执行相同的操作答案 1 :(得分:0)
std::complex
中的数据与cuComplex中的相应数据相同,即你可以reinterpret_cast
指向一个类型的指针(也就是阵列) - 它在实践中起作用,是我认为,实际上由C ++ 11保证,你可以像这样测试它:
namespace check_stdComplexdouble_to_cuDoubleComplex_binary_compatibility{
using std::complex;
const complex<double> testarr[] = { complex<double>(0.,.5)
, complex<double>(1.,1.5) };
const cuDoubleComplex* cucomplexd
= reinterpret_cast<const cuDoubleComplex*>(testarr);
auto tester() -> bool {
assert( cuCreal(cucomplexd[0])==0. && cuCimag(cucomplexd[0])==.5
&& cuCreal(cucomplexd[1])==1. && cuCimag(cucomplexd[1])==1.5 );
return true;
}
const bool ok = tester();
bool good(){return ok;}
};
如果你调用一个CUBLAS函数,该函数应该从/ std::complex<float>
读/写,你可以给它一个reinterpret_cast
指针,例如。
std::complex<double> result;
xhandle->cublasstat = yhandle->cublasstat
= cublasZdotc( *xhandle->cublashandle
, xhandle->vect_dimension
, xhandle->vector, 1
, yhandle->vector, 1
, reinterpret_cast<cuDoubleComplex*>(&result) );