Мой предыдущий пост 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/
Добавить комментарий