Я пытаюсь использовать std :: bind2nd с тягой. У меня есть код, который компилируется с указателем узла, но не с указателем устройства. Я думаю, что они идентичны и должны работать в обоих случаях.using std :: bind2nd with thrust
// this compiles fine
thrust::host_vector<unsigned int> h_vec(nwords);
thrust::host_vector<unsigned int> h_map(nwords);
thrust::host_vector<unsigned int> h_out1(nwords);
thrust::copy_if(h_vec.begin(), h_vec.end(), h_map.begin(), h_out1.begin(),
std::bind2nd(thrust::equal_to<int>(),1));
// this compilation fails with the error below
thrust::device_vector<unsigned int> d_map(nwords);
thrust::device_vector<unsigned int> d_vec(nwords);
thrust::device_vector<unsigned int> d_out1(nwords);
thrust::copy_if(d_vec.begin(), d_vec.end(), d_map.begin(), d_out1.begin(),
std::bind2nd(thrust::equal_to<int>(),1));
Когда я пытаюсь вызвать второй copy_if с bind2nd я получаю ошибку ниже:
/opt/cuda/include/thrust/detail/internal_functional.h(99): warning: calling a
__host__ function from a __host__ __device__ function is not allowed
Есть еще один способ использования адаптеров для бинарных функций в тяге? Я видел, как некоторые люди использовали «thrust :: bind2nd» в примерах в Интернете, но я не могу найти это в любом из наших файлов заголовков.
Используйте выражение-заполнитель 'thrust :: placeholders :: _ 1 == 1' для этой операции вместо того, чтобы пытаться использовать что-то вроде' bind2nd'. –
это также хорошая идея. Спасибо. –