Zum Inhalt

Konfiguration von Visual Studio

Dieses Kapitel beschäftigt sich mit dem Aufsetzen eines CUDA/C++-Projekts in Visual Studio. Voraussetzung hierfür ist, dass Visual Studio (VS) und NVidia CUDA installiert wurden. Für vorliegende Anleitung wurde Visual Studio 2019 und CUDA 11.6 verwendet.

Erstellung des Projekts

Zur Erstellung einer CUDA/C++-Anwendung wird in Visual Studio 2019 unter Neues Projekt erstellen als Projektvorlage "CUDA 11.6 Runtime" ausgewählt. Anschließend ist ein Projektname und ein lokaler Projektordner anzugeben. Aktiviert man hier die Option:

"Platzieren Sie die Projektmappe und das Projektverzeichnis im selben Verzeichnis"

wird im angegebenen lokalen Ordner ein Unterverzeichnis mit dem Projektnamen zur Ablage der Projektdateien angelegt.

Das erzeugte Projekt in dem angegebenen Ordner enthält bereits eine Source-Datei "kernel.cu" als einfaches Beispiel für eine CUDA-Anwendung. Diese Datei kann später für ein eigenes Programm entfernt und durch andere Source- und Header-Dateien ersetzt werden.

VS 2019 verfügt über einen Projektmappen-Explorer: "Ansicht Projektmappen-Explorer". Hier kann u.a. zwischen der Projekt- und der Ordner-Ansicht gewechselt werden.

Bei Bei Rechtsklick auf den Ordnernamen in der Projektansicht öffnet sich ein PopUp-Menü. Mittels Hinzufügen Neuer Ordner können hier z.B. für eine Strukturierung kleinerer Projekte die Unterverzeichnisse "include" und "src" erzeugt werden. In "include" werden die Header-Dateien und in "src" die zugehörigen Source-Dateien abgelegt.

Bei Rechtsklick auf den Projektnamen in der Projektansicht (finde: "ProjektName.sln") öffnet sich ein PopUp-Menü. Unter Eigenschaften findet man den Dialog zur Einstellung der Projekteigenschaften. Für aktuelle CUDA/C++-Programme ist im Regelfall die 64Bit-Konfiguration "X64" auszuwählen. Ferner besteht allgemein die Auswahlmöglichkeit zwischen "Debug" und "Release".

Konfigurationen für Debug und Release

Die Konfigurationen für "Debug" und "Release" können separat und unabhängig voneinander modifiziert werden. Daher ist zu beachten, dass die Änderungen in der verwendeten Konfiguration bzw. in beiden gleichermaßen vorgenommen werden.

Konfiguration der Projekteigenschaften

Folgende Anpassungen in den Projekteigenschaften sind für die jeweis verwendete Konfiguration "Debug" oder "Release" (hier immer "x64") vorgenommen werden:

  1. Allgemein
    • Der C++-Sprachstandard wird auf min. "/std:++17" gesetzt.
    • Der C-Sprachstandard wird auf min. "/std:c17" gesetzt.
  2. VC++-Verzeichnisse
    • Das Feld "Includeverzeichnisse" wird um den oben erzeugten Ordner ".\include" ergänzt. Bei Click auf das Feld erscheint ein Pfeil am rechten Rand. Nach Klick auf den Pfeil erscheint die Option "Bearbeiten...". Darüber erreicht man einen Dialog, in dessen Eingabefenster der hinzuzufügende Ordner (ohne Anführungsstriche) eingegeben werden kann.
    • Das Feld "Quellverzeichnisse" wird um den oben erzeugten Ordner ".src" ergänzt.
    • Sind externe Bibliotheken (".lib"-Dateien) sind deren Ablageordner zu den "Bibliotheksverzeichnissen" sowie deren Header-Dateien zu den "Externen Includeverzeichnissen" hinzuzufügen.
  3. CUDA/C++
    1. Common
      • Die Option "Generate Relocatable Device Code" ist zu aktivieren.
      • Unter "CUDA Runtime" sollte das Einbinden der statischen Library aktiviert sein.
      • Die "Target Machine Platform" ist auf *64-bit" eingestellt.
    2. Device
      • Im Feld "Code Generation" kann die Konfiguration an die verfügbare GPU angepasst werden. Für RTX2080-Grafikkarten kann z.B. in den dort verwendeten Flags die standardmäßig eingestellte "52" durch "75" ersetzt werden.
        Beachte: Bei Anpassung an neuere GPU-Generationen kann es zu Problemen bei älteren GPUs kommen.

Umgang mit Source- und Header-Dateien

Header- und Source-Dateien werden üblicherweise in Projektordner bzw. in seinen Unterverzeichnissen, hier insbesondere "include" und "src" abgelegt. Weitere Ablageorte, z.B. von externen Header-Dateien, müssen in den Projekteigenschaften bzw. Konfigurationen angegeben werden (siehe oben).

In der Ordneransicht des Projektmappen-Explorers können über das PopUp-Menü mittels "Hinzufügen Neue Datei" neue Header- oder Source-Dateien im markierten Verzeichnis erzeugt werden. Um sie in der Projektansicht sehen und bearbeiten zu können, sind sie dort im PopUp-Menü mittels "Hinzufügen Vorhandenes Element" hinzuzufügen.

In der Projektansicht lassen sich mittels "Hinzufügen Neuer Filter" sogenannte Filter einrichten. Diese haben in der Projektansicht praktisch die gleiche Funktion wie Unterverzeichnisse und dienen der thematischen Sortierung der Source- und Header-Dateien.

Dateiname und Compilerauswahl

Visual Studio entscheidet beim Hinzufügen einer Quell-/Header-Datei nach der Endung des Dateinamens, wie diese Datei zu kompilieren ist. ".cu"-Dateien werden als CUDA-Datei interpretiert und mit NVCC kompiliert. Header- und ".cpp"-Dateien werden dagegen zunächst mit dem Standard-Visual Studio C-Compiler kompiliert.

Diese Einstellung wird bei nachträglicher Änderung des Dateinamens nicht mehr verändert!

Quell-/Header-Dateien mit CUDA-spezifischen Code können aber auch manuell als CUDA/C++ deklariert werden. Hierzu ist im Projektmappen-Explorer nach "Rechtsklick" auf die ausgewählte Datei unter Eigenschaften der Elementtyp entsprechend zu setzen.