LINUX.ORG.RU

Intel обновил библиотеку для работы с мультиядрами в C++

 , ,


0

0

Intel выпустил новую версию Linux-совместимой, открытой библиотеки для разработки мультиядерного ПО на C++. В версии 2.1 Intel Threading Building Blocks (TBB) улучшена производительность, добавлен портируемый механизм родственных процессов, улучшен планировщик заданий для более легкой разработки GUI, сетевого I/O и искусственного интеллекта.

Анонсированная в прошлом июле под лицензией "GPLv2 с дополнениями", TBB является кросс-платформенной библиотекой, которая служит для повышения производительности C++ приложений на мультиядерный процессорах. Она портирована на GNU/Linux, MacOS X, Windows и Solaris. TBB включает планировщик заданий, аллокатор памяти и счетчик времени, наряду с различными алгоритмами параллелизации, thread-safe контейнерами и примитивами синхронизации.

Также добавлены новые компоненты:

  • tbb_threadabstraction,
  • parallel_do,
  • tbb_allocator,
  • blocked_range3d,
  • recursive_mutex.

>>> Подробности

★☆

Проверено: Shaman007 ()

С GPL?

Таки какая лицензия? По ссылке такая же скупая характерстика "GPL с дополнениями". Можно использовать в свободных проектах?

Camel ★★★★★
()
Ответ на: комментарий от fukazzz

Записал^W Намотал на ус, надо будет глянуть.

JackYF ★★★★
()

интересно а кто то реально проверял насколько оно быстро и оптимизировано получиться, а то программерам из интелла последнее время есть большие претензии

anonymous
()
Ответ на: комментарий от anonymous

использую. были раньше вопросы с гдето на 20й версии они закончились.

ps: мульти-ядрами это да, сильно.

anonymous
()

> для более легкой разработки GUI, сетевого I/O и искусственного интеллекта.

ага, ищо пара версий и искуственный интелект сможет написать любой школьник с лора

anonymous
()
Ответ на: С GPL? от Camel

Разумеется, к GPL можно добавлять только разрешающие эксепшены.

GFORGX ★★★
()

>Intel обновил библиотеку для работы с мульти-ядрами в C++

Не нужно это, потому, что у меня AMD.

anonymous
()

ну что же, будем иметь в виду

jtootf ★★★★★
()
Ответ на: комментарий от anonymous

> Не нужно это, потому, что у меня AMD.

Если у тебя одноядерный AMD, то действительно тебе оно не нужно. Или библиотека рассчитана только на Intel процессоры?

anonymous
()

>для разработки мульти-ядерного ПО

Ну и терминология!

Zenom ★★★
()
Ответ на: комментарий от anonymous

>> для более легкой разработки GUI, сетевого I/O и искусственного интеллекта.

>ага, ищо пара версий и искуственный интелект сможет написать любой школьник с лора

ужос же! неужели достижение автора "саныча" и "гхарика" будет превзойдено? этак и угроза анонимному "сверхразуму" будет нешуточная

black7
()
Ответ на: комментарий от anonymous

>Если у тебя одноядерный AMD, то действительно тебе оно не нужно.

У мну двухъядерный.

>Или библиотека рассчитана только на Intel процессоры?

А чего бы она оптимизила свои либы да компеляторы под продукт конкурента?

anonymous
()
Ответ на: комментарий от anonymous

>>> Она портирована на GNU/Linux, MacOS X, Windows и Solaris.

>>Фря?

>Фря не нужна и в интел это понимают

не скажи. они наверняка понимают то что icc - единственная надежда бсд-шиков на избавление от не-Ъ (GPL-ного) gcc ;)

black7
()
Ответ на: комментарий от anonymous

> Фря не нужна и в интел это понимают

Под FreeBSD есть более ранние версии, в новости про порт 2.1 на FreeBSD ничего не написано :)

phasma ★☆
() автор топика
Ответ на: комментарий от anonymous

И насколько это шустрее оыбчного линуксового API?

anonymous
()

что за безграмотность! надо говорить не "с мульти-ядрами", а "с мульти-корами"!

anonymous
()
Ответ на: комментарий от anonymous

>>Или библиотека рассчитана только на Intel процессоры?

>А чего бы она оптимизила свои либы да компеляторы под продукт конкурента?

Сабж - удобная Ъ++ обертка над обычными нитями, ей пофиг что у тебя AMD. Основное отличие от упомянутого OpenMP - то, что это - либа а не надстройка над языком, соответственно синтаксис не такой удобный, но и возможностей побольше + дебажится imho лучше.

YesSSS ★★★
()
Ответ на: комментарий от YesSSS

04 #include "stdafx.h"
05 #include <iostream>
06 #include "tbb/task_scheduler_init.h"
07 #include "tbb/parallel_for.h"
08 #include "tbb/blocked_range.h"
09 #include "tbb/tick_count.h"
10 using namespace tbb;
11 using namespace std;
12
13 class vector_mult{
14 double *const v1, *const v2; // multiply these vectors
15 double *v3; // put the result here
16 public:
17 // constructor copies the arguments into local storage
18 vector_mult(double *vec1, double *vec2, double *vec3)
19 : v1(vec1), v2(vec2), v3(vec3) { }
20 // overload () so it does a vector multiply
21 void operator() (const blocked_range<size_t> &r) const {
22 for(size_t i=r.begin(); i!=r.end(); i++)
23 v3[i] = v1[i] * v2[i];
24 }
25 };
26
27 const size_t vec_size = 1000000;
28
29 int _tmain(int argc, _TCHAR* argv[])
30 {
31 // allocate storage for vectors
32 double *v1, *v2, *v3;
33 v1 = (double*)malloc(vec_size*sizeof(double));
34 v2 = (double*)malloc(vec_size*sizeof(double));
35 v3 = (double*)malloc(vec_size*sizeof(double));
36
37 // init and multiply vectors serially and time the operation
38 for(size_t i=0; i<vec_size; i++) { v1[i] = v2[i] = v3[i] = i; }
39 tick_count serial_start = tick_count::now();
40 for(size_t i=0; i<vec_size; i++) { v3[i] = v1[i] * v2[i]; }
41 tick_count serial_end = tick_count::now();
42
43 // reinit and multiply the vectors in parallel and time the operation
44 for(size_t i=0; i<vec_size; i++) { v1[i] = v2[i] = v3[i] = i; }
45 task_scheduler_init init;
46 tick_count parallel_start = tick_count::now();
47 parallel_for( blocked_range<size_t>(0,vec_size,1000),
vector_mult(v1,v2,v3) );
48 tick_count parallel_end = tick_count::now();
49
50 // print some of the result vector to make sure it is correct
51 for(size_t i=0; i<10; i++) { cout << v3[i] << endl; }
52
53 // print out the speedup delivered by parallelism
54 cout << "Speedup from parallelism is "
55 << (serial_end - serial_start).seconds()
56 / (parallel_end - parallel_start).seconds() << endl;
57 return 0;
58 }

OpenMP - все ж по-лучше будет

Valeriy_Onuchin ★★
()
Ответ на: комментарий от Valeriy_Onuchin

лучше в смысле кол-ва строк кода или в смысле ускорения? Если в смысле ускорения - то ваш вызов parallel_for соотвествует OpenMP шедулингу dynamic(1000), что в данном примере точно мало.Мне tbb понравился в первую очередь тем, что там напрямую поддерживается(через нее все и реализуется) концепция task-ов(в виде функторов), что imho есть заметно более общий подход к паралеллизму чем тупо for-ы и sections-ы. Хотя afair в OpenMP 3 что-то такое обещают.

YesSSS ★★★
()

оченно творчески перевели "многопоточный". хм :)

p.s. Интел - ненужен. но нужен тэг "иадра Интел" :-)

BasileyOne
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.