CUDA デバイスで機械学習アルゴリズムを使用して処理されるのを待っている大量のデータがあります。ただし、デバイスのメモリについていくつかの懸念があるため、倍精度ではなく浮動小数点数を使用しようとしています (誰かがより良いことを示さない限り、それは良い解決策だと思います)。浮動小数点数から得られた結果の倍精度を維持する方法はありますか? そうではないと思います。これもちょっとばかげた質問です。では、デバイスで巨大なデータ インスタンスを処理するもう 1 つの正しい方法は何でしょうか。
質問する
114 次
2 に答える
2
いいえ、double
データを として処理する場合、結果の精度を維持する方法はありませんfloat
。として扱いdouble
ます。メモリ サイズが問題になる場合、通常のアプローチは、データをチャンクで処理することです。チャンクを GPU にコピーし、GPU 処理を開始します。処理が進行している間に、さらにデータを GPU にコピーし、結果の一部をコピーして戻します。これは、GPU メモリ サイズに「収まらない」問題を処理するための標準的なアプローチです。
これはコピーと計算のオーバーラップと呼ばれ、CUDA ストリームを使用してこれを実現します。CUDA サンプル (単純なマルチコピーや compute など) には、ストリームの使用方法を示すさまざまなコードがあります。
于 2013-06-21T13:18:59.877 に答える
1
実際、浮動小数点データから倍精度の結果を計算できます。計算の任意の時点で、float 値を double 値にキャストできます。標準的な C 型の昇格規則に従って、この値を使用するすべての計算は double 精度になります。
これは、倍精度変数を使用して結果を格納し、それを他の型にキャストしない限り適用されます。関数呼び出しでの暗黙のキャストに注意してください。
于 2013-06-21T13:43:10.080 に答える