2016-05-27 1 views
2

Я новичок в создании библиотеки и пытаюсь использовать ее в своем проекте. Вот очень простой пример кода. Он может быть скомпилирован без каких-либо проблем. Однако, когда я пытаюсь запустить его, он дает мне ошибку:Проблемы с CMakeLists: ошибка bad_alloc при вызове resize() on thrust :: device_vector

terminate called after throwing an instance of 'thrust::system::detail::bad_alloc' 
what(): std::bad_alloc: unknown error 

наряду с предупреждением:

nvlink warning : SM Arch ('sm_20') not found in ... 

Проект может быть воспроизведена с помощью следующих двух файлов.

test.cpp

#include <thrust/device_vector.h> 
int main(){ 
    thrust::device_vector<int> x; 
    x.resize(10); 
} 

CMakeLists.txt

cmake_minimum_required(VERSION 2.8.9) 
project(test_project) 
find_package(CUDA QUIET REQUIRED)                          
list(APPEND CUDA_NVCC_FLAGS "-std=c++11;-arch=compute_52") 
set(CUDA_SEPARABLE_COMPILATION ON) 
cuda_add_executable("cuda_test" "test.cu") 

После некоторого тестирования, то очевидно, что если линия "установлена ​​(CUDA_SEPARABLE_COMPILATION ON)" удаляется, программа работает без проблем , Но мне действительно нужна отдельная компиляция, активированная для моего проекта.

Любая помощь или подсказка будут оценены.

UPDATE:

Запрошено @RobertCrovella, вот еще некоторая информация о.

Версия CUDA - 7.5, которая установлена ​​на UBUNTU 14.04 с GTX980. После этого я не обновлял библиотеку Thrust.

Ниже приведена фактическая команда, созданная cmake, с помощью команды «make VERBOSE = 1».

CMake script with separable compilation

CMake script without separable compilation

ОБНОВЛЕНИЕ 2:

Та же ошибка подтверждается @merelyMark. Поскольку и код, и файл CMakeLists чрезвычайно просты, возможно ли, что это ошибка в Thrust/CUDA? [EDIT] №

ОБНОВЛЕНИЕ 3:

указывал @RobertCrovella, тяга библиотека работает нормально при правильном cmake comands. Теперь вопрос: как я могу сгенерировать эти команды с помощью CMakeLists?

+0

то, что фактические команды компиляции генерируется с помощью CMake? Какую версию CUDA вы используете? Вы обновили версию тяги? –

+0

@RobertCrovella Спасибо за вопрос. Я обновил информацию, которую вы запросили на главной странице. – Maverobot

+1

Команды, которые вы указали, не генерируют код перемещаемого устройства в CUDA. Вы уверены, что использует сценарий CMake с 'CUDA_SEPARABLE_COMPILATION ON'? –

ответ

1

Извинения заранее, у меня недостаточно очков, чтобы добавить комментарий, но я могу подтвердить поведение на моей установке. Это правильно компилируется на моей машине с E5-1650 v3 и Quadro M4000 с CUDA 7.5 и Ubuntu 14.04.3. Я получаю одну ошибку предупреждение:

nvlink warning : SM Arch ('sm_20') not found in ... 

Я могу подтвердить поведение, когда я запускаю его:

./cuda_test 
terminate called after throwing an instance of 'thrust::system::detail::bad_alloc' 
    what(): std::bad_alloc: unknown error 
Aborted (core dumped) 

Я согласен с @RobertCrovella, я не совсем уверен, что вы пытаетесь достичь здесь ,

Here's my VERBOSE output for separable compilation.

Here's my VERBOSE output without separable compilation.

+0

Спасибо за подтверждение. На самом деле у меня тоже такое предупреждение. Но мне по-прежнему нужно дважды проверить, когда я вернусь к коду в понедельник. Затем мой пост будет обновлен. – Maverobot

+0

То, что я пытаюсь выполнить, - это запустить Thrust :: device_vector :: resize() с активированной разделяемой компиляцией. – Maverobot

+1

@RobertCrovella, вероятно, правильно, что это проблема CMake. Вы также должны пометить CMake. Были некоторые проблемы с CMake и разделимой компиляцией. Вот отслежыватель ошибок с 2014 года, который по-прежнему остается открытым. https://cmake.org/Bug/view.php?id=15157 FWIW, я обновил до последнего CMake, и это все еще проблема. – merelyMark

Смежные вопросы