Как стать автором
Обновить
8
Карма
0
Рейтинг
Mikhail Didur @lucky_rydar

с++ developer

  • Подписчики 1
  • Подписки 2

Boost.Compute или параллельные вычисления на GPU/CPU. Часть 2

Не беспокойтесь, я тестировал код со второго раза. Спасибо, что подметили.

Boost.Compute или параллельные вычисления на GPU/CPU. Часть 2

Я пробовал, что будет с double, во всех тестах как CPU так и GPU в параллеле считают его в два раза дольше чем float

Boost.Compute или параллельные вычисления на GPU/CPU. Часть 2

Что то такое у меня получилось, цикл всё равно приходится использовать, но в теории должно работать быстрее.
auto device = compute::system::default_device(); //тут поменяешь на тот девайс 
//который у тебя процессор
auto context = compute::context(device);
auto queue = compute::command_queue(context, device);
	
vector<float> host_vec = { 1, 2, 3, 4, 5};

compute::vector<float> A(host_vec.begin(), host_vec.end(), queue);
compute::vector<float> B(host_vec.begin(), host_vec.end(), queue);

compute::vector<float> C(host_vec.size(), context);
float temp_res = 0;
float res = 0;

auto B_iter = B.begin();
for (size_t i = 0; i < host_vec.size(); i++)
{
	compute::transform(A.begin(), A.end(), C.begin(), 
        compute::_1 * B_iter.read(queue) /*+ещё какие-то вычисления*/, queue);
	compute::reduce(C.begin(), C.end(), &temp_res, queue);
	res += temp_res;
	B_iter++;
}
cout << res << endl;


UPD: Для большей эффективности можешь вызвать все что в цикле асинхронно.

Boost.Compute или параллельные вычисления на GPU/CPU. Часть 2

Напиши в лс, может, смогу помочь.

Boost.Compute или параллельные вычисления на GPU/CPU. Часть 2

Если кому то что то не понятно, не стесняйтесь писать в лс или в комментарии.

Boost.Compute или параллельные вычисления на GPU/CPU. Часть 2

А что на счёт других алгоритмов? Один из из них работает с такой же разницей в скорости как и сортировка.

Boost.Compute или параллельные вычисления на GPU/CPU. Часть 2

Согласен, это вода, сейчас удалю.

Boost.Compute или параллельные вычисления на GPU/CPU. Часть 2

Добавил больше тестов, возможно дело в том что ЦПУ не такой уж и слабый.

Boost.Compute или параллельные вычисления на GPU/CPU. Часть 2

Скорее всего будет быстрее, а может это только с сортировкой так. Я на CUDA ничего ещё не писал, думаю пришло время что то попробовать. Наверное стоит добавить тесты разных функций.

Boost.Compute или параллельные вычисления на GPU/CPU. Часть 1

Дело в том что в этой либе можно использовать так называемый хостовый вектор(в примерах из оригинальной доки они всегда используются), где будет хранится оригинал данных, но это не обязательно. Лично я использую его только чтоб использовать std::generate, но можно и переписать всё под себя для compute::vector, используя итераторы.

Boost.Compute или параллельные вычисления на GPU/CPU. Часть 1

Уже поправил) Сделаю сравнение работы на разных устройствах в следующей части.

Информация

В рейтинге
Не участвует
Откуда
Украина
Дата рождения
Зарегистрирован
Активность