久久久久久久av_日韩在线中文_看一级毛片视频_日本精品二区_成人深夜福利视频_武道仙尊动漫在线观看

CUDA 和類

CUDA and Classes(CUDA 和類)
本文介紹了CUDA 和類的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧!

問題描述

我已經(jīng)到處搜索有關(guān)如何在 CUDA 中使用類的一些見解,雖然普遍認(rèn)為它可以完成并且顯然是由人們完成的,但我很難找到如何真正做到這一點.

我有一個類,它實現(xiàn)了一個帶有運算符重載等的基本位集.我需要能夠在主機(jī)和設(shè)備上實例化此類的對象,在兩者之間進(jìn)行復(fù)制等.我是否在 .cu 中定義了此類?如果是這樣,我如何在我的主機(jī)端 C++ 代碼中使用它?類的函數(shù)不需要訪問像threadId這樣的特殊CUDA變量;它只需要能夠用于主機(jī)和設(shè)備端.

感謝您的幫助,如果我以完全錯誤的方式處理這個問題,我很樂意聽到替代方案.

解決方案

在 #include 的頭文件中定義類,就像在 C++ 中一樣.

任何必須從設(shè)備代碼調(diào)用的方法都應(yīng)該使用 __device____host__ 聲明規(guī)范,包括構(gòu)造函數(shù)和析構(gòu)函數(shù),如果您打算使用 new/delete 在設(shè)備上(注意 new/delete 需要 CUDA 4.0 和計算能力 2.0 或更高的 GPU).>

你可能想定義一個像

這樣的宏

#ifdef __CUDACC__#define CUDA_CALLABLE_MEMBER __host__ __device__#別的#define CUDA_CALLABLE_MEMBER#萬一

然后在你的成員函數(shù)上使用這個宏

class Foo {民眾:CUDA_CALLABLE_MEMBER Foo() {}CUDA_CALLABLE_MEMBER ~Foo() {}CUDA_CALLABLE_MEMBER void aMethod() {}};

這樣做的原因是只有 CUDA 編譯器知道 __device____host__ —— 你的主機(jī) C++ 編譯器會引發(fā)錯誤.

注意 __CUDACC__ 已定義由 NVCC 在編譯 CUDA 文件時使用.這可以是在使用 NVCC 編譯 .cu 文件時,也可以是在使用命令行選項 -x cu 編譯任何文件時.

I've searched all over for some insight on how exactly to use classes with CUDA, and while there is a general consensus that it can be done and apparently is being done by people, I've had a hard time finding out how to actually do it.

I have a class which implements a basic bitset with operator overloading and the like. I need to be able to instantiate objects of this class on both the host and the device, copy between the two, etc. Do I define this class in a .cu? If so, how do I use it in my host-side C++ code? The functions of the class do not need to access special CUDA variables like threadId; it just needs to be able to be used host and device side.

Thanks for any help, and if I'm approaching this in completely the wrong way, I'd love to hear alternatives.

解決方案

Define the class in a header that you #include, just like in C++.

Any method that must be called from device code should be defined with both __device__ and __host__ declspecs, including the constructor and destructor if you plan to use new/delete on the device (note new/delete require CUDA 4.0 and a compute capability 2.0 or higher GPU).

You probably want to define a macro like

#ifdef __CUDACC__
#define CUDA_CALLABLE_MEMBER __host__ __device__
#else
#define CUDA_CALLABLE_MEMBER
#endif 

Then use this macro on your member functions

class Foo {
public:
    CUDA_CALLABLE_MEMBER Foo() {}
    CUDA_CALLABLE_MEMBER ~Foo() {}
    CUDA_CALLABLE_MEMBER void aMethod() {}
};

The reason for this is that only the CUDA compiler knows __device__ and __host__ -- your host C++ compiler will raise an error.

Edit: Note __CUDACC__ is defined by NVCC when it is compiling CUDA files. This can be either when compiling a .cu file with NVCC or when compiling any file with the command line option -x cu.

這篇關(guān)于CUDA 和類的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持html5模板網(wǎng)!

【網(wǎng)站聲明】本站部分內(nèi)容來源于互聯(lián)網(wǎng),旨在幫助大家更快的解決問題,如果有圖片或者內(nèi)容侵犯了您的權(quán)益,請聯(lián)系我們刪除處理,感謝您的支持!

相關(guān)文檔推薦

How can I read and manipulate CSV file data in C++?(如何在 C++ 中讀取和操作 CSV 文件數(shù)據(jù)?)
In C++ why can#39;t I write a for() loop like this: for( int i = 1, double i2 = 0; (在 C++ 中,為什么我不能像這樣編寫 for() 循環(huán): for( int i = 1, double i2 = 0;)
How does OpenMP handle nested loops?(OpenMP 如何處理嵌套循環(huán)?)
Reusing thread in loop c++(在循環(huán) C++ 中重用線程)
Precise thread sleep needed. Max 1ms error(需要精確的線程睡眠.最大 1ms 誤差)
Is there ever a need for a quot;do {...} while ( )quot; loop?(是否需要“do {...} while ()?環(huán)形?)
主站蜘蛛池模板: 在线视频亚洲 | 午夜爱爱网 | 久草在线视频中文 | 精品成人免费一区二区在线播放 | 精品在线| 波波电影院一区二区三区 | 国产精品自产拍在线观看蜜 | 国产日韩精品视频 | 亚洲一区二区免费视频 | 国产精品久久久久久久岛一牛影视 | 自拍偷拍亚洲一区 | 亚洲劲爆av| 日韩欧美操 | 一区二区三区免费 | 国产视频中文字幕 | 久久天堂| 久久不射电影网 | 日韩av电影院 | 99精品久久久国产一区二区三 | 国产日韩精品一区二区 | 国产高清精品网站 | 麻豆精品国产免费 | 在线观看黄色电影 | 97精品久久 | 国产乱人伦精品一区二区 | 二区不卡 | 亚洲一区二区三区免费观看 | 国产aⅴ| 亚洲天堂一区 | 九九综合 | 中文字幕亚洲一区 | 日本一区二区三区精品视频 | 欧美日韩国产在线观看 | 午夜一区二区三区 | 麻豆hd| 国产丝袜一区二区三区免费视频 | 精品国产一区一区二区三亚瑟 | 国产高清一区二区三区 | 欧美一级欧美一级在线播放 | 久久夜色精品国产 | 99久久久久久99国产精品免 |