簡體   English   中英

內核CUDA中的C ++代碼?

[英]C++ code in kernel CUDA?

據我所知,CUDA支持C和C ++。 但是我不能在內核中使用C ++。

我嘗試這樣的簡單例子

__global__ void simple(){
     cout<<"abc";
}

那是錯誤。 但是,如果我更改為printf("abc"); 這是正確的。

你能為我解釋一下嗎? 非常感謝你!

從CUDA 7.5 nvidia幻燈片中:

C ++ 11支持的功能

  • 汽車
  • Lambdas
  • std :: initializer_list
  • 可變參數模板
  • static_asserts
  • constexpr
  • 右值引用
  • 基於范圍的循環

C ++不支持的功能

  • thread_local
  • 標准庫:std :: *

std::cout在CUDA不支持的C ++標准庫中定義。 使用C printf

從CUDA 6.5起,不贊成使用'compute_11','compute_12','compute_13','sm_11','sm_12'和'sm_13'體系結構。 因此, nvcc將默認編譯為CC 2.0,從而啟用printf支持。

在這里這里更多信息

CUDA不會鏈接使用cout函數所需的庫和頭文件。 但是,您可以啟用使用printf()

該答案說明了啟用此功能的過程: 此處引用的cuda內核進行打印,以便於訪問:

為了在計算能力> = 2.0的設備上啟用普通printf(),重要的是要編譯CC至少為CC 2.0並禁用默認值,其中包括CC 1.0的內部版本。

右鍵單擊項目中的.cu文件,選擇“屬性”,再選擇“配置屬性” |“配置”。 CUDA C / C ++ |中文 設備。 單擊“代碼生成”行,單擊三角形,然后選擇“編輯”。 在“代碼生成”對話框中,取消選中“從父級或項目默認值繼承”,在頂部窗口中鍵入compute_20,sm_20,然后單擊“確定”。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM