Процедура inclusive_scan из CUDA Thrust не работает с вектором устройства из поплавков

Я пытаюсь вычислить сумму префикса на месте для device_vector из библиотеки Thrust. Следующий фрагмент не работает:

#include "cuda_runtime.h"
#include "device_launch_parameters.h"

#include <iostream>
#include <stdio.h>
#include <thrust/scan.h>
#include <thrust/device_vector.h>

int main()
{
    thrust::device_vector<float> vector(4);
    vector[0] = 1.0;
    vector[1] = -3.0;
    vector[2] = 4.0;
    vector[3] = 5.0;

    thrust::inclusive_scan(vector.begin(), vector.end(), vector.begin());
    thrust::host_vector<float> h_vector(vector.begin(), vector.end());

    for (size_t i = 0; i < 4; ++i) {
        std::cout << h_vector[i] << std::endl;
    }
    return 0;
}

Он выдает какое-то исключение в строке с вызовом inclusive_scan. Что я делаю неправильно?


person AndrewShulaev    schedule 01.06.2014    source источник
comment
Я предполагаю, что сканирование требует, чтобы длина вектора была >2. Что произойдет, если вы добавите пару дополнительных элементов? (Предполагая, что у вас действительно есть работающая установка CUDA...)   -  person talonmies    schedule 01.06.2014
comment
@talonmies Нет. Добавил пару элементов, все еще не работает (изменил мой вопрос, чтобы отразить это редактирование). Что касается рабочей установки CUDA - код проекта шаблона, который суммирует два вектора, работает.   -  person AndrewShulaev    schedule 01.06.2014
comment
Код, который у вас есть в вашем вопросе, работает, как и ожидалось, для меня. Я повторю свой вопрос о том, чтобы убедиться, что у вас есть рабочая установка CUDA. Если я не могу воспроизвести вашу проблему, я не могу сказать вам, что может быть не так, извините. На какой хост-платформе и версии CUDA вы это используете и как вы компилируете код?   -  person talonmies    schedule 01.06.2014
comment
@talonmies У меня есть CUDA v5.5, работающий из Visual Studio 2012 Professional. Если вы укажете, как я могу предоставить более полезную диагностическую информацию, я с радостью это сделаю.   -  person AndrewShulaev    schedule 01.06.2014
comment
вы компилируете проект выпуска или компилируете проект отладки в Visual Studio? При компиляции отладочного проекта добавляется переключатель -G, и коды отладки могут плохо работать с ним . В связи с этим может помочь, если вы определите версии cuda и тяги, которые вы используете, и сможете ли другие коды (например, коды примеров cuda) скомпилировать и правильно запустить на вашей платформе. При компиляции проекта отладки попробуйте переключиться на проект выпуска и посмотрите, исчезнет ли проблема.   -  person Robert Crovella    schedule 01.06.2014
comment
@RobertCrovella Да, я компилирую из проекта отладки, и, согласно выходным данным вкладки «Сборка», он компилируется с ключом -G. Спасибо за предложение, я буду исследовать это дальше.   -  person AndrewShulaev    schedule 01.06.2014