2013-06-27 58 views
1

我從我自己的項目中得知,當使用__constant__內存時,cuda具有文件範圍鏈接。這意味着我必須在同一個文件中使用常量內存,我在那裏做了cudaMemcpyToSymbol。 那麼對於cuda使用文件範圍鏈接的其他存儲/內存類型呢?我認爲它也用於texture。但是什麼是__shared__內存?cuda和文件範圍

回答

2

第一點是在經典CUDA編譯模型中,範圍要求爲所有設備符號爲translation unit範圍。而一切都意味着至少

  1. __global__函數
  2. __device__功能
  3. __texture__對象
  4. __constant__內存
  5. __shared__內存聲明爲extern
  6. __device__符號

所有這些都在相同的翻譯單位w定義在這裏它們用於運行時正常工作。其根本原因在於,上面列表中的所有對象都必須發佈到相同的CUDA模塊(這是一個驅動程序API概念),以便一切正常工作。

CUDA 5引入了一個單獨的編譯模式,它實際上是一個靜態鏈接模型。這意味着符號不需要在同一個翻譯單元中定義,它們可以被前向聲明並且鏈接器將在設備代碼鏈接過程中處理符號匹配。