Написание многопоточных приложений для магазина Windows с помощью Intel Threading Building Blocks — теперь с DLL

от автора

Эта статья описывает, как построить простое приложение для магазина Windows используя Intel® Threading Building Blocks (Intel® TBB).

Мой предыдущий пост Windows 8: Написание многопоточных приложений для магазина Windows с помощью Intel® Threading Building Blocks описывает экспериментальную поддержку для приложений для магазина Windows. Обновление 3 для Intel TBB 4.1, так же как стабильный релиз tbb41_20130314oss содержит динамические библиотеки для таких приложений.

Для создания простого приложения создайте новый проект Blank App (XAML), используя шаблон Visual C++> Windows Store. В статье используется имя проекта tbbSample0321.

Добавьте пару кнопок для основную страницу (tbbSample0321.MainPage class). После этого добавления 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.g.h" 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);   }; 

Затем добавьте вызовы функций библиотеки Intel 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, Project > Properties > Intel Performance Libraries, установите Use TBB в Yes:

Если Вы используете стабильный релиз, то сконфигурируйте проект вручную: добавьте папку <TBB_folder>/include в свойства проекта Additional Include Directories и добавьте каталог, где лежит библиотека tbb.lib в Additional Library Directories.

Затем добавьте динамические библиотеки tbb.dll и tbbmalloc.dll в контейнер приложения. Для этого добавьте файлы в проект через Project> Add Existing Item

и установите свойство Content в Yes. В этом случае файлы будут скопированы в контейнер приложения (AppX) и затем могут быть загружены во время старта приложения или позже.

Вот и всё! Простое приложение для магазина Windows готово и это должно быть хорошим стартом для написания более сложных многопоточных приложений используя Intel® Threading Building Blocks.

ссылка на оригинал статьи http://habrahabr.ru/company/intel/blog/175121/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *