Ich bin neu zu stoßen Bibliothek und versuche, es in meinem Projekt zu verwenden. Hier ist ein sehr einfaches Codebeispiel. Es kann ohne Probleme kompiliert werden. Allerdings, wenn ich versuche, es zu laufen, es gibt mir eine Fehlermeldung:CMakeLists Problem: Bad_alloc Fehler beim Aufrufen von resize() auf schub :: device_vector
terminate called after throwing an instance of 'thrust::system::detail::bad_alloc'
what(): std::bad_alloc: unknown error
zusammen mit einer Warnung:
nvlink warning : SM Arch ('sm_20') not found in ...
Das Projekt kann mit den beiden folgenden Dateien wiedergegeben werden.
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")
Nach einigen Tests, ist es offensichtlich, dass, wenn die Zeile "gesetzt (CUDA_SEPARABLE_COMPILATION ON)" entfernt worden ist, das Programm läuft problemlos . Aber ich brauche wirklich eine trennbare Kompilierung, die für mein Projekt aktiviert ist.
Jede Hilfe oder Hinweis wäre willkommen.
UPDATE:
Angefordert von @RobertCrovella, hier sind einige weitere Infos.
Die CUDA-Version ist 7.5, die auf UBUNTU 14.04 mit GTX980 neu installiert wird. Ich habe danach die Thrust-Bibliothek nicht aktualisiert.
Das folgende ist der tatsächliche Befehl, der von CMake generiert wird, indem "make VERBOSE = 1" verwendet.
CMake script with separable compilation
CMake script without separable compilation
UPDATE 2:
Der gleiche Fehler von @merelyMark bestätigt wird. Da sowohl der Code als auch die CMakeLists-Datei extrem einfach sind, ist es möglich, dass dies ein Bug in Thrust/CUDA ist? [EDIT] Nr
UPDATE 3:
von @RobertCrovella Weist darauf hin, Schub Bibliothek arbeitet gut mit dem richtigen cmake comands. Nun die Frage: Wie kann ich diese Befehle mit CMakeLists erzeugen?
was von cmake erzeugt werden, um die tatsächliche Kompilierung Befehle? Welche CUDA-Version verwendest du? Haben Sie die Schubversion überhaupt aktualisiert? –
@RobertCrovella Danke für Ihre Nachfrage. Ich habe die von Ihnen angeforderten Informationen auf dem Hauptpost aktualisiert. – Maverobot
Die von Ihnen angezeigten Befehle generieren in CUDA keinen verschiebbaren Gerätecode. Sind Sie sicher, dass ein CMake-Skript mit 'CUDA_SEPARABLE_COMPILATION ON' verwendet wird? –