Intel Threading Building Blocksを使用したWindowsストア用のマルチスレッドアプリケーションの作成-DLLを使用

この記事では、Intel Threading Building Blocks(Intel TBB)を使用して簡単なWindowsストアアプリを構築する方法について説明します。



私の以前のWindows 8の投稿:Intel Threading Building Blocksを使用してWindowsストアのマルチスレッドアプリケーションを作成することは、Windowsストアのアプリケーションの実験的なサポートについて説明しています。 Intel TBB 4.1のアップデート3、および安定版リリースtbb41_20130314ossには、そのようなアプリケーション用の動的ライブラリが含まれています。



単純なアプリケーションを作成するには、 Visual C ++> Windowsストアテンプレートを使用して、新しい空のアプリ(XAML)プロジェクトを作成します。 この記事では、プロジェクト名tbbSample0321を使用しています。



メインページ(tbbSample0321.MainPageクラス)にいくつかのボタンを追加します。 この追加後、XAMLページファイルは次のようになります。



<Page x:Class="tbbSample0321.MainPage" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="using:tbbSample0321" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d"> <Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}"> <Button Name="SR" Margin="167,262,0,406" Height="100" Width="300" Content="Press to run Simple Reduction" Click="SR_Click"></Button> <Button Name="DR" Margin="559,262,0,406" Height="100" Width="300" Content="Press to run Determenistic Reduction" Click="DR_Click"></Button> </Grid> </Page>
      
      







メインページのヘッダーファイル(MainPage.xaml.h)に、ボタンクリックを処理するメソッドの宣言を追加します。

 #pragma once #include "MainPage.gh" namespace tbbSample0321 { public ref class MainPage sealed { public: MainPage(); protected: virtual void OnNavigatedTo(Windows::UI::Xaml::Navigation::NavigationEventArgs^ e) override; private: void SR_Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e); void DR_Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e); };
      
      





次に、これらのイベントハンドラーにインテルTBBライブラリー関数呼び出しを追加します。 例として、削減(tbb :: parallel_reduce)および決定論的削減(tbb :: parallel_deterministic_reduce)アルゴリズムを使用します。 これを行うには、MainPage.xaml.cppメインページのメインソースに次のコードを追加します。

 #include "tbb/tbb.h" void tbbSample0321::MainPage::SR_Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e) { int N=100000000; float fr = 1.0f/(float)N; float sum = tbb::parallel_reduce( tbb::blocked_range<int>(0,N), 0.0f, [=](const tbb::blocked_range<int>& r, float sum)->float { for( int i=r.begin(); i!=r.end(); ++i ) sum += fr; return sum; }, []( float x, float y )->float { return x+y; } ); SR->Content="Press to run Simple ReductionnThe answer is " + sum.ToString(); } void tbbSample0321::MainPage::DR_Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e) { int N=100000000; float fr = 1.0f/(float)N; float sum = tbb::parallel_deterministic_reduce( tbb::blocked_range<int>(0,N), 0.0f, [=](const tbb::blocked_range<int>& r, float sum)->float { for( int i=r.begin(); i!=r.end(); ++i ) sum += fr; return sum; }, []( float x, float y )->float { return x+y; } ); DR->Content="Press to run Deterministic ReductionnThe answer is " + sum.ToString(); }
      
      





次に、プロジェクトのプロパティページでIntel TBBを構成します



Visual Studioの[プロジェクト]> [プロパティ]> [Intel Performance Libraries]で[ TBB使用]を[ はい]に設定します





安定版リリースを使用している場合は、プロジェクトを手動で構成します。<TBB_folder> / includeフォルダーをAdditional Include Directoriesプロジェクトプロパティに追加し、tbb.libライブラリが存在するディレクトリをAdditional Library Directoriesに追加します



次に、tbb.dllおよびtbbmalloc.dll動的ライブラリをアプリケーションコンテナに追加します。 これを行うには、 [プロジェクト]> [既存項目の追加 ...]を使用してファイルをプロジェクトに追加します。





ContentプロパティをYesに設定します。 この場合、ファイルはアプリケーションコンテナー(AppX)にコピーされ、アプリケーションの起動時またはそれ以降にダウンロードできます。





以上です! Windowsストア用の簡単なアプリケーションの準備ができているので、Intel Threading Building Blocksを使用して、より複雑なマルチスレッドアプリケーションを作成するための良いスタートになります。



All Articles