0

並列計算についてはよくわかりませんが、課題の「追加作業」について提案し、自分が正しいことを確認したいと思っています。C++ でレイ トレーサーを作成しました。ヒットポイントなどの光線の情報を保存し vector、シミュレーションの最後にこれらのベクトルを CSV に書き込みます (プログラミングは適切ですか?)光線を10回。これは、私のサイズが原因だと思いますvector's大きいので、ヒープメモリ (?) で多くのスペースを占有します。各光線は、他の光線からの情報なしでトレースできます (プログラムを並列化する必要があります)。プログラムが並列である場合、各プロセッサは独自のメモリを持っているため、1 つの大きなベクトルがメモリの巨大なブロックを使用することはなく、より効率的に処理できる小さなベクトルが周囲に広がっていると言っているのは正しいですか?

4

1 に答える 1

1

各プロセッサが独自の「メモリ」を持っているというあなたの仮定は、CPU キャッシュの使用を改善しようとする試みのように聞こえます (RAM は、タスクの並列度に関係なく同じままです-クラスターに分散していない限り)。一般に、並列化するとより多くの CPU キャッシュが得られますが、スレッドがコア間で移行するため、さらに多くのキャッシュ ミスが発生する可能性があります (Windows は実際にこれを行います)。

おそらく、非効率的な方法で std::vector を使用しているだけです。たとえば、最初に項目を挿入したり、項目を 1 つずつ追加したりします (これらの操作には最大で O( vector.size()) かかる場合があります)。または、レイの数が増えると速度が低下する他のデータ構造が存在する可能性があります。そして、これはおそらく複数のプロセッサ間でタスクを分割することなく修正できます。

プログラムは間違いなく並列化から得られますが。

于 2013-04-10T17:27:43.577 に答える