我有一个非常简单的东芝笔记本电脑与i3处理器.另外,我没有任何昂贵的显卡.在显示设置中,我将英特尔(HD)图形视为显示适配器.我打算学习一些cuda编程.但是,我不确定,如果我可以在我的笔记本电脑上这样做,因为它没有任何nvidia的cuda启用GPU.
事实上,我怀疑,如果我有一个GPU o_o
所以,如果有人能告诉我是否可以使用当前配置进行CUDA编程,如果可能的话还让我知道英特尔(HD)图形意味着什么,我将不胜感激?
我是GPU编程的新手.我有一台配有NVIDIA GeForce GT 640卡的笔记本电脑.我面临两难困境,欢迎提出建议.
如果我选择CUDA - Ubuntu或Windows Clearly CUDA更适合Windows,而在Ubuntu上安装可能是一个严重的问题.我见过一些声称在Ubuntu 11.10和Ubuntu 12.04上安装了CUDA 5的博客帖子.但是,我无法让他们工作.此外,标准CUDA教科书更喜欢在Windows域中工作,并且在Unix/Ubuntu安装和工作方面或多或少都是沉默的.
CUDA或OpenCL - 现在这可能比我的第一个问题更棘手!我主要使用CUDA/Nvidia来接触GPGPU项目,但OpenCL可能是开源中的下一个最佳选择,在Ubuntu中安装可能不会成为问题,尽管这里的一些建议最有用.如果我选择OpenCL而不是CUDA,我会牺牲任何功能吗?
任何帮助或建议?
试图绘制一些Data.Array.Accelerate计算的输出gnuplot我遇到了一个奇怪的问题.当通过解释器运行时,一切都很好,如绘制直接Haskell数据或仅打印Accelerate值,但是尝试绘制Accelerate数据失败.给出的错误是forkOS_entry: interrupted.
我已经意识到我应该更多UNIXy并在每个程序中做一件事(好).但我很想知道为什么会失败.我在下面添加了最少的代码示例.
import Prelude hiding (zip,zipWith)
import Graphics.Gnuplot.Simple
import Data.Array.Accelerate
-- import Data.Array.Accelerate.Interpreter
import Data.Array.Accelerate.CUDA
f :: Vector Float -> Vector Float -> Acc (Vector Float)
f xs ys = let xs' = use xs
ys' = use ys
in
(zipWith (*) xs' ys')
n=10::Int
points = toList.run $ f (fromList (Z:.n) [1..10]) (fromList (Z:.n) [-5..4])
main = plotList [] points
Run Code Online (Sandbox Code Playgroud)
更新2014/09/11
根据user2141650建议(谢谢!)将最后一行更改为
plotList [] $! points
Run Code Online (Sandbox Code Playgroud)
解决了这个问题.事实上它使得情节实际上出现了,而没有这个,程序将有或没有错误完成,但实际上永远不会显示情节.我想我会接受这个作为答案,如果它被写了,但知道发生了什么仍然是很好的.
可能相关:
(顺便说一句,请停止尝试编辑语法.这个问题没有任何问题,我是母语人士并写下我的意思.感谢您的贡献.)
GPU如何比CPU更快?我读过有关GPU如何在破坏密码方面比CPU更快的文章.如果是这样的话那为什么CPU的设计不能像GPU一样速度均匀?
我知道这nvidia-smi -l 1将每秒钟提供一次GPU使用(类似于以下内容).但是,我很欣赏有关Volatile GPU-Util真正含义的解释.这是使用的SM数量超过总SM数,占用数量还是其他数量?
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 367.48 Driver Version: 367.48 |
|-------------------------------+----------------------+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
|===============================+======================+======================|
| 0 Tesla K20c Off | 0000:03:00.0 Off | 0 |
| 30% 41C P0 53W / 225W | 0MiB / 4742MiB | 96% Default |
+-------------------------------+----------------------+----------------------+
| 1 Tesla K20c Off | 0000:43:00.0 Off | 0 |
| 36% …Run Code Online (Sandbox Code Playgroud) AccelerEyes于2012年12月宣布,它与Mathworks在GPU代码上合作,并已停止其产品Jacket for MATLAB:
http://blog.accelereyes.com/blog/2012/12/12/exciting-updates-from-accelereyes/
不幸的是,他们不再销售Jacket牌照了.
据我所知,基于ArrayFire的Jacket GPU阵列解决方案比MATLAB提供的gpuArray解决方案快得多.
我开始使用gpuArray,但我发现很多函数都实现得很差.例如一个简单的
myArray(:) = 0
Run Code Online (Sandbox Code Playgroud)
非常慢 我编写了一些自定义的CUDA内核,但是实现得很差的标准MATLAB功能增加了很多开销,即使在整个代码中使用gpuArrays也是如此.我通过用手写的CUDA代码替换MATLAB代码来解决一些问题 - 但我不想重新实现MATLAB标准功能.
我缺少的另一个功能是稀疏GPU矩阵.
所以我的问题是:
如何加快MATLAB提供的严格实现的默认GPU实现?特别是,如何使用GPU加速MATLAB中的稀疏矩阵运算?
我目前正在研究python中的一个项目,我想利用GPU进行一些计算.
乍一看似乎有很多可用的工具; 乍一看,我觉得我错过了什么.
Copperhead看起来很棒,但还没有被释放.似乎我只限于编写低级CUDA或openCL内核; 没有推力,没有cudpp.如果我喜欢有东西排序,我将不得不自己做.
这对我来说似乎不对.我确实错过了什么吗?或者这个GPU脚本还没有完全实现炒作呢?
编辑:GPULIB似乎可能是我需要的.文档是基本的,python绑定只是顺便提一下,但我现在申请下载链接.任何人都有这方面的经验,或链接到类似的免费学术用途的GPU库?ReEdit:好的,python绑定实际上是不存在的.
编辑2:所以我想我最好的选择是用C/CUDA写一些东西并从python中调用它?
什么时候cudaDeviceSynchronize真的需要调用这个函数?
据我从CUDA文档中了解,CUDA内核是异步的,因此我们应该cudaDeviceSynchronize在每次内核启动后调用它们.但是,cudaDeviceSynchronize在时间测量之前,除了一个之外,我尝试了相同的代码(训练神经网络).我发现我得到了相同的结果,但速度在7-12x之间(取决于矩阵大小).
所以,问题是是否有任何理由使用cudaDeviceSynchronize时间测量.
例如:
是否需要先将数据从GPU复制回主机cudaMemcpy?
如果我做矩阵乘法,比如
C = A * B
D = C * F
Run Code Online (Sandbox Code Playgroud)我应该放在cudaDeviceSynchronize两者之间吗?
从我的实验看来我没有.
为什么这么cudaDeviceSynchronize慢的程序呢?
我想将我的技能扩展到GPU计算.我熟悉光线跟踪和实时图形(OpenGL),但下一代图形和高性能计算似乎是在GPU计算或类似的东西.
我目前在家用电脑上使用AMD HD 7870显卡.我可以为此编写CUDA代码吗?(我的直觉不是,但是因为Nvidia发布了编译器二进制文件,我可能错了).
第二个更普遍的问题是,我从哪里开始GPU计算?我确定这是一个经常被问到的问题,但我看到的最好是从08'开始,我认为从那时起该领域发生了很大的变化.
假设纹理,顶点和着色器数据已经在显卡上,您不需要向卡发送大量数据.有几个字节来识别数据,可能是一个4x4矩阵,以及一些其他各种参数.
那么所有的开销来自哪里?操作是否需要与gpu进行某种握手?
为什么发送包含一堆小模型的单个网格,在CPU上计算,通常比发送顶点id和转换矩阵更快?(第二个选项看起来应该发送更少的数据,除非模型小于4x4矩阵)