グローバル GPU メモリに多数のランダムな浮動小数点数があります。また、受け入れる数値の範囲と受け入れる数値の容量を指定する「バケット」もあります。
すなわち: 数字: -2 0 2 4 バケット (サイズ=1): [-2, 0], [1, 5]
私は私を生み出すろ過プロセスを実行したい
filtered_nums: -2 2 (filtered_nums はメモリの新しいブロックにすることができます)
しかし、私が取るすべてのアプローチは、バケット カウンター間でスレッドを同期しようとする大きなオーバーヘッドに遭遇します。シングルスレッドを使用しようとすると、アルゴリズムは正常に完了しますが、驚くほど時間がかかります (最初に数値を生成するよりも 100 倍以上遅くなります)。
私が求めているのは、これらの数値をフィルタリングするために使用する、一般的な高レベルで効率的で、可能な限り単純なアプローチ アルゴリズムです。
編集 10 個のバケットと 50 万個の数字を処理します。すべての数値が 10 個のバケット範囲のうちの 1 つに正確に収まる場所。各バケットには 43000 要素が保持されます。(目的はすべてのバケツを満たすことであり、多くの数字が破棄されるため、余分な要素があります)。
2回目の編集 バケットを個別に保存する必要がないことを指摘することが重要です。目的は、バケツに収まらない要素を破棄することだけです。