パフォーマンス最適化技術: アルゴリズム

パフォーマンス最適化技術: アルゴリズム

アルゴリズムとその実装にはさまざまな種類がありますが、この記事ではシングルコア、シングルスレッドのアルゴリズムではなく、マルチコア、マルチスレッドのアルゴリズムについて説明します。すべてのアルゴリズムの種類について説明するわけではありませんが (これは著者の能力を超えています)、マルチコア ネットワーク デバイスで一般的なアルゴリズムと、可能な最適化アプローチについて説明します。これらのアプローチの一部は検証されていますが、他のアプローチはまだアイデア段階にあり、データによってサポートされていません。

マルチコア アルゴリズムの最適化には、ロックフリーとロックレスの 2 つの目標があります。

ロックフリーは完全にロックフリーな設計であり、次の 2 つの方法で実装できます。

  • CPU ごとのデータは、その名前が示すように、各コアまたはスレッドに独自のプライベート データ構造があります (ここでのプライベートは、スレッド ローカル データとは異なります。ここでのプライベートは論理的にプライベートであるという意味であり、他のスレッドがこのデータにアクセスできないという意味ではありません。一方、スレッド ローカル データはスレッド プライベート データ構造であり、他のスレッドはアクセスできません。もちろん、論理的にプライベートであるか物理的にプライベートであるかに関係なく、共有データをスレッド プライベート データに変換することで、ロックや競合を回避できます)。グローバル変数は共有されますが、ローカル変数はプライベートであるため、より多くのローカル変数を使用することで、ロックフリーの目的も達成できます。
  • CAS は、アトミック操作である比較とスワップに基づいています (スピンロックの実装にも比較とスワップが必要ですが、スピンロックには LOCKED と UNLOCKED の 2 つの状態しかありませんが、CAS 変数には複数の状態があるという違いがあります)。次に、CAS の実装はハードウェアによって保証される必要があります (アトミック操作)。CAS は一度に 32 ビットを操作できますが、一度にメモリ ブロックを比較および変更できる MCAS もあります。 CAS に基づくデータ構造には統一された一貫した実装方法がないため、ロック ベースのアルゴリズムほど単純で直接的ではない場合があります。データ構造ごとに異なる CAS 実装方法があり、読者は自分で検索できます。

ロックレスの目的は、ロックを減らすことではなく、ロックの競合を減らすことです。これはロックの粒度に関係します。ロックの粒度が小さいほど、待機時間は短くなり、同時実行時間は長くなります。

ロックの競合では、ロックを取得した後に異なるスレッドがどのような異なるアクションを実行するかを考慮する必要があります。セッション プールの割り当てと解放を例に挙げます。複数のスレッドが同じセッション プールにアクセスし、セッションを割り当てたり解放したりするとします。セッション プールは tailq であり、割り当てはヘッドで行われ、解放はテールで行われます。

複数のスレッドが同時にセッション プールにアクセスする場合、セッション プールを保護するためにスピンロックが必要です。そうすると、割り当てと解放という 2 つの異なるアクションが互いに競合し、複数のスレッド上の割り当てまたは解放も互いに競合することになります。

ここで、割り当てに 1 つのロックを使用し、解放に 1 つのロックを使用して両端キューを生成することを検討できます。これにより、割り当てと解放の間の競合を減らすことができます。

http://www.parallellabs.com/2010/10/25/practical-concurrent-queue-algorithm/ (この記事を参照)。

2 つのプールを使用して、1 つのプールを割り当て、1 つのプールを解放することも検討できます。割り当てられたプールを使い切った後、2 つのプールのポインタを交換します (このとき、両方のプールが空の場合を検討します。これにより、割り当てと解放の競合が軽減されるだけで、この競合を完全に排除することはできません)。

ロックベースまたは CAS ベース (ロックフリー) のデータ構造のいずれであっても、ステート マシンが必要です。異なる状態で異なる処理を実行し、ロックの粒度を上げます。つまり、状態の数ではなく、状態マシンの数を増やし、状態保護の範囲を縮小します。これは実際に体験してみる必要があります。

元記事: パフォーマンス最適化の方法とテクニック: アルゴリズム

【編集者のおすすめ】

  1. パフォーマンス最適化技術に関する必須知識
  2. パフォーマンスの低下?ファイルサーバー容量ツールが原因を教えてくれ
  3. パフォーマンス最適化手法: コードレベルの最適化

<<:  MySQLインデックスの背後にあるデータ構造とアルゴリズムの原理

>>:  MySQL インデックスのデータ構造とアルゴリズム: インデックスの実装

ブログ    
ブログ    
ブログ    

推薦する

劉強東:人工知能の時代が来ています。このチャンスをつかめば、あなたは豊かになれます。

劉強東は言った。「この世で働かずに得られる唯一のものは貧困であり、無から創造できる唯一のものは夢であ...

2021 年のテクノロジートレンドはどこに向かうのでしょうか? IEEEが答えを教えます

[[357414]]この記事はLeiphone.comから転載したものです。転載する場合は、Leip...

アルゴリズム モデルをエンドツーエンドのインテリジェント モデルに変換するにはどうすればよいでしょうか?

エッジ インテリジェント テクノロジーのエンジニアリング プラクティスを紹介する前に、避けることので...

AIガバナンスとは何か、どのように、そしてなぜ生まれるのか

AI は登場以来、タスクの自動化や業務の効率化、より優れたテクノロジーの構築、エンドユーザー エクス...

TorchCVは、北京大学の学生が開発したPyTorchベースのCVモデルフレームワークです。

機械学習によってもたらされたあらゆる破壊的技術の中でも、コンピュータービジョンの分野は業界関係者と学...

質問応答をより自然にする - コピーと検索メカニズムに基づく自然な回答生成システムの研究

機械を人間と同じくらい賢くすることは、常に研究者の目標でした。知能の概念を正確に定義することは難しい...

エッジAIとは何ですか?

エッジ AI は、今日のデジタル変革の時代に台頭している 2 つのテクノロジー、エッジ コンピューテ...

米国はチップ供給を遮断、ロシアはリソグラフィー装置の再構築を決定

この記事はAI新メディアQuantum Bit(公開アカウントID:QbitAI)より許可を得て転載...

機械学習におけるよくある間違い

序文エンジニアリングでは、キーバリューストアを構築する方法が複数あり、それぞれの設計では使用パターン...

AIは旅行業界の困難を軽減できるか?

[[323317]]現時点では、多くの企業が、数か月前に考えていたよりも見通しが不透明であると感じ...

2018 年のビッグデータのトレンド: 人工知能... データ分析には視覚化モデルが含まれます...

導入ノートパソコン、スマートフォン、センサーはすべて、モノのインターネット向けに大量のデータを生成し...

データサイエンティストが最もよく使用するアルゴリズム10選

最新の KDnuggets 調査では、データ サイエンティストの実際の業務で最もよく使用されるアルゴ...

...

オライリー、2023年ジェネレーティブAIエンタープライズレポートを発表

O’Reilly は、企業における生成 AI の実態について 2,800 人を超える技術専門家を対象...