Pull to refresh
0

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

Reading time 3 min
Views 4.5K
Эта статья описывает, как построить простое приложение для магазина 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.
Tags:
Hubs:
+7
Comments 0
Comments Leave a comment

Articles

Information

Website
www.intel.ru
Registered
Founded
Employees
5,001–10,000 employees
Location
США
Representative
Анастасия Казантаева