#c #cuda #thrust
#c #cuda #thrust
Вопрос:
Я пытаюсь использовать min_element для массива структур, но я просто не могу определить двоичную функцию для этой операции.
Я хотел бы определить эту структуру неявно, без , но
Это нормально? Я перепробовал почти все, но, похоже, ничего не работает.
struct pred : public binary_function <bool , float3 , float3>
{
bool operator () ( const float3 a, const float3 b)
{
return a.x > b.x;
}
}
вместо этого я получаю странные ошибки, которые я неправильно реализую, и возникают проблемы с перегрузкой одного из типов, которые я точно не знаю.
Спасибо за вашу помощь.
Мне просто нужен пример для рабочей MIN_ELEMENT
функции с принятием двоичного предиката.
Еще раз спасибо!
Комментарии:
1. Трудно ответить на ваш вопрос, если вы не сообщите нам, какие ошибки вы получаете. Кроме того, порядок аргументов шаблона неверен, тип результата должен быть последним.
2. Эй, Иоахим, я опубликую подробный список ошибок сразу после возвращения с работы, но я считаю, что основной проблемой, о которой вы упомянули, является тип результата, в течение нескольких часов я пытался использовать первый аргумент в качестве результата, а не последнего . так что это может быть то, что все испортило. я опубликую обновленное сообщение, если оно сработает.
Ответ №1:
Похоже, у вас есть аргументы шаблона для binary_function в неправильном порядке. Возвращаемый тип следует за типами аргументов, а не наоборот. С моей точки зрения, двоичный предикат для выполнения сравнения, которое вы ищете, должен выглядеть примерно так (покупатель остерегается, никогда не был рядом с компилятором):
struct pred: public binary_function<float3,float3,bool>
{
__device__ bool operator()(const float3 amp;a, const float3 amp;a) const
{
return a.x > b.x;
}
}
Комментарии:
1. Или вы могли бы просто
binary_function
полностью отказаться.min_element
в этом нет необходимости.2. эй, ребята, я попробовал, но вместо того, чтобы найти элемент min, он обнуляет большую часть моего массива..
3. Эй, Барт, я надеюсь, я принял это. ну, этот предикат не сработал. вместо этого я переключил весь свой float3 * arr на float * … не удалось выяснить причину… в любом случае спасибо 🙂