Android: Intel┬о рдереНрд░реЗрдбрд┐рдВрдЧ рдмрд┐рд▓реНрдбрд┐рдВрдЧ рдмреНрд▓реЙрдХреНрд╕ рдХреЗ рд╕рд╛рде рдорд▓реНрдЯреАрдереНрд░реЗрдбреЗрдб рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓рд┐рдЦрдирд╛

рд╣рд╛рд▓ рд╣реА рдореЗрдВ, рд╣рдордиреЗ рдЗрдВрдЯреЗрд▓ рдереНрд░реЗрдбрд┐рдВрдЧ рдмрд┐рд▓реНрдбрд┐рдВрдЧ рдмреНрд▓реЙрдХреНрд╕ ( рдЗрдВрдЯреЗрд▓ рдЯреАрдмреАрдмреА ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╡рд┐рдВрдбреЛрдЬ рд╕реНрдЯреЛрд░ рдХреЗ рд▓рд┐рдП рдмрд╣реБ-рдереНрд░реЗрдбреЗрдб рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓рд┐рдЦрдиреЗ рдкрд░ рдзреНрдпрд╛рди рджрд┐рдпрд╛ ред рдпрд╣ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рдХреНрд░реЙрд╕-рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдЯреАрдмреАрдмреА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рдЙрдкрдпреЛрдЧ рд╕реЗ рдХрдВрдкреНрдпреВрдЯрд┐рдВрдЧ рд╣рд┐рд╕реНрд╕реЗ рдХреЛ рдЕрдиреНрдп рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдкрд░ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред Android рдмрд╕ "рдЕрдиреНрдп рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ" рдореЗрдВ рд╕реЗ рдПрдХ рдХреЗ рдПрдХ рдЕрдЪреНрдЫреЗ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░реЗрдЧрд╛, рдХрдЯ рдХреЗ рддрд╣рдд рд╡рд┐рд╡рд░рдгред

рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдЬрд╛рд░реА рдЗрдВрдЯреЗрд▓ рдЯреАрдмреАрдмреА рд▓рд╛рдЗрдмреНрд░реЗрд░реА tbb41_20121112oss, рдЬреЛ рд╣рдорд╛рд░реА threadbuildblocks.org рд╡реЗрдмрд╕рд╛рдЗрдЯ рдкрд░ рдбрд╛рдЙрдирд▓реЛрдб рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рд╣реИ, рдиреЗ рдПрдВрдбреНрд░реЙрдЗрдб рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдкреНрд░рдпреЛрдЧрд╛рддреНрдордХ рд╕рдорд░реНрдерди рдЬреЛрдбрд╝рд╛, рдЕрд░реНрдерд╛рддред JNI рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ Android рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рджреЗрд╢реА рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХрд╛ рдирд┐рд░реНрдорд╛рдгред

рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдо Android SDK Tools Rev.21 рдФрд░ Android NDK Rev 8C рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред рд▓реЗрдХрд┐рди рдпрд╣рд╛рдВ рдПрдХ рдЖрд░рдХреНрд╖рдг рдмрдирд╛рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рд╕рд╛рдордЧреНрд░реА рдХреА рддреИрдпрд╛рд░реА рдХреЗ рджреМрд░рд╛рди рдирд┐рдХрд▓рд╛ рдерд╛, рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рдкреНрд░рдпреЛрдЧрд╡рд╛рдж рдФрд░ рдирд┐рд░реНрдорд╛рдг рдиреЗ рд╕реНрд╡рдпрдВ рдЗрд╕ рд░рд┐рд▓реАрдЬ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд┐рдпрд╛ред рдЖрдЙрдЯ рдСрдл рдж рдмреЙрдХреНрд╕ рдХреЗрд╡рд▓ рд▓рд┐рдирдХреНрд╕ рдкрд░ NDK рдХреЗ рддрд╣рдд рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рд╣рдо рдЗрд╕реЗ рдЕрдЧрд▓реЗ рдЕрдкрдбреЗрдЯ рдореЗрдВ рд╕реЗ рдПрдХ рдореЗрдВ рдареАрдХ рдХрд░ рджреЗрдВрдЧреЗред рдореИрдВрдиреЗ рд╡рд┐рдВрдбреЛрдЬ рдХреЗ рд▓рд┐рдП рдереЛрдбрд╝рд╛ рд╕рд╛ рдореЗрдХрдлрд┐рд▓ рджрд╛рдпрд░ рдХрд┐рдпрд╛ рдФрд░ рд╡рд╣рд╛рдВ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд┐рдпрд╛, рд▓реЗрдХрд┐рди рд╕рд╛рджрдЧреА рдХреЗ рд▓рд┐рдП рд╣рдо рдорд╛рди рд▓реЗрдВрдЧреЗ рдХрд┐ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдЦреБрдж рд▓рд┐рдирдХреНрд╕ рдкрд░ рдмрдирд╛рдИ рдЧрдИ рдереА, рдФрд░ рдмрд╛рдХреА рд╕рдм рд╡рд┐рдВрдбреЛрдЬ рдкрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдХреНрд░реЙрд╕-рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдПрдХ рдФрд░ рдлрд╛рдпрджрд╛ рд╣реИред

рддреЛ, рдЗрдВрдЯреЗрд▓ рдЯреАрдмреАрдмреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рд╕рд░рд▓ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрдпрд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдкрд╣рд▓реЗ рдЖрдкрдХреЛ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рдЕрдирдЬрд╝рд┐рдк рдФрд░ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд░рд┐рд▓реАрдЬрд╝ рдХреЗрд╡рд▓ рд╕реНрд░реЛрдд рдореЗрдВ рд╡рд┐рддрд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдпрд╣ рд╕рдордЭрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдПрдирдбреАрдХреЗ рдХреЗ рд▓рд┐рдП рдЙрдЬрд╛рдЧрд░ рдорд╛рд╣реМрд▓ рдХреЗ рд╕рд╛рде рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдкрд░ рдЧреНрдиреВ рдореЗрдХ рд╣реИ, рдЬреЛ рдХрдорд╛рдВрдб рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддрд╛ рд╣реИ

gmake tbb tbbmalloc target=android 

рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреА рддрд░рдл рд╕реЗ, рдЧреНрд░рд╣рдг рдкрд░ рдЬрд╛рдПрдВред рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рд╣рдо рдПрдХ рд╕рд░рд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рддреЗ рд╣реИрдВ рдФрд░, рд╕рд░рд▓рддрд╛ рдХреЗ рд▓рд┐рдП, рдкрд┐рдЫрд▓реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЗрд╕реЗ app1 рдХрд╣рддреЗ рд╣реИрдВ:


рдЧрддрд┐рд╡рд┐рдзрд┐ рдлреБрд▓рд╕реНрдХреНрд░реАрдирдПрдХреНрдЯрд┐рд╡рд┐рдЯреА рдХрд╛ рдЪрдпрди рдХрд░реЗрдВред рдпрд╣ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХрд╛ рдХрд╛рдо рдкреВрд░рд╛ рдХрд░рддрд╛ рд╣реИред рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ Google рд╕реНрдЯреЛрд░ рджреНрд╡рд╛рд░рд╛ com.example * рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛ рд╕реНрд╡рд╛рдЧрдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрд╣ рдареАрдХ рд╣реИред

рдлрд┐рд░ рдореБрдЦреНрдп рдлреНрд░реЗрдо рдореЗрдВ рдХреБрдЫ рдмрдЯрди рдЬреЛрдбрд╝реЗрдВред рдЙрд╕рдХреЗ рдмрд╛рдж, рдореБрдЦреНрдп рдлреНрд░реЗрдо рдХреА XML рдлрд╝рд╛рдЗрд▓ (app1 / Res / рд▓реЗрдЖрдЙрдЯ / activity_fullscreen.xml) рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрд╛рдИ рджреЗрдЧреА

 <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:background="#0099cc" tools:context=".FullscreenActivity" > <TextView android:id="@+id/fullscreen_content" android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center" android:keepScreenOn="true" android:text="@string/dummy_content" android:textColor="#33b5e5" android:textSize="50sp" android:textStyle="bold" /> <FrameLayout android:layout_width="match_parent" android:layout_height="match_parent" android:fitsSystemWindows="true" > <LinearLayout android:id="@+id/fullscreen_content_controls" style="?buttonBarStyle" android:layout_width="match_parent" android:layout_height="74dp" android:layout_gravity="bottom|center_horizontal" android:background="@color/black_overlay" android:orientation="horizontal" tools:ignore="UselessParent" > <Button android:id="@+id/dummy_button1" style="?buttonBarButtonStyle" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="@string/dummy_button1" android:onClick="onClickSR" /> <Button android:id="@+id/dummy_button2" style="?buttonBarButtonStyle" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="@string/dummy_button2" android:onClick="onClickDR" /> </LinearLayout> </FrameLayout> </FrameLayout> 

рдФрд░ рд▓рд╛рдЗрдиреЛрдВ рдХреЗ рд╕рд╛рде рдлрд╛рдЗрд▓ (app1 / Res / рдорд╛рди / strings.xml) рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛:
 <?xml version="1.0" encoding="utf-8"?> <resources> <string name="app_name">Sample</string> <string name="dummy_content">Reduce sample</string> <string name="dummy_button1">Simple Reduce</string> <string name="dummy_button2">Deterministic Reduce</string> </resources> 

рдмрдЯрди рд╣реИрдВрдбрд▓рд░реНрд╕ рднреА рдЬреЛрдбрд╝реЗрдВ
 // JNI functions private native float onClickDRCall(); private native float onClickSRCall(); public void onClickDR(View myView) { TextView tv=(TextView)(this.findViewById(R.id.fullscreen_content)); float res=onClickDRCall(); tv.setText("Result DR is \n" + res); } public void onClickSR(View myView) { TextView tv=(TextView)(this.findViewById(R.id.fullscreen_content)); float res=onClickSRCall(); tv.setText("Result SR is \n" + res); } 

рдФрд░ рдлреБрд▓рд╕реНрдХреНрд░реАрдирдПрдХреНрдЯрд┐рд╡рд┐рдЯреА.рдЬрд╡рд╛ рдореЗрдВ рд▓реЛрдбрд┐рдВрдЧ рд▓рд╛рдЗрдмреНрд░реЗрд░реА
  @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); тАж System.loadLibrary("tbb"); System.loadLibrary("jni-engine"); } 

рдЕрдЧрд░ рд╕рдм рдХреБрдЫ tbb рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рд╕рд╛рде рд╕реНрдкрд╖реНрдЯ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рддреЛ рдЖрдкрдХреЛ jni-engine рдкрд░ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рд░рд╣рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

"рдЬрд╛рдиреА-рдЗрдВрдЬрди" рдПрдХ C ++ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╣реИ рдЬреЛ рдХрдВрдкреНрдпреВрдЯрд┐рдВрдЧ рднрд╛рдЧ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ рдФрд░ JCl рдХреЗ рд▓рд┐рдП JClI рдХреЙрд▓ рдХреЗ рд▓рд┐рдП C- рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░рддрд╛ рд╣реИ () рдФрд░ onClickDRCall ()ред

рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рдЕрдВрджрд░ рд╡рд┐рдХрд╛рд╕ рдХреЗ рдирд┐рдпрдореЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░, 'jni' рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдмрдирд╛рдПрдВ рдФрд░ 3 рдлрд╛рдЗрд▓реЗрдВ рдмрдирд╛рдПрдВ рдЬреЛ рд╣рдорд╛рд░реЗ jni-рдЗрдВрдЬрди рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╣реЛрдВред рдпрд╣ рд╣реИ:
Android.mk (<> рдЙрд╕ рдбреЗрдЯрд╛ рдХреЛ рдмреНрд░реИрдХреЗрдЯ рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдЖрдкрдХреЛ рд╡рд░реНрддрдорд╛рди рдорд╛рдиреЛрдВ рдХреЛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ)
 LOCAL_PATH := $(call my-dir) TBB_PATH := <path_to_the_package> include $(CLEAR_VARS) LOCAL_MODULE := jni-engine LOCAL_SRC_FILES := jni-engine.cpp LOCAL_CFLAGS += -DTBB_USE_GCC_BUILTINS -std=c++11 -I$(TBB_PATH)/include LOCAL_LDLIBS := -ltbb -L./ -L$(TBB_PATH)/<path_to_libtbb_so> include $(BUILD_SHARED_LIBRARY) include $(CLEAR_VARS) LOCAL_MODULE := libtbb LOCAL_SRC_FILES := libtbb.so include $(PREBUILT_SHARED_LIBRARY) 

Application.mk
 APP_ABI := x86 APP_GNUSTL_FORCE_CPP_FEATURES := exceptions rtti APP_STL := system 

JNI-engine.cpp:
 #include <jni.h> #include "tbb/parallel_reduce.h" #include "tbb/blocked_range.h" float SR_Click() { int N=10000000; 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; } ); return sum; } float DR_Click() { int N=10000000; 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; } ); return sum; } extern "C" JNIEXPORT jfloat JNICALL Java_com_example_app1_FullscreenActivity_onClickDRCall(JNIEnv *env, jobject obj) { return DR_Click(); } extern "C" JNIEXPORT jfloat JNICALL Java_com_example_app1_FullscreenActivity_onClickSRCall(JNIEnv *env, jobject obj) { return SR_Click(); } 

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд╣рдо рдкрд┐рдЫрд▓реЗ рдмреНрд▓реЙрдЧ рдХреА рддрд░рд╣ рд╣реА рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред

NDK рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп, рд╡рд╣ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЛ libjni-engine.so рдФрд░ libtbb.so рд╕рд╣рд┐рдд рдЖрд╡рд╢реНрдпрдХ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛рдУрдВ рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИред

рдЕрдм рдЧреНрд░рд╣рдг рдкрд░ рд╡рд╛рдкрд╕ рдЬрд╛рдПрдБ рдФрд░ .apk рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдБред рдЖрд╡реЗрджрди AVD рдпрд╛ рдбрд┐рд╡рд╛рдЗрд╕ рдкрд░ рд╕реНрдерд╛рдкрдирд╛ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реИред рдпрд╣ рдПрд╡реАрдбреА рдкрд░ рдХреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ:



рд╡рд╣ рд╕рдм рд╣реИ! рд╣рдорд╛рд░рд╛ рд╕рд╛рдзрд╛рд░рдг рдЖрд╡реЗрджрди рд▓рд┐рдЦрд╛ рд╣реИ! рдФрд░ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЬрд┐рдиреНрд╣реЛрдВрдиреЗ рдкрд┐рдЫрд▓реЗ рдмреНрд▓реЙрдЧ рдХреЗ рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдерд╛, рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдПрдВрдбреНрд░реЙрдЗрдб рдореЗрдВ рдкреЛрд░реНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред

рдЬреЛ рд▓реЛрдЧ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ, рдЙрдирдХреЗ рд▓рд┐рдП рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ:

рдбрд╛рдЙрдирд▓реЛрдб рдЗрдВрдЯреЗрд▓ рдереНрд░реЗрдбрд┐рдВрдЧ рдмрд┐рд▓реНрдбрд┐рдВрдЧ рдмреНрд▓реЙрдХреНрд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА (рдУрдкрди рд╕реЛрд░реНрд╕ рд╕рдВрд╕реНрдХрд░рдг):
threadingbuildingblocks.org
рдЗрдВрдЯреЗрд▓ рдЯреАрдмреАрдмреА рдХрд╛ рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рд╕рдВрд╕реНрдХрд░рдг (рдХрд╛рд░реНрдпрд╛рддреНрдордХ рд░реВрдк рд╕реЗ рдЕрд▓рдЧ рдирд╣реАрдВ):
software.intel.com/en-us/intel-tbb

рдЗрдВрдЯреЗрд▓ рдЯреАрдмреАрдмреА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдВрдЧреНрд░реЗрдЬреА рдФрд░ рд░реВрд╕реА рдмреНрд▓реЙрдЧ
software.intel.com/en-us/tags/17207
software.intel.com/en-us/tags/17220
рдФрд░, рдмреЗрд╢рдХ, рд╣рдорд╛рд░реЗ рдордВрдЪ,
software.intel.com/en-us/forums/intel-threading-building-blocks

Source: https://habr.com/ru/post/In161527/


All Articles