小编Say*_*yan的帖子

Gnuplot的多时隙模式下的屏幕尺寸

我有5个子图,其中只有四个显示.代码片段如下,因为原始代码很长; 我无法增加屏幕尺寸以适应第5个绘图,因此,只有前四个显示:

set output 'test.png'
set size 1.75,1.75
set terminal png font "/Library/Fonts/Times New Roman Bold.ttf, 10" size 1000,700   
set origin 0,0
set multiplot

#1st
set size 0.5,0.5
set origin 0,0.5
...
#2nd
set size 0.5,0.5
set origin 0,0
...
#3rd
set size 0.5,0.5
set origin 0.5,0
...
#4th
set size 0.5,0.5
set origin 0.5,0.5
...
#5th, and this one is not showing up
set size 0.5,0.5
set origin 1,0.5
...
Run Code Online (Sandbox Code Playgroud)

我哪里错了?

gnuplot

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

使用事件计时CUDA应用程序

我使用以下两个函数来计算我的代码的不同部分(cudaMemcpyHtoD,内核执行,cudaMemcpyDtoH)(其中包括多个gpus,同一GPU上的并发内核,内核的顺序执行等).据我所知,这些函数会记录事件之间经过的时间,但我想在代码的生命周期中插入事件可能会导致开销和不准确.我想听听批评意见,改善这些功能的一般建议以及对它们的警告.

//Create event and start recording
cudaEvent_t *start_event(int device, cudaEvent_t *events, cudaStream_t streamid=0)
{
        cutilSafeCall( cudaSetDevice(device) );
        cutilSafeCall( cudaEventCreate(&events[0]) );
        cutilSafeCall( cudaEventCreate(&events[1]) );
        cudaEventRecord(events[0], streamid);

    return events;
 }

 //Return elapsed time and destroy events
 float end_event(int device, cudaEvent_t *events, cudaStream_t streamid=0)
 {

        float elapsed = 0.0;
        cutilSafeCall( cudaSetDevice(device) );
        cutilSafeCall( cudaEventRecord(events[1], streamid) );
        cutilSafeCall( cudaEventSynchronize(events[1]) );
        cutilSafeCall( cudaEventElapsedTime(&elapsed, events[0], events[1]) );

        cutilSafeCall( cudaEventDestroy( events[0] ) );
        cutilSafeCall( cudaEventDestroy( events[1] ) );

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

用法:

cudaEvent_t *events;
cudaEvent_t event[2]; //0 …
Run Code Online (Sandbox Code Playgroud)

cuda timer

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

CUDA:主机到设备的带宽大于PCIe的峰值b/w?

对于另一个问题,我使用了相同的情节.可以看出峰值带宽超过5.5GB/s.我正在使用代码示例中的NVidia带宽测试程序来查找主机到设备之间的带宽,反之亦然.该系统由两个插座上的12个Intel Westmere CPU,4个Tesla C2050 GPU和4个PCIe Gen2 Express插槽组成.现在的问题是,由于PCIe x16 Gen2的峰值带宽在一个方向上是4GB/s,为什么我在进行主机到设备传输时获得更多带宽?在此输入图像描述

我记得每个PCIe都通过I/O控制器集线器连接到CPU,I/O控制器集线器通过QPI(更多b/w)连接到CPU.

cuda bandwidth

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

fmad = false表现良好

来自Nvidia发行说明:

 The nvcc compiler switch, --fmad (short name: -fmad), to control the contraction of    
 floating-point multiplies and add/subtracts into floating-point multiply-add   
 operations (FMAD, FFMA, or DFMA) has been added: 
 --fmad=true and --fmad=false enables and disables the contraction respectively. 
 This switch is supported only when the --gpu-architecture option is set with     
 compute_20, sm_20, or higher. For other architecture classes, the contraction is     
  always enabled. 
 The --use_fast_math option implies --fmad=true, and enables the contraction.
Run Code Online (Sandbox Code Playgroud)

我有两个内核 - 一个是纯粹的计算绑定,有很多乘法,而另一个是内存绑定.当我这样做时,我注意到我的计算密集型内核的性能持续改善(大约5%),-fmad=false并且当我为内存绑定内核关闭时,性能下降相同.所以,FMA对我的内存绑定内核工作得更好,但我的计算绑定内核可以通过关闭它来挤出一点性能.可能是什么原因?我的设备是M2090,我使用的是CUDA 4.2.

完整的编译选项:( -arch,sm_20,-ftz=true,-prec-div=false,-prec-sqrt=false,-use_fast_math,-fmad=false …

cuda nvidia fma

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

加密 HTTP POST 数据

我有一个 HTTP POST 字符串,我正在从客户端 cpp 程序针对运行 Apache 的服务器运行该字符串。以下是将从客户端触发的 POST 字符串:

"POST %s HTTP/1.0\r\n" 
"Host: %s\r\n"
"Content-type: multipart/form-data\r\n"
"Content-length: %d\r\n\r\n"
"Content-Disposition: %s; filename: %s\n"
Run Code Online (Sandbox Code Playgroud)

如果有人能帮助我了解如何加密现场的数据,那就太好了Content-Disposition:。此外,我注意到,即使我在 POST 字符串的右侧添加了一些无关紧要的内容,例如: "POST %s HTTPGarbage/1.0\r\n",传输仍然会发生,如果我也被告知这种行为,那将是很棒的。

https post http

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

CUDA:HtoD 和 DtoH 带宽之间的差异

另一个与带宽相关的问题。我预计设备到主机带宽的图和主机到设备的带宽图相似,但我发现两者之间存在显着差异。考虑到两者都走相同的路线,所以有效带宽应该是相同的,不是吗?该测试台由两个插槽上的总共 12 个 Intel Westmere CPU、4 个带有 4 个 PCIe Gen2 Express 插槽的 Tesla C2050 GPU 组成。使用 NVidia 代码示例中的带宽测试程序。在此输入图像描述

从主机与设备执行 cudamemCpy 的开销是多少?

cuda bandwidth

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

VIM搜索以&符号开头的字符

我必须搜索类似的内容&variable(并替换为&variable.test).我可以这样做\&variable,但是vim还会向我显示所有以&variable(&variableXXX例如)开头的字符,这是我不想要的.我想这 - /\<\&variable\>会工作,请让我知道我哪里出错了.

vim

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

类似的C和Fortran代码的结果不同

这是一个家庭作业(过去的截止日期)的观察,我们不得不使用欧拉显式方案来研究捕食者 - 食饵模型.我比较了Fortran和C代码(下面给出),当我比较Fortran代码和C代码时,我无法解释为什么结果有差异.

C代码:

#include <stdio.h>

//Functions for Euler Explicit
float FR(float R,float F,float alpha)
{
    return (2*R - alpha*R*F);
}

float FF(float R,float F,float alpha)
{
    return (-F + alpha*R*F);
}

int main()
{
    int N;
    float alpha,initR,initF,bigR,h;

    /* Data Setup */
    alpha   = 0.001;
    initR   = 15;
    initF   = 22;
    N       = 50;
    bigR    = 400;
    h       = 0.01;

    float R0,F0,R1,F1;
    int i;

    R0 = initR;
    F0 = initF;

    for (i = 0; i < N; i++) 
    { …
Run Code Online (Sandbox Code Playgroud)

c fortran numerical-methods

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

将指针存储到向量时内存泄漏

我已经阅读了有关同一主题的多个类似问题,但是我无法通过关注它来解决我的问题.

我想在向量中存储指针,但我看到内存泄漏.我的代码如下.

#include <iostream>
#include <vector>
#include <memory>

class Base 
{
    public:
       virtual ~Base() {}
};

class Derived : public Base {};

std::vector<std::unique_ptr<Base>> bv;

int main()
{
    for (int i = 0; i < 10; i++)
       bv.emplace_back(std::make_unique<Base>(Derived()));

    bv.clear();

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

Valgrind报告:"仍然可以访问:1个块中72,704个字节".如果我不使用unique_ptr,只是使用bv.emplace_back(new Derived);,并delete从向量中明确指出,我有同样的问题.什么导致泄漏?

c++ valgrind smart-pointers vector unique-ptr

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

CUDA 4.0 Peer to Peer Access混淆

我有两个与CUDA 4.0 Peer访问相关的问题:

  1. 有什么方法可以复制像这样的数据GPU#0 ---> GPU#1 ---> GPU#2 ---> GPU#3.目前在我的代码中,当我一次只使用两个GPU时,它工作正常,但是当我使用第三个GPU检查对等访问时失败cudaDeviceCanAccessPeer.所以,以下工作 - cudaDeviceCanAccessPeer(&flag_01, dev0, dev1)但是当我有两个这样的语句时: cudaDeviceCanAccessPeer(&flag_01, dev0, dev1)cudaDeviceCanAccessPeer(&flag_12, dev1, dev2),后来失败(0返回到flag_12变量).

  2. 它是否仅适用于通过公共PCIe连接的GPU,还是Peer副本取决于底层PCIe互连?我不懂PCIe,但在做nvidia-smi时,我发现GPU的PCIe总线是2,3,83和84.

测试平台是双插槽6核Intel Westmere,带有4个GPU - Nvidia Tesla C2050.

编辑:HtoD和DtoH之间的带宽测试,以及两个GPU(DtoD)之间的SimpleP2P结果: 在此输入图像描述

cuda

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

如何在C++中使用默认模板参数显式实例化类?

我有一个类型和非类型(默认)模板参数的类.可以组合非类型参数,并可以通过以下方式实例化:

TNT<int> v;
TNT<double, X, Y> v2;
TNT<float, X | X1, Y1> v3;
TNT<int, X | X1, Y | Y1, Z | Z1 | Z2, W> v4;
Run Code Online (Sandbox Code Playgroud)

该类TNT有一个类型参数,其余是默认值.在cpp文件中显式实例化这样一个类的正确方法是什么?由于可以组合非类型参数,因此可以进行许多组合.

c++ explicit-instantiation c++11

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