小编ein*_*ica的帖子

没有特殊标志的cudaMallocHost()和cudaHostAlloc()之间有什么区别吗?

在CUDA,我想知道cudaMallocHost()和之间的区别cudaHostAlloc().

他们各自在API参考中的摘要说:

  • cudaMallocHost():"在主机上分配页面锁定的内存."
  • cudaHostAlloc():"在主机上分配页面锁定的内存."

并且进一步的描述似乎只是可以指定的附加标志cudaHostAlloc().前者只是为了向后兼容而保留,还是它们之间存在实际差异?

PS - 让我们假设CUDA 6.5及更高版本.

c++ memory-management cuda

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

CMake:如何在 add_custom_command(...) 中使用 if 条件

我想通过 add_custom_command(...) 在 CMakeLists.txt 中使用 Linux if 条件,因为我需要运行这些 if 条件并在 makefile 中做一些判断。像这样:

cmake_minimum_required(VERSION 2.8)
add_custom_target(temp_target ALL)
add_custom_command(TARGET temp_target
                   PRE_BUILD
                   COMMAND if ["a" != "b"]; then echo 1; fi;
                   VERBATIM )
Run Code Online (Sandbox Code Playgroud)

如果我想使用我该怎么办

if ["a" != "b"]; then echo 1; fi;
Run Code Online (Sandbox Code Playgroud)

什么时候制作makefile?非常感谢您的帮助!

linux bash makefile cmake cmake-custom-command

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

为什么不将typename模板参数隐式识别为类型?

通常在C++类定义中,特别是在库,特征类等中,您会看到类似于以下代码段的代码:

template <typename Bar, typename Baz>
class Foo {
    using bar_type = Bar;
    using baz_type = Baz;
    // ... etc.
}
Run Code Online (Sandbox Code Playgroud)

只有这些行才可以在以后引用Foo<A,B>::bar_typeFoo<C,D>:baz_type.我想知道:为什么语言标准不要求编译器使用typename模板参数自动定义类型,即允许使用行删除两个,并识别Foo<A,B>::Baras AFoo<C,D>::Bazas D

这甚至不应该破坏现有代码,因为在Foo中,无论如何都已经使用了标识符Bar和Baz.

c++ templates using-directives language-lawyer c++17

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

是否可以用C++而不是C编写OpenCL内核?

我知道有一个openCL C++ API,但是我在编译内核时遇到了麻烦......内核是否必须用C语言编写?然后它只是允许用C++编写的主机代码?或者有没有办法在C++中编写我没有找到的内核?具体来说,我正在尝试使用pyopencl编译我的内核,它似乎失败了,因为它将它们编译为C代码.

c++ gpgpu opencl pyopencl

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

在 Doxygen 中引用模板参数的正确方法是什么?

一个后续问题:

在 Doxygen 中引用参数的正确方法是什么?

所以,对于参数,我们使用 @param

@param my_param the quick brown fox takes this parameter over the lazy dog
Run Code Online (Sandbox Code Playgroud)

然后我们可以使用它来引用它@p

@param my_other_param this is completely different from @p my_param , you know!
Run Code Online (Sandbox Code Playgroud)

现在,对于模板参数,我将替换@param@tparam. 应该用什么代替@p

c++ templates doxygen

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

cudaMemPrefetchAsync() 返回 cudaErrorInvalidDevice - 为什么?

每当我调用它时cudaMemPrefetchAsync(),它都会返回错误代码cudaErrorInvalidDevice。我确信我传递了正确的设备 ID(我的笔记本电脑中只有一个支持 CUDA 的 GPU id == 0)。

我相信下面发布的代码示例是没有错误的,但是在行52(调用cudaMemPrefetchAsync())中我不断收到此错误。


我试过:

  1. 干净的驱动程序安装。(最新版本)
  2. 我检查谷歌寻找答案,但找不到任何答案。(我只找到了这个

(其他的我没啥想法了)


系统规格:

操作系统: Microsoft Windows 8.1 x64 家庭版。
IDE: Visual studio 2015
CUDA 工具包: 8.0.61
NVIDIA GPU: GeForce GTX 960M
NVIDIA GPU 驱动程序:版本 381.65(最新)
计算能力: 5.0 (Maxwell)
统一内存支持:支持。
英特尔集成GPU:英特尔高清显卡4600


代码示例:

/////////////////////////////////////////////////////////////////////////////////////////////////////////
// TEST AREA:
// -- INCLUDE: 
/////////////////////////////////////////////////////////////////////////////////////////////////////////

// Cuda Libs: ( Device Side ):
#include <cuda_runtime.h>
#include <device_launch_parameters.h>

// Std C++ Libs:
#include …
Run Code Online (Sandbox Code Playgroud)

debugging cuda

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

仔细检查锁定模式 - 在传递给call_once的lambda中捕获

我正在观看Herb Sutter的CppCon 2014关于无锁编程的讨论.

第7页的讲义中,我们有以下代码:

static unique_ptr<widget> widget::instance;
static std::once_flag widget::create;

widget& widget::get_instance() {
    std::call_once( create, [=]{ instance = make_unique<widget>(); } );
    return *instance;
}
Run Code Online (Sandbox Code Playgroud)

我的问题:为什么[=]在这里使用捕获,而不是[&](或者只是[]?)

cppreference说:

[=] 如果存在,则通过引用捕获lambda主体中使用的所有自动变量,并通过引用捕获当前对象

但我们没有任何自动变量,也不需要当前对象.

c++ lambda c++11 std-call-once

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

gsl::string_span 和 std::string_view 有何不同?

据我所知,gsl::string_spanstd::string_view似乎有本质上使用的同一个道理。真的是这样吗?如果是这样,它们实际上是否相同?如果不是 - 它们有什么不同?

相关问题:`gsl::string_span` 的目的是什么?

string-view guideline-support-library string-span

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

ImportError:libcuda.so.1:无法打开共享对象文件

当我直接使用 TensorFlow 运行代码时,一切正常。

但是,当我在屏幕窗口中运行它时,出现以下错误。

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

我已经尝试过命令:

source /etc/profile
Run Code Online (Sandbox Code Playgroud)

但这不起作用。

因为我使用ssh连接到服务器,所以屏幕是必要的。

我该如何修复它?

python cuda screen tensorflow cuda-driver

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

我可以让 git 在签出分支时自动更新子模块吗?

我正在开发一个包含一些子模块的 git 存储库,这些子模块在不同的分支上有不同的修订版。当我切换分支时,我得到:

M          path/to/subrepo
Switched to branch 'another-branch'
Run Code Online (Sandbox Code Playgroud)

信息。然后我手动执行:

git submodule update --recursive
Run Code Online (Sandbox Code Playgroud)

然后这种情况就消失了。

我尝试在 .git/hooks/post-checkout 中编写一个 git hook:

#!/bin/bash

exec git submodules update --recursive
Run Code Online (Sandbox Code Playgroud)

但这似乎没有任何作用。我尝试从 post-hook 行添加 exec echo hello - 似乎也不起作用。

我的问题:我可以配置 git 以便分支签出本身默认也会更新子模块吗?

git git-checkout git-submodules

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