Portál AbcLinuxu, 5. prosince 2025 01:59
#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.