file と の両方に出力するmatrix
テンプレート クラスを作成していますstd::cout
。
matrix<float> myMat;
...
myMat.cout(...) // print to std::cout
myMat.write("out.txt") // print to file
thrust::copy
両方ともファイルにデータを書き込むために使用するさまざまな例を見てきたため、テンプレートとしても実装しようとしている共通の基本的な印刷機能を共有しstd::cout
ます。
以下は私がやったことのスケルトンですが、現在ゴミを出力しています。誰かが私が犯した可能性のあるいくつかのエラーを指摘できますか? 例えば、std::cout
こんな風にうろうろしてもいいですか?
template <typename data_T> matrix {
...
template <typename out_T> int printTo(out_T &out, ...) {
data_T *start = ..., *end = ...;
...
thrust::copy(start, end, std::ostream_iterator<data_T>(out, " "));
...
}
int cout(...) {
...
printTo(std::cout, ...);
...
}
int write(char* path, ...) {
...
std::ofstream file;
file.open(path);
printTo(file, ...);
...
}
}
編集:
- に変更し
int printTo(std::ostream &out, ...) {...}
ても問題は解決しません。 - 詳細情報: データを a から行列に読み込み
thrust::device_vector<T>
、たとえばを使用してポインターdvec
に変換します(CUBLAS ライブラリは生のポインターを使用するため)。その後、操作してから印刷したいと思います。data_T
pvec
thrust::raw_pointer_cast(&dvec[0])
pvec
thrust::device_vector
元のポインターから直接(つまり*dvec
)印刷しようとしましたが、うまくいきます:thrust::copy((*dvec).begin(), (*dvec).begin() + n ...)
.*dvec
では、生のポインターキャストではなく、イテレーターのみを使用してコピーできるのはなぜpvec
ですか?