小编edh*_*dhu的帖子

Pycharm tensorflow ImportError但可以正常使用Terminal

我使用tensorflow安装了virtualenv,并将Python解释器设置更改为virtualenv所在的位置.当我运行程序时,它会给出错误:

ImportError: libcudnn.so.5: cannot open shared object file: No such file or directory
Run Code Online (Sandbox Code Playgroud)

我在.bashrc文件中写了以下行

export CUDA_HOME=/usr/local/cuda-8.0
export LD_LIBRARY_PATH=${CUDA_HOME}/lib64:$LD_LIBRARY_PATH
export PATH=${CUDA_HOME}/bin:${PATH}
Run Code Online (Sandbox Code Playgroud)

另外,我在以下路径中找到了libcudnn.so.5文件:

/usr/local/cuda-8.0/lib64 
Run Code Online (Sandbox Code Playgroud)

我在打开PyCharm之前遇到了这个错误,我确实设法安装了正确的cudnn版本.问题是,我可以使用

$ source [virtualenv_path]
Run Code Online (Sandbox Code Playgroud)

激活virtualenv并在终端中运行python,一切正常,没有显示错误.程序也在Pycharm的终端中运行没有错误,但只要我点击运行按钮就会给我上面的错误.环境变量还有问题吗?我如何解决它?

linux python-import pycharm tensorflow

8
推荐指数
1
解决办法
2354
查看次数

为什么C需要null零作为字符串终止符而Java不呢?

我注意到,当我创建一个字符数组来保存CI中的字符串时,总是需要在结尾添加一个空零作为终结符.例如:

char Month[10];
Month[0] = 'M';
Month[1] = 'a';
Month[2] = 'r';
Month[3] = 'c';
Month[4] = 'h';
Month[5] = '\0';
Run Code Online (Sandbox Code Playgroud)

这里我需要添加Month[5] = '\0'以使char数组显示正确的结果.如果我忽略零值,它将给出结果March_\377.但是在Java中我仍然可以在March不添加null零的情况下获得.我想知道C和Java如何以不同的方式处理这种情况?

c java

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

CUDA 无法使用所有可用的常量内存

我有一个使用协作组来执行某些操作的代码。因此我用以下方法编译我的代码:

/usr/local/cuda/bin/nvcc -arch=sm_61 -gencode=arch=compute_61,code=sm_61, --device-c -g -O2 foo.cu
Run Code Online (Sandbox Code Playgroud)

然后我尝试调用设备链接器:

/usr/local/cuda/bin/nvcc -arch=sm_61 -gencode=arch=compute_61,code=sm_61, -g -dlink foo.o
Run Code Online (Sandbox Code Playgroud)

然后它会产生错误:

ptxas 错误:文件使用太多全局常量数据(0x10100 字节,最大 0x10000)

该问题是由我分配常量内存的方式引起的:

__constant__ float d_cnst_centers[CONST_MEM / sizeof(float)];
Run Code Online (Sandbox Code Playgroud)

其中 CONST_MEM = 65536 字节,这是我从 SM_61 的设备查询中获得的。但是,如果我将常量内存减少到 64536 之类的值,问题就消失了。这几乎就像在编译期间为了某些目的而“保留”常量内存一样。我搜索了 CUDA 文档,但没有找到满意的答案。使用可用的最大常量内存是否安全?为什么会出现这个问题呢?

编辑:这是在 SM_61 上触发错误的代码片段:

#include <algorithm>
#include <vector>
#include <type_traits>
#include <cuda_runtime.h>
#include <cfloat>
#include <iostream>

#include <cooperative_groups.h>

using namespace cooperative_groups;


struct foo_params {
    float * points;
    float * centers;
    int * centersDist;
    int * centersIndex;
    int numPoints;
};

__constant__ float d_cnst_centers[65536 / sizeof(float)]; …
Run Code Online (Sandbox Code Playgroud)

cuda gpu nvidia

2
推荐指数
1
解决办法
887
查看次数

scanf和getchar处理流的方式有何不同?

我对scanf和getchar如何处理不同的流感到困惑,以下是示例代码:

while(scanf("%d", &input) != 1)
{
    while((ch = getchar()) != '\n')
    {
        putchar(ch);
    }
    printf("\nThis is wrong\n");
}

printf("That is right\n");
Run Code Online (Sandbox Code Playgroud)

这是一个简单的程序,用于测试输入是否为整数.内部while循环用于在单击Enter之前显示每个错误的输入值.当我输入一个随机字符串,如:

qwert
Run Code Online (Sandbox Code Playgroud)

putchar将打印出确切的字符串.但是,如果我换了

while(scanf("%d", &input) != 1)
Run Code Online (Sandbox Code Playgroud)

while((ch = getchar()) != '\n')
Run Code Online (Sandbox Code Playgroud)

并打印出完全相同的字符串,第一个字母"q"被删除.所以我的问题是外循环中的scanf和getchar如何处理这种情况?

c io scanf getchar

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

标签 统计

c ×2

cuda ×1

getchar ×1

gpu ×1

io ×1

java ×1

linux ×1

nvidia ×1

pycharm ×1

python-import ×1

scanf ×1

tensorflow ×1