小编Ben*_*enC的帖子

我应该如何以及何时使用cuda API使用倾斜指针?

我对如何使用cudaMalloc()和分配和复制线性内存有很好的理解cudaMemcpy().但是,当我想使用CUDA函数来分配和复制2D或3D矩阵时,我常常会被各种参数所迷惑,特别是关于在处理2D/3D数组时总是存在的倾斜指针.文档很适合提供一些如何使用它们的例子,但它假设我熟悉填充和音高的概念,我不是.

我通常最终会调整我在文档中或网络上其他地方找到的各种示例,但后面的盲目调试非常痛苦,所以我的问题是:

什么是球场?我该如何使用它?如何在CUDA中分配和复制2D和3D阵列?

c++ cuda

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

在本地调试Travis构建的当前工作流程是什么?

一个曾经是能够下载流浪盒调试特拉维斯构建(为GitHub的项目为实例).显然,这已不再可能,那么人们如何在本地调试复杂的Travis构建链?

debugging github travis-ci

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

Matplotlib savefig图像修剪

以下示例代码将生成一个没有轴的基本线图并将其另存为SVG文件:

import matplotlib.pyplot as plt
plt.axis('off')
plt.plot([1,3,1,2,3])
plt.plot([3,1,1,2,1])
plt.savefig("out.svg", transparent = True)
Run Code Online (Sandbox Code Playgroud)

如何设置图像的分辨率/尺寸?在线图之外的图像的所有边都有填充.如何删除填充以使线条出现在图像的边缘?

python matplotlib

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

不平衡树上基于GPU的包容性扫描

我有以下问题:我需要根据GPU上的树结构计算值的包容性扫描(例如前缀和).这些扫描来自根节点(自上而下)或叶节点(自下而上).简单链的情况很容易处理,但树结构使得并行化很难有效地实现.

树的例子

例如,在自上而下的包含扫描之后,(12)将保持(0)[op](6)[op](7)[op](8)[op](11)[op](12),并且对于自下而上的包含扫描,(8)将保持(8)[op](9)[op](10)[op](11)[op](12),其中[op]是给定的二元运算符(矩阵加法,乘法等).

还需要考虑以下几点:

  • 对于一个典型的场景,不同分支的长度不应该太长(~10),有5到10个分支,所以这将在块内运行并且工作将在线程之间分开.不同的块将简单地处理不同的节点值.这显然不是关于占用率的最佳选择,但这是对将在稍后解决的问题的约束.现在,我将依赖于指令级并行.
  • 图的结构不能改变(它描述了一个实际的系统),因此它不能平衡(或者只能通过改变树的根,例如使用(6)新的根).尽管如此,典型的树不应该太不平衡.
  • 我目前使用CUDA进行GPGPU,因此我对任何可以解决此问题的支持CUDA的模板库持开放态度.
  • 节点数据已经存在于全局内存中,结果将被其他CUDA内核使用,因此目标只是实现这一目标而不会成为一个巨大的瓶颈.
  • 没有"循环",即分支不能合并树.
  • 树的结构是固定的并且在初始化阶段设置.
  • 单个二进制运算可能非常昂贵(例如,多项式矩阵的乘法,即每个元素是给定顺序的多项式).

在这种情况下,什么是"最佳"数据结构(对于树结构)和最佳算法(对于包容性扫描/前缀总和)来解决这个问题?

algorithm tree cuda gpgpu

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

在现场演示中显示vim命令键

我要做一个显示vim功能的现场演示.显示我按下的观众命令键至关重要.我知道我可以使用showcmd,但我发现它的输出很小,很难注意到在现场演示中使用它.有没有办法让人们更容易注意到?它可能类似于Railscast中显示的命令键(例如在此视频中,1:11).你知道这样的事吗?

linux vim

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

git merge期间奇怪的输出

我在一个名为/ private/gmills的克隆中,我跑了git merge main_int.

我看到另一台机器上的其他用户对另一个克隆的引用.这是什么意思?

我只配置了一个远程配置,它没有指向另一个克隆或机器.

警告信息 :

warning: Failed to merge submodule projects/kernel (multiple merges found)
 1b64e534e162316a124f98edef6584d7ead1c563: > Merge branch 'main_int' into main_int_infra_xlp
 fe1ffcf1f49d8741e03710837fc6e1179b1cf222: > merge from main_int workspace:/private/sriniv/projects/kernel on build02
Run Code Online (Sandbox Code Playgroud)

有关远程存储库的信息:

git remote -v
origin  git@server:flt/root.git (fetch)
origin  git@server:flt/root.git (push)
Run Code Online (Sandbox Code Playgroud)

git git-merge git-submodules

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

使用额外括号时"错误:预期表达式"

我偶然发现了一个我没想到的编译器错误:

std::cout << sizeof(int)   << std::endl;  // ---> this is valid (obviously)
std::cout << sizeof((int)) << std::endl;  // ---> this leads to
                                          // "error: expected expression"
Run Code Online (Sandbox Code Playgroud)

同样,我们有:

template <typename T>
struct Foo
{
    T value;
};
Foo<int>   f1;  // ---> this is valid (obviously)
Foo<(int)> f2;  // ---> this leads to "error: expected expression"
Run Code Online (Sandbox Code Playgroud)

显然,编译器将其解释(T)为显式转换并停在那里.我理解错误,我理解编译器期待的是什么,我没有得到的是为什么(T)不能将T它视为不在上下文中(T)(exp).我认为编译器能够看透(并且可能会返回警告),所以我认为这意味着存在不明确的情况,允许那些额外的括号会导致错误.

我的问题是:什么时候会有危险?这是C++标准吗?

这是用clang 3.3测试的.和g ++ 4.7.2.

c++ syntax compiler-errors parentheses

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

将 CUDA printf 重定向到 C++ 流

问题陈述

我正在开发一个使用记录器进行调试的大型项目。因为我喜欢跟踪某些 CUDA 内核中发生的事情,所以我试图找到一种方法将printf我的 CUDA 内核重定向到一个stringstream(或任何流),然后可以将其转发到记录器。

可能的解决方案

我设法通过使用以下代码来做到这一点:

#include <cuda.h>
#include <stdio.h>
#include <unistd.h> // dup

#include <iostream>
#include <sstream> // stringstream
#include <fstream> // ofstream

char* output_file = "printf_redirect.log";

__global__ void printf_redirect(int* src, int* res)
{
    res[threadIdx.x] = threadIdx.x;
    printf("  %i: Hello World!\n", res[threadIdx.x]);
}

int main()
{
    using namespace std;

    const uint N = 2;

    // Note: dummy arrays are not actually used, but this should prevent the
    //       compiler from discarding the printf …
Run Code Online (Sandbox Code Playgroud)

c++ linux logging cuda io-redirection

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

Portaudio + Opus编码/解码音频输入

我正在使用Portaudio和opus在VOIP客户端上工作.我从一个帧中读取麦克风 - 使用Opus对每个帧进行编码并将其放入列表--pop列表中的第一个元素并对其进行解码 - 使用portaudio读取它

如果我在没有编码声音的情况下做同样的事情,那么效果很好.但是当我使用Opus时我的声音很糟糕,我无法理解声音(这对于voip客户端来说是不好的)

HandlerOpus::HandlerOpus(int sample_rate, int num_channels)
    {
        this->num_channels = num_channels;
        this->enc = opus_encoder_create(sample_rate, num_channels, OPUS_APPLICATION_VOIP, &this->error);
        this->dec = opus_decoder_create(sample_rate, num_channels, &this->error);

        opus_int32 rate;

        opus_encoder_ctl(enc, OPUS_GET_BANDWIDTH(&rate));
        this->encoded_data_size = rate;
    }

    HandlerOpus::~HandlerOpus(void)
    {
        opus_encoder_destroy(this->enc);
        opus_decoder_destroy(this->dec);
    }

    unsigned char *HandlerOpus::encodeFrame(const float *frame, int frame_size)
    {
        unsigned char *compressed_buffer;
        int ret;

        compressed_buffer = new (unsigned char[this->encoded_data_size]);
        ret = opus_encode_float(this->enc, frame, frame_size, compressed_buffer, this->encoded_data_size);
        return (compressed_buffer);
    }

    float *HandlerOpus::decodeFrame(const unsigned char *data, int frame_size)
    {
        int ret;
        float *frame = new …
Run Code Online (Sandbox Code Playgroud)

c++ audio voip portaudio opus

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

无法使用matplotlib正确导出到svg和pdf

我试图.svg基于此示例从交互式路径编辑器中保存图像:path_editor.py.保存PNG图像效果很好,但是当我保存为SVG或PDF时,不会导出路径.

fig.savefig('out.svg')   # missing paths
fig.savefig('out.pdf')   # missing paths
fig.savefig('out.png')   # ok
Run Code Online (Sandbox Code Playgroud)

在这种情况下,为了获得有效的SVG文件,还有什么额外的步骤吗?

我在Python 2.7中使用matplotlib 1.2.1.

PNG文件: PNG出口

SVG文件: SVG导出

UPDATE

这显然是matplotlib中的一个错误.我按照@tcaswell的建议在他们的github项目上创建了一个问题.

python pdf svg interactive matplotlib

5
推荐指数
0
解决办法
2036
查看次数