Portál AbcLinuxu, 30. dubna 2025 19:38
#include <stdio.h> __global__ void helloCUDA(float f) { printf("Hello thread %d, f=%f\n", threadIdx.x, f); } int main() { helloCUDA<<<1, 5>>>(1.2345f); cudaDeviceSynchronize(); return 0; }Kompilaci provede pomocí (kde test.cu je název souboru s kódem a test název zkompilovaného programu):
nvcc -arch=sm_20 test.cu -o testAby program s CUDA fungoval (pokud máte optimus) je ho potřeba pustit pomocí optirun. Výsledný program spustíte tedy pomocí optirun takto (můžete použít optirun s argumente --no-xorg):
optirun --no-xorg ./testPokud se vám vypíše
Hello thread 0, f=1.234500 Hello thread 1, f=1.234500 Hello thread 2, f=1.234500 Hello thread 3, f=1.234500 Hello thread 4, f=1.234500,tak vám CUDA funguje přesně jak má a může vesele vyvíjet aplikace využívající GPU.
Pokud stejně jako já rádi použiváte KDevelop, tak nastavení aby se KDevelop choval k souborům s příponou .cu a .cuh jako souborům C resp C++ provode v systémovém nastavení KDE v kategorii Asociace souborů kde u x-c++src pridáte další příponu *.cu a u x-c++hdr přidáte příponu *.cuh. Nyní by vám již mělo fungovat doplňování a refaktoring v KDevelop se soubory s těmito příponami.
cmake_minimum_required(VERSION 2.8) project(nazevprojektu) # kvuli kompabilite s nvcc je potreba pouzit gcc verze 4.6 u CUDA toolkit 5.5 tohle muzete odebrat set(CMAKE_CXX_COMPILER g++-4.6) set(CMAKE_CC_COMPILER gcc-4.6) set(CMAKE_C_COMPILER gcc-4.6) find_package(CUDA REQUIRED) include(FindCUDA) # nvcc flags set(CUDA_NVCC_FLAGS ${CUDA_NVCC_FLAGS};-gencode arch=compute_30,code=sm_30) set(CUDA_VERBOSE_BUILD ON CACHE BOOL "nvcc verbose" FORCE) cuda_add_executable(nazevprojektu main.cu dalsifile.cu file.cpp)
Při vývoji narazíte na problém, že se vám aplikace spuštěné pomocí optirun déle spouští. Je to způsobením, že se pokaždé musí nastartovat další X server. To lze vyřešit tím, že si pustíte nějaký program pomocí optirun a necháte ho běžet. Poté se vám již aplikace budou spouštět normálně.
Nyní přichází na řadu debugování to lze provádět pomocí cuda-gdb. Aby vám cuda-gdb fungovalo je potřeba ukončit všechny programy, které grafickou kartu s CUDA využívají. Opět musíte spouštět cuda-gdb pomocí optirun nyní již musíte použít argument --no-xorg jinak vám nebude fungovat. Například takto:
optirun --no-xorg cuda-gdb --args programscuda -jehoargumentycuda-gdb je postaveno na gdb, takže musíte umět aspoň nějaké základy používání gdb.
Pokud jste došli až sem a vše vám funguje gratuluji.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.