0 Вопрос: Как использовать функции boost.compute в функторе, который будет использоваться Thrust на графическом процессоре?

вопрос создан в Thu, May 2, 2019 12:00 AM

Я пытаюсь использовать специальную функцию, предоставленную boost.math, в алгоритме тяги.

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

  thrust::device_vector<double> in(1000);
  thrust::device_vector<double> out(1000);

  thrust::transform(in.begin(), in.end(), out.begin(), myfunctor());

где myfunctor() задается

#include <boost/math/special_functions/ellint_1.hpp>
.
.
.
struct myfunctor {
  __host__ __device__
  double operator()(double k) {
    return boost::math::ellint_1(sqrt(k));
  }
};

Я продолжаю получать warning: calling a __host__ function from a __host__ __device__ function is not allowed прямо на линии, где ellint_1 вызывается в функторе.

Я делаю что-то не так или Boost.math не подходит для использования GPGPU (потому что из того, что я прочитал, я определенно думал, что это было)?

    
0
  1. Я не могу проверить или проверить это прямо сейчас, но, возможно, проблема в sqrt.
    2019-05-02 16: 18: 15Z
  2. Boost.compute является помощником для OpenCL . пример , когда NVIDEA Thrust является аналогичным помощником, но для API CUDA . И повысить :: математика - библиотека ЦП.
    2019-05-02 17: 20: 03Z
  3. Итак, я использовал библиотеку процессора в своем коде устройства. Не уверен, как я это пропустил. Я только что выполнил поиск таких специальных функций, доступных для кода устройства, но, похоже, ничего не могу найти. Вы случайно ничего не знаете?
    2019-05-02 17: 50: 56Z
  4. Похоже, вам нужно реализовать полный эллиптический интеграл Legendre первого рода ядром OpenCL или CUDA. Или найдите существующую реализацию GPGPU и используйте ее.
    2019-05-02 18: 06: 06Z
0 ответов                              0                         
источник размещен Вот
Другие вопросы