同時実行ランタイム

C++ の同時実行ランタイムにより、信頼性が高く、スケーラブルで、応答性の高い並行アプリケーションを作成できます。 このフレームワークでは抽象のレベルが引き上げられるので、同時実行に関連するインフラストラクチャの詳細を管理する必要はありません。 また、アプリケーションのサービスの品質への要求を満たすスケジューリング ポリシーを指定するためにも使用できます。 同時実行ランタイムを初めて使用する場合に役立つ情報が記載されている次の各ドキュメントを活用してください。

リファレンス ドキュメントについては、「参照 (同時実行ランタイム)」を参照してください。

ヒント

同時実行ランタイムは C++11 機能に大きく依存しており、最新の C++ のスタイルが採用されています。詳細については、「C++ へようこそ (Modern C++)」を参照してください。

同時実行ランタイムの機能を選択する

同時実行ランタイムの概要

同時実行ランタイムが重要である理由とその主要機能について説明しています。

同時実行ランタイムとその他の同時実行モデルの比較

各自のアプリケーション要件に最も合った同時実行モデルを使用できるように、同時実行ランタイムと他の同時実行モデル (Windows スレッド プールや OpenMP など) の違いについて説明しています。

OpenMP から同時実行ランタイムへの移行

OpenMP と同時実行ランタイムの違いについて説明し、既存の OpenMP コードから同時実行ランタイムの使用に移行する方法の例を示します。

並列パターン ライブラリ (PPL)

並列ループ、タスク、および並列コンテナーを提供する PPL について説明します。

非同期エージェント ライブラリ

非同期エージェントとメッセージ パッシングを使用して、アプリケーションにデータ フローおよびパイプライン処理タスクを簡単に組み込む方法について説明しています。

タスク スケジューラ (同時実行ランタイム)

同時実行ランタイムを使用するデスクトップ アプリケーションのパフォーマンスを細かく調整できるタスク スケジューラについて説明します。

PPL でのタスクの並列処理

タスクの並列化 (同時実行ランタイム)

方法: 並列呼び出しを使用して並列並べ替えルーチンを記述する

方法: 並列呼び出しを使用して並列操作を実行する

方法: 遅延後に完了するタスクを作成する

非同期コードを記述し、並列処理を分解するために役立つ、タスク グループとタスクについて説明します。

チュートリアル: フューチャの実装

同時実行ランタイムの機能をまとめて、より多くの処理を行う方法を示します。

チュートリアル: ユーザー インターフェイス スレッドからの処理の除去

MFC アプリケーションの UI スレッドによって実行される処理をワーカー スレッドへ移動する方法を示します。

並列パターン ライブラリに関するベスト プラクティス

同時実行ランタイムに関する全般的なベスト プラクティス

PPL の使用上のヒントとベスト プラクティスを提供します。

PPL でのデータの並列処理

並列アルゴリズム

方法: parallel_for ループを記述する

方法: parallel_for_each ループを記述する

方法: マップ操作と縮小操作を並列実行する

parallel_forparallel_for_eachparallel_invoke および他の並列アルゴリズムについて説明します。 データの収集を含むデータの並列化の問題を解決するには、並列アルゴリズムを使用します。

並列コンテナーと並列オブジェクト

方法: 並列コンテナーを使用して効率を向上させる

方法: combinable を使用してパフォーマンスを向上させる

方法: combinable を使用して集合を結合する

combinable クラス、および concurrent_vectorconcurrent_queueconcurrent_unordered_map および他の並列コンテナーについて説明します。 要素へのスレッドセーフなアクセスを提供するコンテナーを必要とする場合には、並列コンテナーと並列オブジェクトを使用します。

並列パターン ライブラリに関するベスト プラクティス

同時実行ランタイムに関する全般的なベスト プラクティス

PPL の使用上のヒントとベスト プラクティスを提供します。

タスクと並列アルゴリズムの取り消し

PPL における取り消し処理

開始の方法やキャンセル要求への応答の方法など、PPL でのキャンセル処理の役割について説明します。

方法: キャンセル処理を使用して並列ループを中断する

方法: 例外処理を使用して並列ループを中断する

データ並列処理を取り消すための 2 とおりの方法を示します。

Windows ストア アプリ

C++ における Windows ストア アプリ用の非同期操作の作成

同時実行ランタイムを使用して Windows ストア アプリケーションの非同期操作を生成する場合に注意する重要な点について説明します。

チュートリアル: タスクおよび XML HTTP 要求を使用した接続

PPL タスクを IXMLHTTPRequest2 および IXMLHTTPRequest2Callback インターフェイスとまとめて、HTTP GET および POST 要求を Windows ストア アプリケーションの Web サービスに送信する方法について説明します。

Windows Store app samples

ダウンロード可能な Windows 8 のコード サンプルおよびデモ アプリケーションが含まれます。 C++ のサンプルでは、UX の応答性を保つためにバックグラウンドでデータを処理する PPL のタスクなど、同時実行ランタイムの機能を使用します。

非同期エージェント ライブラリでのデータ フロー プログラミング

非同期エージェント

非同期メッセージ ブロック

メッセージ パッシング関数

方法: さまざまなプロデューサー/コンシューマー パターンを実装する

方法: call クラスおよび transformer クラスに処理関数を提供する

方法: データ パイプラインでトランスフォーマーを使用する

方法: 完了したタスクから選択する

方法: メッセージを定期的に送信する

方法: メッセージ ブロック フィルターを使用する

非同期エージェント、メッセージ ブロック、および同時実行ランタイムでデータ フローの操作を実行するためのビルド ブロックであるメッセージ パッシング関数について説明します。

チュートリアル: エージェント ベースのアプリケーションの作成

チュートリアル: データフロー エージェントの作成

基本的なエージェント ベースのアプリケーションの作成方法を示します。

チュートリアル: イメージ処理ネットワークの作成

イメージ処理を実行する非同期メッセージ ブロックのネットワークを作成する方法を示します。

チュートリアル: join を使用したデッドロックの防止

同時実行ランタイムを使用してアプリケーションでデッドロックを防止する方法について、"食事する哲学者の問題" を使用して説明します。

チュートリアル: カスタム メッセージ ブロックの作成

受信メッセージを優先順位に従って並べるカスタム メッセージ ブロックの型を作成する方法について説明します。

非同期エージェント ライブラリに関するベスト プラクティス

同時実行ランタイムに関する全般的なベスト プラクティス

エージェントの使用上のヒントとベスト プラクティスを提供します。

例外処理とデバッグ

同時実行ランタイムでの例外処理

同時実行ランタイムで例外を使用する方法について説明します。

並列診断ツール (同時実行ランタイム)

アプリケーションを微調整し、同時実行ランタイムを最も効果的に使用できるようにする方法について説明しています。

パフォーマンスの調整

並列診断ツール (同時実行ランタイム)

アプリケーションを微調整し、同時実行ランタイムを最も効果的に使用できるようにする方法について説明しています。

スケジューラ インスタンス

方法: スケジューラ インスタンスを管理する

スケジューラ ポリシー

方法: 特定のスケジューラ ポリシーを指定する

方法: 特定のスケジューラ ポリシーを使用するエージェントを作成する

スケジューラ インスタンスを使用してスケジューラ ポリシーを管理する方法を示します。 デスクトップ アプリケーションの場合、スケジューラ ポリシーを使って、特定の種類の作業負荷と特定の規則を関連付けることができます。 たとえば、昇格したスレッド優先順位で一部のタスクを実行するようにスケジューラ インスタンスを 1 つ作成し、他のタスクについては既定のスケジューラを使用して通常のスレッド優先順位で実行することができます。

スケジュール グループ

方法: スケジュール グループを使用して実行順序に影響を与える

スケジュール グループを使用して、関連するタスクの関係付け (グループ化) を行う方法を説明します。 たとえば、関連するタスクが同一プロセッサ ノードでの実行によって恩恵を受ける場合などには、タスク間で高いレベルの局所性が求められます。

軽量タスク

負荷分散や取り消しを必要としない作業を作成する場合に、軽量タスクがどのように役立つかを説明します。また既存のコードを改変して同時実行ランタイムと使用する場合にも、軽量タスクが有用であることを説明します。

コンテキスト

方法: Context クラスを使用して協調セマフォを実装する

方法: オーバーサブスクリプションを使用して待機時間を短縮する

同時実行ランタイムによって管理されるスレッドの動作を制御する方法について説明します。

メモリ管理関数

方法: Alloc および Free を使用してメモリ パフォーマンスを改善する

ここでは、同時実行ランタイムに用意されているメモリ管理関数について説明します。これらの関数を使用すると、同時実行方式でメモリの割り当てと解放を行うことができます。

その他のリソース

Hilo での非同期プログラミング パターンとヒント (C++ と XAML を使った Windows ストア アプリ)

C++ および XAML を使用した Windows ストア アプリケーションである Hilo で、同時実行ランタイムを使用して非同期操作を実行する方法について学習します。

Visual Studio 2010 での同時実行ランタイムと並列パターン ライブラリのコード サンプル

同時実行ランタイムの例を示すサンプル アプリケーションおよびユーティリティを提供します。

ネイティブ コードでの並列プログラミング ブログ

同時実行ランタイムでの並列プログラミングに関する詳細なブログ記事を別途紹介しています。

C++ とネイティブ コードでの並列コンピューティング フォーラム

同時実行ランタイムに関するコミュニティ ディスカッションに参加できます。

.NET Framework の並列プログラミング

.NET Framework に用意されている並列プログラミング モデルについて説明しています。

参照

その他の技術情報

参照 (同時実行ランタイム)