рдпрд╣ рдЖрд▓реЗрдЦ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рдЗрдВрдЯреЗрд▓ рдереНрд░реЗрдбрд┐рдВрдЧ рдмрд┐рд▓реНрдбрд┐рдВрдЧ рдмреНрд▓реЙрдХреНрд╕ (рдЗрдВрдЯреЗрд▓ рдЯреАрдмреАрдмреА) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рд╕рд░рд▓ рд╡рд┐рдВрдбреЛрдЬ рд╕реНрдЯреЛрд░ рдРрдк рдХреИрд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛рдПред
рдореЗрд░реА рдкрд┐рдЫрд▓реА
рд╡рд┐рдВрдбреЛрдЬ 8 рдкреЛрд╕реНрдЯ
: рдЗрдВрдЯреЗрд▓ рдереНрд░реЗрдбрд┐рдВрдЧ рдмрд┐рд▓реНрдбрд┐рдВрдЧ рдмреНрд▓реЙрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╡рд┐рдВрдбреЛрдЬ рд╕реНрдЯреЛрд░ рдХреЗ рд▓рд┐рдП рдмрд╣реБ-рдереНрд░реЗрдбреЗрдб рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓рд┐рдЦрдирд╛ рд╡рд┐рдВрдбреЛрдЬ рд╕реНрдЯреЛрд░ рдХреЗ рд▓рд┐рдП рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдкреНрд░рдпреЛрдЧрд╛рддреНрдордХ рд╕рдорд░реНрдерди рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИред рдЗрдВрдЯреЗрд▓ рдЯреАрдмреАрдмреА 4.1 рдХреЗ рд▓рд┐рдП рдЕрдкрдбреЗрдЯ 3, рд╕рд╛рде рд╣реА рд╕рд╛рде рд╕реНрдерд┐рд░ рд░рд┐рд▓реАрдЬ tbb41_20130314oss, рдРрд╕реЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЧрддрд┐рд╢реАрд▓ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╢рд╛рдорд┐рд▓ рд╣реИрдВред
рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП,
рд╡рд┐рдЬрд╝реБрдЕрд▓ C ++> рд╡рд┐рдВрдбреЛрдЬ рд╕реНрдЯреЛрд░ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдирдпрд╛
рдмреНрд▓реИрдВрдХ рдРрдк (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); };
рдлрд┐рд░ рдЗрди рдИрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓рд░ рдореЗрдВ 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 рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВ
рд╡рд┐рдЬрд╝реБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ,
рдкреНрд░реЛрдЬреЗрдХреНрдЯ> рдкреНрд░реЙрдкрд░реНрдЯреАрдЬрд╝> рдЗрдВрдЯреЗрд▓ рдкрд░рдлреЙрд░реНрдореЗрдВрд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реАрдЬрд╝ рдореЗрдВ , рд╕реЗрдЯ
рдЯреАрдмреАрдмреА рдХреЛ
рд╣рд╛рдВ рдореЗрдВ рд╕реЗрдЯ
рдХрд░реЗрдВ :

рдпрджрд┐ рдЖрдк рдПрдХ рд╕реНрдерд┐рд░ рд░рд┐рд▓реАрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВ: <TBB_folder> рдЬреЛрдбрд╝реЗрдВ / рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ
рдЕрддрд┐рд░рд┐рдХреНрдд рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛рдПрдБ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдЧреБрдгреЛрдВ рдХреЛ
рд╢рд╛рдорд┐рд▓ рдХрд░реЗрдВ рдФрд░ рд╡рд╣ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдЬреЛрдбрд╝реЗрдВ рдЬрд╣рд╛рдВ tbb.lib рд▓рд╛рдЗрдмреНрд░реЗрд░реА
рдЕрддрд┐рд░рд┐рдХреНрдд рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛рдПрдБ рдореЗрдВ рд╣реИ ред
рдлрд┐рд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрдВрдЯреЗрдирд░ рдореЗрдВ tbb.dll рдФрд░ tbbmalloc.dll рдбрд╛рдпрдиреЗрдорд┐рдХ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдЬреЛрдбрд╝реЗрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ
рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ> рдореМрдЬреВрджрд╛ рдЖрдЗрдЯрдо рдЬреЛрдбрд╝реЗрдВ ...

рдФрд░
рд╕рд╛рдордЧреНрд░реА рд╕рдВрдкрддреНрддрд┐ рдХреЛ
рд╣рд╛рдВ рдореЗрдВ рд╕реЗрдЯ рдХрд░реЗрдВред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрдВрдЯреЗрдирд░ (AppX) рдореЗрдВ рдХреЙрдкреА рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдФрд░ рдлрд┐рд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рдпрд╛ рдмрд╛рдж рдореЗрдВ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рд╡рд╣ рд╕рдм рд╣реИ! рд╡рд┐рдВрдбреЛрдЬ рд╕реНрдЯреЛрд░ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд░рд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рддреИрдпрд╛рд░ рд╣реИ рдФрд░ рдЗрдВрдЯреЗрд▓ рдереНрд░реЗрдбрд┐рдВрдЧ рдмрд┐рд▓реНрдбрд┐рдВрдЧ рдмреНрд▓реЙрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдорд▓реНрдЯреА-рдереНрд░реЗрдбреЗрдб рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рдПрдХ рдЕрдЪреНрдЫреА рд╢реБрд░реБрдЖрдд рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред