我正在阅读一个很棒的OpenGL教程.这真的很棒,相信我.我目前的主题是Z-buffer.除了解释它的全部内容之外,作者还提到我们可以执行自定义深度测试,例如GL_LESS,GL_ALWAYS等.他还解释了深度值的实际含义(顶部是哪个,哪个不是)也可以定制.到目前为止我明白了.然后作者说了一些令人难以置信的事:
zNear的范围可以大于zFar的范围; 如果是,则窗口空间值将根据与观看者最近或最远的内容来反转.
早些时候,据说窗口空间Z值为0,最接近1.但是,如果我们的剪辑空间Z值被否定,则1的深度将最接近视图,0的深度将最远.然而,如果我们翻转深度测试的方向(GL_LESS到GL_GREATER等),我们得到完全相同的结果.所以这真的只是一个惯例.事实上,翻转Z的标志和深度测试曾经是许多游戏的重要性能优化.
如果我理解正确,性能方面,翻转Z的符号和深度测试只不过是将<
比较改为>
比较.所以,如果我理解正确并且作者没有说谎或做事,那么<
改为>
以前是许多游戏的重要优化.
是作者胡编,我误解的东西,或者是它确实是曾经的情况下<
较慢(至关重要,正如作者说)比>
?
谢谢你澄清这个非常奇怪的事情!
免责声明:我完全清楚算法复杂性是优化的主要来源.此外,我怀疑现在肯定没有任何区别,我不是要求它优化任何东西.我非常痛苦,也许是令人望而却步的好奇心.
当我运行时,nvidia-smi
我收到以下消息:
Failed to initialize NVML: Driver/library version mismatch
Run Code Online (Sandbox Code Playgroud)
一个小时前我收到了同样的消息并卸载了我的cuda库,我能够运行nvidia-smi
,得到以下结果:
在此之后,我cuda-repo-ubuntu1604-8-0-local-ga2_8.0.61-1_amd64.deb
从官方的NVIDIA页面下载,然后简单地:
sudo dpkg -i cuda-repo-ubuntu1604-8-0-local-ga2_8.0.61-1_amd64.deb
sudo apt-get update
sudo apt-get install cuda
export PATH=/usr/local/cuda-8.0/bin${PATH:+:${PATH}}
Run Code Online (Sandbox Code Playgroud)
现在我安装了cuda,但是我得到了上面提到的不匹配错误.
一些可能有用的信息:
跑步cat /proc/driver/nvidia/version
我得到:
NVRM version: NVIDIA UNIX x86_64 Kernel Module 378.13 Tue Feb 7 20:10:06 PST 2017
GCC version: gcc version 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.4)
Run Code Online (Sandbox Code Playgroud)
我正在运行Ubuntu 16.04.2 LTS.
内核版本是:4.4.0-66-generic.
谢谢!
每个人都在桌面上以图形卡GPU的形式拥有这个巨大的大规模并行化超级计算机.
-亚当
我有计划使用分布式TensorFlow,我看到TensorFlow可以使用GPU进行培训和测试.在群集环境中,每台计算机可能有0个或1个或更多GPU,我想在尽可能多的计算机上运行我的TensorFlow图形到GPU.
我发现在运行tf.Session()
TensorFlow时会在日志消息中提供有关GPU的信息,如下所示:
I tensorflow/core/common_runtime/gpu/gpu_init.cc:126] DMA: 0
I tensorflow/core/common_runtime/gpu/gpu_init.cc:136] 0: Y
I tensorflow/core/common_runtime/gpu/gpu_device.cc:838] Creating TensorFlow device (/gpu:0) -> (device: 0, name: GeForce GTX 1080, pci bus id: 0000:01:00.0)
Run Code Online (Sandbox Code Playgroud)
我的问题是如何从TensorFlow获取有关当前可用GPU的信息?我可以从日志中获取加载的GPU信息,但我希望以更复杂的程序化方式完成.我也可以故意使用CUDA_VISIBLE_DEVICES环境变量限制GPU,所以我不想知道从OS内核获取GPU信息的方法.
简而言之,如果机器中有两个可用的GPU ,我希望这样的函数tf.get_available_gpus()
将返回['/gpu:0', '/gpu:1']
.我该如何实现呢?
我试图从我的网格中获得更多的处理能力.
我正在使用所有cpus/core,是否有可能在C#中使用GPU.
任何人都知道任何库或获得任何示例代码?
问题:是否有Geforce卡的仿真器,可以让我在没有实际硬件的情况下编程和测试CUDA?
信息:
I'm looking to speed up a few simulations of mine in CUDA, but my problem is that I'm not always around my desktop for doing this development. I would like to do some work on my netbook instead, but my netbook doesn't have a GPU. Now as far as I know, you need a CUDA capable GPU to run CUDA. Is there a way to get around this? It would seem like the only way is a GPU …
这是一个关于如何确定CUDA网格,块和线程大小的问题.这是对此处发布的问题的另一个问题:
在此链接之后,talonmies的答案包含一个代码片段(见下文).我不理解评论"通常由调整和硬件约束选择的值".
我没有找到一个很好的解释或澄清,在CUDA文档中解释了这一点.总之,我的问题是如何在给定以下代码的情况下确定最佳块大小(=线程数):
const int n = 128 * 1024;
int blocksize = 512; // value usually chosen by tuning and hardware constraints
int nblocks = n / nthreads; // value determine by block size and total work
madd<<<nblocks,blocksize>>>mAdd(A,B,C,n);
Run Code Online (Sandbox Code Playgroud)
顺便说一句,我从上面的链接开始我的问题,因为它部分回答了我的第一个问题.如果这不是在Stack Overflow上提问的正确方法,请原谅或建议我.
我想知道是否pytorch
正在使用我的GPU.可以nvidia-smi
在进程中检测GPU是否有任何活动,但我想要用python
脚本编写的东西.
有办法吗?
更新:此问题与Google Colab的"笔记本设置:硬件加速器:GPU"有关.这个问题是在添加"TPU"选项之前编写的.
阅读关于谷歌Colaboratory提供免费特斯拉K80 GPU的多个激动人心的公告,我试图快速运行它上课,因为它永远不会完成 - 快速耗尽内存.我开始调查原因.
最重要的是,"免费特斯拉K80"对所有人来说都不是"免费" - 因为有些只是"免费"的一小部分.
我从加拿大西海岸连接到谷歌Colab,我只得到0.5GB的24GB GPU内存.其他用户可以访问11GB的GPU RAM.
显然,0.5GB的GPU RAM不足以满足大多数ML/DL的工作需求.
如果你不确定你得到了什么,这里有一点点调试功能(只适用于笔记本的GPU设置):
# memory footprint support libraries/code
!ln -sf /opt/bin/nvidia-smi /usr/bin/nvidia-smi
!pip install gputil
!pip install psutil
!pip install humanize
import psutil
import humanize
import os
import GPUtil as GPU
GPUs = GPU.getGPUs()
# XXX: only one GPU on Colab and isn’t guaranteed
gpu = GPUs[0]
def printm():
process = psutil.Process(os.getpid())
print("Gen RAM Free: " + humanize.naturalsize( psutil.virtual_memory().available ), " | Proc size: " + …
Run Code Online (Sandbox Code Playgroud) 我理解如何编写OpenGL/DirectX程序,我知道它背后的数学和概念性东西,但我很好奇GPU-CPU通信如何在低级别上工作.
假设我有一个用C语言编写的OpenGL程序,它显示一个三角形并将相机旋转45度.当我编译这个程序时,它会变成一系列ioctl调用,然后gpu驱动程序将相应的命令发送到gpu,其中旋转三角形并设置适当颜色的适当像素的所有逻辑都是有线的在?或者程序是否会被编译成一个"gpu程序",它被加载到gpu并计算旋转等?还是完全不同的东西?
编辑:几天后我发现这篇文章系列,基本上回答了这个问题:http: //fgiesen.wordpress.com/2011/07/01/a-trip-through-the-graphics-pipeline-2011-part- 1 /