Как вызвать функцию boost :: compute, созданную макросом BOOST_COMPUTE_FUNCTION с несколькими входами? - PullRequest
0 голосов
/ 26 февраля 2020

Во-первых, я создаю BOOST_COMPUTE_FUNCTION следующим образом

BOOST_COMPUTE_FUNCTION(boost::compute::float_, add,
        (boost::compute::float_ values0),
      {
          return values0 + 9;
      }
);

Я обнаружил, что g ++ дает мне неправильный ответ, когда я его вызываю, мои коды вызывающих функций следующие:

    boost::compute::device device = boost::compute::system::default_device();
    boost::compute::context context(device);
    boost::compute::command_queue queue(context, device);
    boost::compute::vector<boost::compute::float_> Vector(2, context);
    float values0a[2]{3,8};
    boost::compute::copy(
            reinterpret_cast<boost::compute::float_ *>(values0a),
            reinterpret_cast<boost::compute::float_ *>(values0a) + 2,
            Vector.begin(),
            queue
    );
    boost::compute::vector<boost::compute::float_> output(2, context);
    boost::compute::transform(Vector.begin(), Vector.end(), output.begin(), add, queue);
    cout<<output[0]<<"  "<<output[1];

I получить результат 0 0

во-вторых, когда я создаю BOOST_COMPUTE_FUNCTION, как это, я не знаю, как его вызвать:

    BOOST_COMPUTE_FUNCTION(boost::compute::float_, add,
            (boost::compute::float_ values0,boost::compute::float_ values1),
          {
              return values0 + values1;
          }
    );
    boost::compute::vector<boost::compute::float_> Vector(2, context);
    boost::compute::vector<boost::compute::float_> Vector2(2, context);
    float values0a[2]{3,8};
    float values1a[2]{7,12};
    boost::compute::copy(
            reinterpret_cast<boost::compute::float_ *>(values0a),
            reinterpret_cast<boost::compute::float_ *>(values0a) + 2,
            Vector.begin(),
            queue
    );
    boost::compute::copy(
            reinterpret_cast<boost::compute::float_ *>(values1a),
            reinterpret_cast<boost::compute::float_ *>(values1a) + 2,
            Vector2.begin(),
            queue
    );
    boost::compute::vector<boost::compute::float_> output(2, context);
...