並列アルゴリズム:アルゴリズムの効率を向上させるために、並列処理を使用する方法
目的は、さらに効率を向上させる方法である場合は、最適化アルゴリズムを継続することができないアルゴリズムのコード実行の効率を改善するのですか?並列コンピューティングの方法をアルゴリズム処理発想の転換では?
並列ソート
データのサイズソート8ギガバイト、そして私たちのメモリは非常に多くのデータを一度に保持することができ、ソートのために、最も一般的に使用されるOの時間複雑(nlogn)3つのソートアルゴリズムです:マージソート、クイックソート、ヒープの並べ替え、我々は最適化するのに続けることができないアルゴリズムレベル、および並列処理のアイデアを使用することから、簡単に問題をソートするこの何倍も8GBのデータの効率を高めることができます。
並列マージソート処理の一組
小さなデータセット16にこれらできる8GBのデータの後、各セットは、データの500メガバイトを含み、スレッド16を、16小さなソートのセットであるこの種の16パラレルデータ500メガバイトは、完了し、次いでこれらの16は、合併の収集を命じました
並列処理クイックソートの二対
これを介してデータ・ウィンドウ期間にわたってデータが、この間隔が小さい部分16、起動スレッド16、平行ため、対応8GBの間隔にデータを分割し、16小大小セクションににデータを分割さ見出さ16件の実行スレッドは、結果を完了した後、ソート、データまで順序データであります
思考パーティションは、両方のデータの大きさに応じて第二の分割され、最初のアイデアは、ランダムに並べ替え後のデータの断片を再結合することであることを除いて、データスライス、並列処理を使用しています間隔、その後、ソート、シーケンスを再処理せずに排水
あなたはデータサイズが1TBでソートしたい場合は、問題は、データの効率でディスクIO操作を軽減する方法、プロセス、頻繁にディスクの読み取りおよび書き込みデータを並べ替え、読み、ディスクを減らす読み込み、合計金額のデータを書き込み、最適化の焦点となって
見つけるに平行
ハッシュテーブルのインデックス部材への動的なデータ構造であれば、連続プロセスデータに付加された、負荷率成長ニーズの動的拡張、我々は、1.5倍に拡張する拡張用ハッシュテーブルの2GBのサイズ、すなわちを与える場合、 3ギガバイト、メモリ使用率がわずか60%であり、我々は、K個の部分にランダムなデータをすることができ、データの各のみ原 、Kは、ハッシュテーブル、小さな負荷率がこの拡張のためだけの小さな別個のハッシュテーブル、大きすぎるハッシュ・テーブルを構築した小さなデータセットについて、ハッシュテーブルは、小さなハッシュテーブルの複数の追加の拡張を必要としません大規模なハッシュテーブルよりも効率的な治療法、我々はデータを追加し、Kのハッシュテーブルに大幅に改善されたパフォーマンスデータを検索したときにのみ、K並列スレッドを通じていくつかのデータを検索するとき、それは新しいことができますハッシュテーブル内の最小の要素にデータをロードする、ハッシュヘルプがコンフリクトを減らします
パラレル文字列照合
テキスト内のキーワードは、文字列マッチングアルゴリズムによって達成することができます検索、テキスト内のキーワードの外観は非常に長い時間ではありません、KMP、BM、RK、BFは非常に効率的ですが、スピードアップするためにどのように超大型のテキストを扱いますスピードにマッチしますか?
性能は16倍に増加し、本来この大きなテキストに含まれているので、K = 16は、この16小さなテキストキーワードに平行を見つけるために、16個のスレッドを起動すると仮定Kに大きなテキスト小さなテキスト、キーワード、2分割され、テキストが分割され2、16の小さなテキストで特別な処理を必要とする、キーワードがテキストに含まれているが、大規模な結果として、小さな、しかし見つからない場合は、長さMのキーワード各開始前と長さ2Mの小さな文字列からなるテキストの先頭のMのシンボル後の小さなテキスト文字の最後にM、Mのそれぞれから小さなテキスト文字列の最後に、その後、キーワードましょう2Mのこの文字列を再発見
パラレル検索
横断する幅優先探索層ごとに検索するための検索戦略であり、この層は、現在の頂点、スレッドを開始する複数の並列探索頂点次の層、キュー・レコードによって元のコードBFSに基づいなくなっています無頂点の延長、今拡張工事の頂点を完了するために、2つのキューが必要
これら2つのキューは、A、頂点及びキューに格納された結果として得られる拡張B頂点キューA、Bおよびキュー、マルチスレッド並列処理キューは、頂点Aの拡張の他の後のキューは完了し、キュー空A、そしてその後、平行を達成するために、幅優先探索アルゴリズムをリサイクル、キューに格納され、頂点の外に延び、頂点キューBに平行に延在し
拡張概要
我々は、特定の依存関係があり、並列タスクの実行が、各タスクに期待して、N個のタスクを持っている場合は、タスクの依存関係に応じて並列に実行することができます方法を見つけますか?
ストレージマップ、タスクを実行するための思考の後、トポロジカルソート間の有向タスクの依存関係では、毎回キューに、0に度に探しては、開始スレッドプールは、実行並列のタスクの待ち行列を開始します終了し、すべてのタスクが終了するまでキューに入れられたタスク0のトポロジカルソートを見つけるために再び呼び出さ