CUDA nvcc編譯引數示例

2021-09-11 03:50:31 字數 2495 閱讀 6405

cuda:nvcc編譯引數示例

前言nvcc中有控制程式相容性的引數,本節主要講這些引數,如果對原理想有了解見cuda:nvcc編譯過程和相容性詳解

cmake中的引數寫法和命令列的寫法都有。

多種編譯寫法

虛擬架構+真實框架

這種編譯要編譯成唯一的結果,即確定gpu物件,寫法如下:

set(cuda_nvcc_flags -arch=compute_60;-code=sm_61)

或set(cuda_nvcc_flags -arch=compute_50;-code=sm_50)

或set(cuda_nvcc_flags -arch=compute_50;-code=sm_52)

或set(cuda_nvcc_flags -arch=compute_50;-code=sm_53)

或set(cuda_nvcc_flags -arch=compute_50;-code=sm_50,sm_52,sm_53)

根據實際情況選擇

jit即時編譯

要真實和虛擬都使用compute_

set(cuda_nvcc_flags -arch=compute_60;-code=compute_60)

或set(cuda_nvcc_flags -arch=compute_50;-code=compute_50)

或set(cuda_nvcc_flags -arch=compute_30;-code=compute_30)

根據實際情況選擇

當gpu計算能力低於編譯的虛擬框架時,jit將失敗。

fatbinary

即在code處多加了compute_x

set(cuda_nvcc_flags -arch=compute_60;-code=compute_60,sm_60,sm_61)

或set(cuda_nvcc_flags -arch=compute_50;-code=compute_50,sm_52,sm_53)

或set(cuda_nvcc_flags -arch=compute_30;-code=compute_30,sm_30,sm_35)

根據實際情況選擇

簡寫的方式

簡寫的方式實現的功能和上面是一樣的,要自己對應,但需要寫的少

簡寫1nvcc x.cu --gpu-architecture=sm_52

nvcc x.cu --gpu-architecture=compute_50

對應等同於

nvcc x.cu --gpu-architecture=compute_52 --gpu-code=sm_52,compute_52

nvcc x.cu --gpu-architecture=compute_50 --gpu-code=compute_50

簡寫2在cuda9.0:

nvcc x.cu

等同於nvcc x.cu --gpu-architecture=compute_30 --gpu-code=sm_30,compute_30

多代相容性寫法

之前的寫法只能保證gpu選擇指定編譯的某個代的程式,本節通過編譯成多個代,實現gpu更好的選擇自己的大代和自己的小代的目的。

cmake:

set(cuda_nvcc_flags

-gencode arch=compute_20,code=sm_20;

-gencode arch=compute_20,code=sm_21;

-gencode arch=compute_30,code=sm_30;

-gencode arch=compute_35,code=sm_35;

-gencode arch=compute_50,code=sm_50;

-gencode arch=compute_52,code=sm_52;

-gencode arch=compute_60,code=sm_60;

-gencode arch=compute_61,code=sm_61;

-gencode arch=compute_61,code=compute_61;

)命令列

-gencode arch=compute_20,code=sm_20 \

-gencode arch=compute_20,code=sm_21 \

-gencode arch=compute_30,code=sm_30 \

-gencode arch=compute_35,code=sm_35 \

-gencode arch=compute_50,code=sm_50 \

-gencode arch=compute_50,code=compute_50

應用

在平時寫程式的時候,在自己知道自己gpu的情況下,以虛擬架構+真實框架的方式,使用最合適的版本,這樣編譯快且效能好,在程式發布的時候要用多代相容性寫法,保證程式的相容性。

CUDA nvcc編譯引數示例

nvcc中有控制程式相容性的引數,本節主要講這些引數,如果對原理想有了解見cuda nvcc編譯過程和相容性詳解 cmake中的引數寫法和命令列的寫法都有。這種編譯要編譯成唯一的結果,即確定gpu物件,寫法如下 set cuda nvcc flags arch compute 60 code sm ...

CUDA nvcc編譯步驟簡單講解

主頁 www.gamecoding.cn 1.乙個編譯例子 隨意找乙個包含 kernel 以及 kernel 呼叫的 cu 檔案,如 x.cu 進入命令列 敲打 nvcc cuda x.cu keep 將得到如下結果,cuda 是將 cu 編譯成 cu.cpp keep 保留中間結果。如果提示找不到...

Object引數示例

c 程式語言中的型別系統,同樣型別系統也關係使用 object 型別作為引數。當乙個方法接收乙個 object 引數,你可以傳遞給它任何派生類的例項 因為每個型別都是從 object 型別繼承而來,你可以傳遞任何值到接收 object 引數的方法。在這篇文章中,我們使用 object 型別作為方法的...