小编use*_*302的帖子

使用 nvidia 运行时构建 docker

我有一个 GPU 应用程序,可以在图像构建阶段进行单元测试。使用 Docker 19.03,可以指定 nvidia 运行时,docker run --gpus all但我还需要访问 GPU,docker build因为我进行单元测试。我怎样才能实现这个目标?

对于使用 nvidia-docker2 的旧版本 docker,无法在构建阶段指定运行时,但您可以将默认运行时设置为 nvidia,并且 docker 构建可以正常工作。我可以在不再需要 nvidia-docker 的 Docker 19.03 中执行此操作吗?如果是这样,怎么办?

docker nvidia-docker

15
推荐指数
3
解决办法
7447
查看次数

仅遍历第一个和最后一个元素

给定N元素,仅处理第一个(0)和最后一个(N-1)元素.

但是,如果N = 1只处理单个元素一次.

使用一个或两次运行的循环,可以避免重复循环体.如果有一种可读的方法,那么它对源代码大小有好处.如果循环体很大,它也可能对机器代码大小有好处,并且编译器最终不会复制它.


我试过递增N-1但是当N=1(永远循环)时它不起作用.有没有技巧(反向循环fi)来解决这个问题?

for (i = 0 ; i < N ; i += (N - 1))
Run Code Online (Sandbox Code Playgroud)

编辑:

我原来的问题涉及x,y,z方向的三个嵌套循环,这就是为什么我不能只处理elem [0])和elem [N-1].现在我有以下内容

#define forEachLglBound(i_,j_,k_)                                   \
        for(Int i_ = 0;i_ < NPX;i_+=((NPX>1) ? (NPX-1) : 1))        \
            for(Int j_ = 0;j_ < NPY;j_+=((NPY>1) ? (NPY-1) : 1))    \
                for(Int k_ = 0;k_ < NPZ;k_+=((NPZ>1) ? (NPZ-1) : 1))
Run Code Online (Sandbox Code Playgroud)

c loops for-loop

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

使用 gfortran 在宏中连接字符串

用于连接 ( ##)的 C 预处理器宏在使用 gfortran 的 Mac 上似乎不起作用。在其他系统上使用其他 Fortran 编译器是可行的,所以我正在寻找 gfortran 的解决方法。我必须使用##来创建许多变量,所以我不能没有它们。

示例代码:

#define CONCAT(x,y) x##y
program main
   integer, parameter:: CONCAT(ID,2) = 3
   print*,"Hello", ID_2
end program main
Run Code Online (Sandbox Code Playgroud)

在 MAC 上使用 gfortran 编译错误

gfortran m.F90 -o m
m.F90:5.23:
integer, parameter:: ID##2 = 3
                       1
Error: PARAMETER at (1) is missing an initializer
Run Code Online (Sandbox Code Playgroud)

macos macros fortran gfortran c-preprocessor

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

带宽的nvprof选项

使用命令行中的nvprof --metrics测量带宽的正确选项是什么?我正在使用flop_dp_efficiency来获得峰值FLOPS的百分比,但是手册中的带宽测量似乎有很多选项,我真的不明白我在测量什么.例如dram_read,dram_write,gld_read,gld_write对我来说都是一样的.另外,如果假设两者同时发生,我应该将bandwdith报告为读写吞吐量的总和吗?

编辑:

根据图中的优秀答案,从设备内存到内核的带宽是多少?我想在从内核到设备内存的路径上占用最小的带宽(读取+写入),这可能是L2缓存.

我试图通过测量FLOPS和带宽来确定内核是否受计算或内存限制.

profiling cuda nvprof

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

友元函数和复制构造函数

当友元函数 mag() 在类内部定义时,下面显示的代码不会编译,但如果在类外部定义(已注释),则可以工作。我认为差异是由用于将参数类型从 A 更改为 B 的复制构造函数引起的。有人可以解释为什么我应该在外部定义友元函数吗?

而且,如果B类是模板类(template <class T>在最上面添加),在外面定义友元函数也是不行的。

#include <iostream>
using namespace std;

class A {
};

class B {
public:
    B(const  A& p) {
        std::cout << "Copy/Conversion constructor" << std::endl;
    }
    friend void mag(const B& p) {
        std::cout << "Mag Inside`.\n";
    }
};
//void mag(const B& p) {
//     std::cout << "Mag Outside.\n";
//}
int main() {
    A a;
    mag(a);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

c++ templates copy-constructor friend-function

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