Cuda 在CUSPARSE中如何处理复数?
我目前正在与CUSPARSE合作。我遇到了麻烦,因为我不知道如何打印复数。例如,当我写作时: 复合物a a、 x=1.2 a、 y=2.2 如何打印变量a? 我试过:Cuda 在CUSPARSE中如何处理复数?,cuda,Cuda,我目前正在与CUSPARSE合作。我遇到了麻烦,因为我不知道如何打印复数。例如,当我写作时: 复合物a a、 x=1.2 a、 y=2.2 如何打印变量a? 我试过: cout您将需要重载您将需要重载std::complex中的数据与cuComplex中的相应数据相同,即,您可以重新解释从一种类型到另一种类型的指针(因此也包括数组)我认为,它在实践中起作用,实际上,由C++11保证,您可以这样测试它: namespace check_stdComplexdouble_to_cuDoubleCom
cout您将需要重载
您将需要重载std::complex中的数据与cuComplex中的相应数据相同,即,您可以重新解释从一种类型到另一种类型的指针(因此也包括数组)
我认为,它在实践中起作用,实际上,由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;}
};
std::complex
中的数据与cuComplex中的相应数据相同,即,您可以将一种类型的指针(以及因此而产生的数组)重新解释为另一种类型–它在实践中起作用,我想,实际上是由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;}
};
您可以这样做,但坦率地说,我不会让那些普通的低级未抽象类型靠近ostream::operator您可以这样做,但坦率地说,我不会让那些普通的低级未抽象类型靠近ostream::operator
std::complex<double> result;
xhandle->cublasstat = yhandle->cublasstat
= cublasZdotc( *xhandle->cublashandle
, xhandle->vect_dimension
, xhandle->vector, 1
, yhandle->vector, 1
, reinterpret_cast<cuDoubleComplex*>(&result) );