Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
解释CUDA C和C++; 谁能给我一个很好的解释,关于CUDA C和C++的性质?据我所知,CUDA应该是带有NVIDIA GPU库的C。就目前而言,CUDA C支持一些C++特性而不是其他特性。p>_C++_C_Cuda_Nvidia - Fatal编程技术网

解释CUDA C和C++; 谁能给我一个很好的解释,关于CUDA C和C++的性质?据我所知,CUDA应该是带有NVIDIA GPU库的C。就目前而言,CUDA C支持一些C++特性而不是其他特性。p>

解释CUDA C和C++; 谁能给我一个很好的解释,关于CUDA C和C++的性质?据我所知,CUDA应该是带有NVIDIA GPU库的C。就目前而言,CUDA C支持一些C++特性而不是其他特性。p>,c++,c,cuda,nvidia,C++,C,Cuda,Nvidia,英伟达的计划是什么?他们会在C上建立并添加他们自己的库(例如,推力与STL),它们与C++的那些库相平行吗?他们最终会支持所有C++吗?在代码> Cu//C>文件> 中使用C++头是否不好? 英伟达的计划是什么 我相信总的趋势是CUDA和OpenCL对于许多应用来说被认为是太低级的技术。目前,Nvidia正在大力投资于GPU的OpenMP。它遵循一种声明性的方法,在更高的层次上解决GPU并行化问题。这就是我对Nvidia计划的主观印象。CUDA C是一种使用C语法的编程语言。从概念上讲,它与C完

英伟达的计划是什么?他们会在C上建立并添加他们自己的库(例如,推力与STL),它们与C++的那些库相平行吗?他们最终会支持所有C++吗?在<>代码> Cu//C>文件>

中使用C++头是否不好? 英伟达的计划是什么


我相信总的趋势是CUDA和OpenCL对于许多应用来说被认为是太低级的技术。目前,Nvidia正在大力投资于GPU的OpenMP。它遵循一种声明性的方法,在更高的层次上解决GPU并行化问题。这就是我对Nvidia计划的主观印象。

CUDA C是一种使用C语法的编程语言。从概念上讲,它与C完全不同

它试图解决的问题是为多个处理器编码多个(类似的)指令流

CUDA提供的不仅仅是单指令多数据(SIMD)矢量处理,而是数据流>>指令流,或者说好处要小得多

CUDA提供了一些机制来实现这一点,并隐藏了一些复杂性

CUDA并没有针对多个不同的指令流(如多核x86)进行优化。 CUDA不限于单个指令流(如x86矢量指令),也不限于特定数据类型(如x86矢量指令)

CUDA支持可并行执行的“循环”。这是它最关键的特点。CUDA系统将对“循环”的执行进行分区,并在一系列相同的处理器上同时运行“循环”主体,同时提供一些正常顺序循环的假象(特别是CUDA管理循环“索引”)。开发人员需要了解GPU机器结构才能有效地编写“循环”,但几乎所有的管理都由CUDA运行时处理。其效果是数百(甚至数千)个“循环”与一个“循环”同时完成

CUDA支持类似于
if
分支的功能。只有运行与if测试匹配的代码的处理器才能激活,因此对于if测试的每个“分支”,处理器的子集都将激活。例如,如果。。。否则如果。。。else…,有三个分支。每个处理器将只执行一个分支,并在if完成时“重新同步”以准备与其他处理器继续。可能是任何处理器都不匹配某些分支条件。因此无需执行该分支(例如,三个分支是最坏的情况)。然后只按顺序执行一个或两个分支,从而更快地完成整个
if

没有“魔法”。程序员必须意识到代码将在CUDA设备上运行,并有意识地为其编写代码

CUDA不接受旧的C/C++代码,并自动神奇地跨处理器阵列运行计算。CUDA可以编译和运行普通C和许多C++,但是由于它会顺序运行,并且比现代CPU慢,所以很少得到(没有什么)。这意味着某些库中的代码与CUDA功能(目前)并不匹配。CUDA程序可以同时在多kByte位向量上运行。CUDA无法自动神奇地将现有的顺序C/C++库代码转换为可以实现这一功能的代码

CUDA确实提供了一种相对简单的编写代码的方法,使用熟悉的C/C++语法,添加了一些额外的概念,并生成将在一系列处理器上运行的代码。与多核x86相比,它有可能提供超过10倍的加速比

编辑计划:我不为NVIDIA工作

为了获得最佳性能,CUDA需要编译时的信息

因此,模板机制是最有用的,因为它为开发人员提供了一种在编译时说话的方式,CUDA编译器可以使用这种方式。作为一个简单的例子,如果在编译时将矩阵定义(实例化)为2D和4x8,那么CUDA编译器可以使用该矩阵跨处理器组织程序。如果该大小是动态的,并且在程序运行时发生变化,那么编译器或运行时系统就很难执行非常有效的工作

编辑: CUDA有类和函数模板。 如果人们读到这篇文章说CUDA没有,我道歉。我承认我不清楚

<> P>我相信CUDA GPU的模板实现不是完全的W.R.T.C++。 用户harrism评论说我的回答有误导性。harrism为NVIDIA工作,所以我会等待建议。希望这已经更清楚了

跨多个处理器有效执行的最困难的事情是沿着许多备用路径进行动态分支,因为这样可以有效地序列化代码;在最坏的情况下,一次只能执行一个处理器,这浪费了GPU的优势。所以虚拟函数似乎很难做好

有一些非常智能的全程序分析工具可以推断出比开发人员可能理解的更多的类型信息。现有的工具可能会进行足够的推断,以消除虚拟函数,从而将分支分析转移到编译时。还有一些用于检测程序执行的技术,这些技术直接反馈到程序的重新编译中,从而达到更好的分支决策

AFAIK(模反馈)CUDA编译器在这些领域还不是最先进的

(我认为,对于任何有兴趣的人来说,使用CUDA或OpenCL功能的系统,花几天时间来研究它们并做一些实验都是值得的。我还认为,对于对这些领域感兴趣的人来说,用Haskell进行实验并获得一个