我注意到CUDA应用程序在失败并退出之前往往有5-15秒的粗略最大运行时间.我意识到没有CUDA应用程序运行那么久是理想的,但假设它是使用CUDA的正确选择,并且由于每个线程的顺序工作量必须运行那么长,有没有办法延长这个时间或者绕过它?
如果使用Quadro GPU与GeForce GPU,TensorFlow性能是否有明显差异?
例如,它是否使用双精度操作或其他会导致GeForce卡掉落的东西?
我即将为TensorFlow购买GPU,并想知道GeForce是否可以.谢谢,感谢您的帮助
我正在研究C++中的高性能代码,并且一直在使用CUDA和OpenCL以及最近的C++ AMP,我非常喜欢它.然而,我有点担心它没有被开发和扩展并且将会消亡.
让我想到这个想法的是,即使是MS C++ AMP博客已经沉默了大约一年.看看C++ AMP算法库http://ampalgorithms.codeplex.com/wikipage/history,似乎一年多没发生任何事情.
我看到的唯一开发是现在LLVM类型支持C++ AMP,因此它不仅仅是Windows,但这就是全部,而不是已被广泛讲述的东西.
你知道什么样的工作,如果有的话?
我正在尝试使用caffe和python进行实时图像分类.我在一个过程中使用OpenCV从我的网络摄像头流式传输,并在一个单独的过程中,使用caffe对从网络摄像头拉出的帧执行图像分类.然后我将分类结果传回主线程以标注网络摄像头流.
问题是即使我有一个NVIDIA GPU并且正在执行GPU上的caffe预测,主线程也会变慢.通常没有做任何预测,我的网络摄像头流以30 fps运行; 但是,根据预测,我的网络摄像头流最多可获得15 fps.
我已经验证了caffe在执行预测时确实使用了GPU,而且我的GPU或GPU内存并没有最大化.我还验证了我的CPU内核在程序中的任何时候都没有达到最大限度.我想知道我是做错了什么,或者是否有办法让这两个过程真正分开.任何建议表示赞赏.这是我的代码供参考
class Consumer(multiprocessing.Process):
def __init__(self, task_queue, result_queue):
multiprocessing.Process.__init__(self)
self.task_queue = task_queue
self.result_queue = result_queue
#other initialization stuff
def run(self):
caffe.set_mode_gpu()
caffe.set_device(0)
#Load caffe net -- code omitted
while True:
image = self.task_queue.get()
#crop image -- code omitted
text = net.predict(image)
self.result_queue.put(text)
return
import cv2
import caffe
import multiprocessing
import Queue
tasks = multiprocessing.Queue()
results = multiprocessing.Queue()
consumer = Consumer(tasks,results)
consumer.start()
#Creating window and starting video capturer from camera
cv2.namedWindow("preview")
vc = cv2.VideoCapture(0)
#Try to …Run Code Online (Sandbox Code Playgroud) 是否有任何研究比较OpenCL和OpenMP性能?具体来说,我感兴趣的是使用OpenCL启动线程的开销,例如,如果要将域分解为大量单个工作项(每个工作项由一个执行小工作的线程运行),而不是OpenMP中的较重权重线程.域被分解为子域,其数量等于核心数.
似乎OpenCL编程模型更多地针对大规模并行芯片(例如GPU),而不是具有更少但更强大的内核的CPU.
OpenCL可以成为OpenMP的有效替代品吗?
对于平台独立性(桌面,云,移动......),当速度很重要时,使用OpenCL进行GPGPU开发会很棒.我知道谷歌推动RenderScript作为替代方案,但它似乎只适用于Android,并且不太可能包含在iOS中.
因此,我寻求在Android应用程序中执行OpenCL代码的解决方案.
我正在浏览http://www.khronos.org/网站,只找到OpenCL的标题(不是我不关心的OpenGL).我如何获得OpenCL SDK?
当计算机具有多个支持CUDA的GPU时,每个GPU都会分配一个device ID.默认情况下,CUDA内核会执行device ID 0.您可以使用cudaSetDevice(int device)选择其他设备.
假设我的机器中有两个GPU:GTX 480和GTX 670.CUDA 如何确定哪个GPU device ID 0和哪个GPU device ID 1?
关于CUDA如何分配设备ID的想法(只是头脑风暴):
动机:我正在研究一些HPC算法,我正在为几个GPU进行基准测试和自动调整.我的处理器有足够的PCIe通道,可以在全带宽下将cudaMemcpys驱动到3个GPU.因此,我不打算不断地将GPU交换进机器,而是计划在计算机中保留3个GPU.我希望能够预测当我在计算机中添加或更换某些GPU时会发生什么.
CUDA文档没有具体说明有多少CUDA进程可以共享一个GPU.例如,如果同一个用户在系统中只安装了一个GPU卡的情况下启动了多个CUDA程序,效果如何?它会保证执行的正确性吗?在这种情况下,GPU如何安排任务?
Consider this the complete form of the question in the title: Since OpenCL may be the common standard for serious GPU programming in the future (among other devices programming), why not when programming for OpenGL - in a future-proof way - utilize all GPU operations on OpenCL? That way you get the advantages of GLSL, without its programmatic limitations.