标签: nvidia

Tensorflow未在GPU上运行

我已经花了相当多的时间在堆栈溢出上挖掘,否则寻找答案,但找不到任何东西

大家好,

我正在使用Keras运行Tensorflow.我90%肯定我安装了Tensorflow GPU,有没有办法检查我做了哪个安装?

我试图从Jupyter笔记本运行一些CNN模型,我注意到Keras在CPU上运行模型(检查任务管理器,CPU为100%).

我尝试从tensorflow网站运行此代码:

# Creates a graph.
a = tf.constant([1.0, 2.0, 3.0, 4.0, 5.0, 6.0], shape=[2, 3], name='a')
b = tf.constant([1.0, 2.0, 3.0, 4.0, 5.0, 6.0], shape=[3, 2], name='b')
c = tf.matmul(a, b)
# Creates a session with log_device_placement set to True.
sess = tf.Session(config=tf.ConfigProto(log_device_placement=True))
# Runs the op.
print(sess.run(c))
Run Code Online (Sandbox Code Playgroud)

这就是我得到的:

MatMul: (MatMul): /job:localhost/replica:0/task:0/cpu:0
2017-06-29 17:09:38.783183: I c:\tf_jenkins\home\workspace\release-win\m\windows\py\35\tensorflow\core\common_runtime\simple_placer.cc:847] MatMul: (MatMul)/job:localhost/replica:0/task:0/cpu:0
b: (Const): /job:localhost/replica:0/task:0/cpu:0
2017-06-29 17:09:38.784779: I c:\tf_jenkins\home\workspace\release-win\m\windows\py\35\tensorflow\core\common_runtime\simple_placer.cc:847] b: (Const)/job:localhost/replica:0/task:0/cpu:0
a: (Const): /job:localhost/replica:0/task:0/cpu:0
2017-06-29 17:09:38.786128: I c:\tf_jenkins\home\workspace\release-win\m\windows\py\35\tensorflow\core\common_runtime\simple_placer.cc:847] a: …
Run Code Online (Sandbox Code Playgroud)

nvidia keras tensorflow cudnn

25
推荐指数
3
解决办法
3万
查看次数

cuda内核调用是同步还是异步

我读到可以使用内核启动来同步不同的块,即,如果我希望所有块在继续操作2之前完成操作1,我应该将操作1放在一个内核中,将操作2放在另一个内核中.这样,我就可以实现块之间的全局同步.但是,cuda c编程指南提到内核调用是异步的,即.CPU不会等待第一个内核调用完成,因此,CPU也可以在第一个内核完成之前调用第二个内核.但是,如果这是真的,那么我们就不能使用内核启动来同步块.请让我知道我哪里出错了

cuda nvidia

24
推荐指数
2
解决办法
2万
查看次数

如何管理CUDA内存?

当我运行仅分配少量全局内存(低于20 M)的CUDA程序时,出现"内存不足"错误.(从其他人的帖子中,我认为问题与内存碎片有关)我试着理解这个问题,并意识到我有几个与CUDA内存管理有关的问题.

  1. CUDA中是否有虚拟内存概念?

  2. 如果只允许一个内核同时在CUDA上运行,在终止后,它使用或分配的所有内存都将被释放?如果没有,这些内存何时免费发布?

  3. 如果允许在CUDA上运行多个内核,他们如何确保他们使用的内存不重叠?

谁能帮我回答这些问题?谢谢

编辑1:操作系统:x86_64 GNU/Linux CUDA版本:4.0设备:Geforce 200,它是连接到机器的GPUS之一,我不认为它是显示设备.

编辑2:以下是我做了一些研究后得到的结果.随意纠正我.

  1. CUDA将为每个主机线程创建一个上下文.此上下文将保留诸如内存的哪一部分(预先分配的内存或动态分配的内存)等信息已保留给此应用程序,以便其他应用程序无法写入该应用程序.当此应用程序终止(不是内核)时,将释放这部分内存.

  2. CUDA内存由链接列表维护.当应用程序需要分配内存时,它将通过此​​链接列表查看是否有可用于分配的连续内存块.如果找不到这样的块,即使总可用内存大小大于请求的内存,"内存不足"错误也会向用户报告.这就是与内存碎片有关的问题.

  3. cuMemGetInfo将告诉您有多少可用内存,但不一定是由于内存碎片而可以在最大分配中分配多少内存.

  4. 在Vista平台(WDDM)上,GPU内存虚拟化是可能的.也就是说,多个应用程序几乎可以分配整个GPU内存,WDDM将管理交换数据到主内存.

新问题:1.如果在应用程序终止后上下文中保留的内存将完全释放,则不应存在内存碎片.内存中必须留有某种数据.2.有没有办法重构GPU内存?

cuda nvidia gpu-programming

24
推荐指数
1
解决办法
1万
查看次数

#pragma unroll做了什么?它会影响线程数吗?

我是CUDA的新手,我无法理解循环展开.我写了一段代码来理解这项技术

__global__ void kernel(float *b, int size)
{
    int tid = blockDim.x * blockIdx.x + threadIdx.x;
 #pragma unroll
    for(int i=0;i<size;i++)
        b[i]=i;
}
Run Code Online (Sandbox Code Playgroud)

以上是我的核心功能.在main我称之为下面

int main()
{
    float * a; //host array
    float * b; //device array
    int size=100;

    a=(float*)malloc(size*sizeof(float));
    cudaMalloc((float**)&b,size);
    cudaMemcpy(b, a, size, cudaMemcpyHostToDevice);

    kernel<<<1,size>>>(b,size); //size=100

    cudaMemcpy(a, b, size, cudaMemcpyDeviceToHost);

    for(int i=0;i<size;i++)
        cout<<a[i]<<"\t";

    _getch();

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

这是否意味着我有size*size= 10000个线程运行来执行程序?在展开循环时是否创建了100个?

cuda nvidia pragma loop-unrolling

24
推荐指数
1
解决办法
3万
查看次数

在一个GPU上运行多个CUDA应用程序

CUDA文档没有具体说明有多少CUDA进程可以共享一个GPU.例如,如果同一个用户在系统中只安装了一个GPU卡的情况下启动了多个CUDA程序,效果如何?它会保证执行的正确性吗?在这种情况下,GPU如何安排任务?

cuda gpu gpgpu nvidia

24
推荐指数
1
解决办法
1万
查看次数

每个网格的最大块数:CUDA

每个内核启动可以创建的网格中的最大块数是多少?从那以后我有点困惑

现在,这里的计算能力表表明,在CUDA计算能力2.0中,每个网格可以有65535个块.

这是否意味着总块数= 65535*65535?

或者它是否意味着您可以将最多65535重新排列为65536块的1d网格或sqrt(65535)*sqrt(65535)的2d网格?

谢谢.

cuda nvidia

23
推荐指数
1
解决办法
3万
查看次数

VAO和元素数组缓冲区状态

我最近写一些的OpenGL 3.3代码与顶点数组对象(VAO)并测试它以后英特尔图形适配器,我发现,我感到失望,该元件阵列缓冲器结合显然不是VAO状态的一部分,作为呼叫:

glBindVertexArray(my_vao);
glDrawElements(GL_TRIANGLE_STRIP, count, GL_UNSIGNED_INTEGER, 0);
Run Code Online (Sandbox Code Playgroud)

没有效果,而:

glBindVertexArray(my_vao);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, my_index_buffer); // ?
glDrawElements(GL_TRIANGLE_STRIP, count, GL_UNSIGNED_INTEGER, 0);
Run Code Online (Sandbox Code Playgroud)

渲染几何体.我认为这是在英特尔执行的OpenGL(因为它是在GL_ARB_vertex_array_object即使在GL_OES_vertex_array_object明确提出(和)该元素阵列的一个单纯的错误保存状态的一部分),但随后在移动的NVIDIA Quadro 4200发生这不好玩.

它是我的代码中的驱动程序错误,规格错误或错误吗?代码在GeForce 260和480上完美运行.

有没有类似的经历?

什么也奇怪的是,GL_EXT_direct_state_access不具有结合元件阵列缓冲器到VAO的函数(但是它确实有功能来指定顶点ATTRIB阵列,因此阵列缓冲器).GPU制造商是否违反规范并欺骗我们,或者是什么?

编辑:

我原本不打算显示任何源代码,因为我认为这里没有必要.但是根据要求,这是重现问题的最小测试用例:

static GLuint n_vertex_buffer_object, p_index_buffer_object_list[3];
static GLuint p_vao[2];

bool InitGLObjects()
{
    const float p_quad_verts_colors[] = {
        1, 0, 0, -1, 1, 0,
        1, 0, 0, 1, 1, 0,
        1, 0, 0, 1, -1, 0,
        1, 0, 0, -1, -1, 0, // red quad
        0, 0, 1, -1, 1, 0,
        0, 0, 1, …
Run Code Online (Sandbox Code Playgroud)

opengl nvidia intel vertex-array opengl-3

22
推荐指数
2
解决办法
2万
查看次数

CUDA C和C++的说明

谁能给我一个关于CUDA C和C++本质的很好的解释?据我了解,CUDA应该是带有NVIDIA GPU库的C语言.截至目前,CUDA C支持一些C++功能,但不支持其他功能.

什么是NVIDIA的计划?他们是否会在C上构建并添加与C++相似的库(例如Thrust vs. STL)?他们最终会支持所有的C++吗?在.cu文件中使用C++标头是不是很糟糕?

c c++ cuda nvidia

22
推荐指数
3
解决办法
2万
查看次数

在训练LSTM/RNN模型时,为什么我的GPU比CPU慢?

我的机器有以下规格:

CPU:Xeon E5-1620 v4

GPU:Titan X(Pascal)

Ubuntu 16.04

Nvidia车手375.26

CUDA取得8.0

cuDNN 5.1

我已经使用Tensorflow作为支持参考的以下Keras示例进行了基准测试:

SCRIPT NAME                  GPU       CPU
stated_lstm.py               5sec      5sec 
babi_rnn.py                  10sec     12sec
imdb_bidirectional_lstm.py   240sec    116sec
imbd_lstm.py                 113sec    106sec
Run Code Online (Sandbox Code Playgroud)

我的gpu显然在非lstm模型中执行我的cpu.

SCRIPT NAME                  GPU       CPU
cifar10_cnn.py               12sec     123sec
imdb_cnn.py                  5sec      119sec
mnist_cnn.py                 3sec      47sec 
Run Code Online (Sandbox Code Playgroud)

还有其他人经历过这个吗?

nvidia machine-learning keras tensorflow

22
推荐指数
4
解决办法
2万
查看次数

如何在 Windows 上运行 nvidia-smi?

nvidia-smi 在 Windows 中的命令提示符 (CMD) 中执行返回以下错误

C:\Users>nvidia-smi
'nvidia-smi' is not recognized as an internal or external command,
operable program or batch file.
Run Code Online (Sandbox Code Playgroud)

它位于哪里?CUDA 已经安装。

windows nvidia

22
推荐指数
3
解决办法
5万
查看次数