TBB учебник / документация для распараллеливания моего кода?

Я нахожу библиотеку Intel Thread Building Blocks немного запутанной. Например, я хочу распараллелить следующие вычисления с использованием TBB:

int CountNegatives(std::vector<Trigraph> input)
{
int count = 0;
for(int i = 0; i< input.size(); i++)
{
if(input[i].VisibleFrom(viewPoint))
{
count++;
}
}
return count;
}

Я понимаю, что вы должны использовать operator() с классом, чтобы сделать это в TBB; это правда? Я хотел бы прочитать какое-нибудь «учебное пособие для начинающих» по TBB, чтобы помочь мне понять это, но, похоже, никаких учебных пособий для новичков вокруг не существует.

Можете ли вы помочь мне применить TBB к этому вычислению хотя бы?

2

Решение

TBB имеет справочный справочный документ это довольно полезно для начала. С помощью документ за parallel_forДовольно просто преобразовать ваш пример в использование parallel_for. Ниже приведен пример кода. Это не 100%, но вы можете понять. Ссылка выше содержит примеры для некоторых более интересных функций.

#include <tbb/parallel_for.h>
#include <tbb/atomic.h>
#include <iostream>
#include <vector>

/**
* To be used with tbb::parallel_for, this increments count
* if the value at the supplied index is zero.
*/
class ZeroCounter
{
public:
ZeroCounter(std::vector<int> * vec, tbb::atomic<int> * count) :
vec(vec),
count(count)
{ }

void operator()(int index) const
{
if((*vec)[index] == 0)
++(*count);
}

std::vector<int> * vec;
tbb::atomic<int> * count;
};

int main()
{
// Create a vector and fill it with sample values
std::vector<int> a;
a.push_back(0);
a.push_back(3);
a.push_back(0);

// Counter to track the number of zeroes
tbb::atomic<int> count;
count = 0;

// Create our function object and execute the parallel_for
ZeroCounter counter(&a, &count);
tbb::parallel_for(size_t(0), a.size(), counter);

std::cout << count << std::endl;
}
5

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]