小编Rob*_*lla的帖子

Qt:与Qt OSX优胜美地的CUDA"sed:非法选项 - r"错误

我正在使用Qt创建器构建一个简单的应用程序,其中我想利用CPU和GPU计算来完成任务,然后以m/s比较执行时间.

我已阅读了大量文章并得出结论,我需要将NVCC和GCC编译器彼此分开以避免冲突.我按照本教程,对我的系统进行了调整,但是当我编译时出现了一个奇怪的错误:

sed: illegal option -- r
usage: sed script [-Ealn] [-i extension] [file ...]
       sed [-Ealn] [-i extension] [-e script] ... [-f script_file] ... [file ...]
make: *** [gaussian_cuda.o] Error 1
14:42:46: The process "/usr/bin/make" exited with code 2.
Run Code Online (Sandbox Code Playgroud)

在我的.pro配置中,错误显然是从这一行抛出的:

2>&1 | sed -r \"s/\\(([0-9]+)\\)/:\\1/g\" 1>&2
Run Code Online (Sandbox Code Playgroud)

我不明白为什么这是一个非法操作,当我尝试删除此行时,我的代码完全中断.

为什么是r非法操作?

编辑完整的配置代码:

QT       += core gui
QT       += multimedia
QT       += multimediawidgets
QT       += concurrent

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

TARGET = WebcamFilter
TEMPLATE = …
Run Code Online (Sandbox Code Playgroud)

c++ qt cuda

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

使用CUDA进行Cholesky分解

我正在尝试使用cuSOLVER库实现Cholesky分解。我是一名初学者CUDA程序员,并且我一直指定块大小和网格大小,但是我无法找出程序员如何使用cuSOLVER函数显式设置它。

这是文档:http : //docs.nvidia.com/cuda/cusolver/index.html#introduction

QR分解是使用cuSOLVER库实现的(请参见此处的示例:http ://docs.nvidia.com/cuda/cusolver/index.html#ormqr-example1 ),即使在此处也未设置上述两个参数。

总结一下,我有以下问题

  • 如何使用cuSOLVER库设置参数:块大小和网格大小?
  • NVIDIA文档中提到的QR示例代码如何处理?

cuda gpu nvidia gpu-programming cusolver

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

如何从远程计算机运行CUDA/OpenGL互操作(粒子)示例

我试图从主机ubuntu机器上运行远程Ubuntu机器上的CUDA粒子样本.我遵循了这个教程:http: //devblogs.nvidia.com/parallelforall/remote-application-development-nvidia-nsight-eclipse-edition/它在我的主机上运行,​​但不在我的远程机器上运行.

我在Nsight中得到以下输出:

CUDA Particles Simulation Starting...

grid: 64 x 64 x 64 = 262144 cells
particles: 16384
No protocol specified
freeglut (/users/path/particles/Debug/particles): failed to open display ':0'
logout
Run Code Online (Sandbox Code Playgroud)

如果我从终端运行程序,我得到:

CUDA Particles Simulation Starting...

grid: 64 x 64 x 64 = 262144 cells
particles: 16384
CUDA error at ../src/particleSystem_cuda.cu:85  code=79(cudaErrorInvalidGraphicsContext)  "cudaGraphicsGLRegisterBuffer(cuda_vbo_resource, vbo, cudaGraphicsMapFlagsNone)" 
Run Code Online (Sandbox Code Playgroud)

是否可以在我的主机上显示粒子模拟,而计算是在远程系统上进行的?

它是通过X11Forwarding实现的,还是完全不同的错误?

x11 ubuntu cuda freeglut nsight

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

如何在 VS2019 CUDA 项目中启用 C++17 代码生成

我正在将一些代码从一台电脑上的 VS2017 移动到另一台装有 VS2019 的电脑。一切都很好,除了我不能使用 std::filesystem 。在我以前的代码中,我使用 C++14 并拥有 std::experimental::filesystem。在新代码中,我想迁移到 C++17,因此我更改为 std::filesystem (如下面的代码所示)。奇怪的是,智能感知(不确定它是正确的名称)没有显示错误。当我输入 std::f 时它甚至会显示文件系统...

在此输入图像描述

但代码不会构建并给出错误“命名空间“std”没有成员“文件系统””。

我将C++语言标准更改为c++latest,VS2019版本是Community 16.6.5。

#include <string>
#include <iostream>
#include <filesystem>
namespace fs = std::filesystem;

int main()
{
    std::string path = "C:\\";
    for (const auto& entry : fs::directory_iterator(path))
        std::cout << entry.path() << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

编辑:我最初的问题的最后一行可能不够清楚:我已经将“C++ 语言标准”更改为 C++17 或 C++latest。

编辑:根据要求,输出: 在此输入图像描述

感谢@drescherjm,我们发现这是一个 Cuda 问题。Cuda 专家有什么想法吗?

c++ cuda visual-studio-2019

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

CUDA内核在CudaDeviceSynchronize之前没有启动

cuda profiler输出:

我在并发CUDA时遇到了一些麻烦.看一下附图.内核在标记点启动,时间为0.395秒.然后有一些绿色的CpuWork.最后,调用cudaDeviceSynchronize.在CpuWork之前启动的内核在同步调用之前没有启动.理想情况下,它应该与CPU工作并行运行.

void KdTreeGpu::traceRaysOnGpuAsync(int firstRayIndex, int numRays, int rank, int buffer)
{
    int per_block = 128;
    int num_blocks = numRays/per_block + (numRays%per_block==0?0:1);

    Ray* rays = &this->deviceRayPtr[firstRayIndex];
    int* outputHitPanelIds = &this->deviceHitPanelIdPtr[firstRayIndex];

    kdTreeTraversal<<<num_blocks, per_block, 0>>>(sceneBoundingBox, rays, deviceNodesPtr, deviceTrianglesListPtr, 
                                                firstRayIndex, numRays, rank, rootNodeIndex, 
                                                deviceTHitPtr, outputHitPanelIds, deviceReflectionPtr);

    CUDA_VALIDATE(cudaMemcpyAsync(resultHitDistances[buffer], deviceTHitPtr, numRays*sizeof(double), cudaMemcpyDeviceToHost));
    CUDA_VALIDATE(cudaMemcpyAsync(resultHitPanelIds[buffer], outputHitPanelIds, numRays*sizeof(int), cudaMemcpyDeviceToHost));
    CUDA_VALIDATE(cudaMemcpyAsync(resultReflections[buffer], deviceReflectionPtr, numRays*sizeof(Vector3), cudaMemcpyDeviceToHost));
}
Run Code Online (Sandbox Code Playgroud)

memcopies是异步的.结果缓冲区就像这样分配

unsigned int flag = cudaHostAllocPortable;

CUDA_VALIDATE(cudaHostAlloc(&resultHitPanelIds[0], MAX_RAYS_PER_ITERATION*sizeof(int), flag));
CUDA_VALIDATE(cudaHostAlloc(&resultHitPanelIds[1], MAX_RAYS_PER_ITERATION*sizeof(int), flag));
Run Code Online (Sandbox Code Playgroud)

希望找到解决方案.尝试了很多东西,包括没有在默认流中运行.当我添加cudaHostAlloc时,我发现异步方法返回到CPU.但是,如果内核在稍后调用deviceSynchronize之前未启动,那么这没有任何帮助.

resultHitDistances[2] 包含两个已分配的内存区域,以便当CPU读取0时,GPU应将结果置于1.

谢谢!

编辑:这是调用traceRaysAsync的代码.

int numIterations = ceil(float(this->numPrimaryRays) / MAX_RAYS_PER_ITERATION);
int numRaysPrevious …
Run Code Online (Sandbox Code Playgroud)

cuda

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

我该如何阅读PTX?

我正在使用Capabilities 3.5,CUDA 5和VS 2010(显然是Windows).

我有兴趣阅读已编译的代码,以更好地理解我的C代码更改的含义.

  • 我需要在VS中使用什么配置来编译代码以便于阅读(将编译设置为足够的PTX?)?
  • 我需要使用什么工具对生成的PTX进行反向工程才能读取它?

cuda

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

一个函数在CUDA C ++中调用另一个函数

我对CUDA编程有问题!输入是矩阵A(2 x 2),输出是矩阵A(2 x 2),每个新值都是**旧值的3指数**示例:输入:A:{2,2}输出:A { 8,8} {2,2} {8,8}

我在CudaCode.CU文件中有2个功能:

   __global__ void Power_of_02(int &a)
{
    a=a*a;
}

 //***************
__global__ void Power_of_03(int &a)
{
    int tempt = a;
    Power_of_02(a); //a=a^2;
    a= a*tempt; // a = a^3
}
Run Code Online (Sandbox Code Playgroud)

和内核:

__global__ void CudaProcessingKernel(int *dataA )    //kernel function  

   {  
        int bx = blockIdx.x;  
    int tx = threadIdx.x;  
        int tid = bx * XTHREADS + tx;  

    if(tid < 16)
    {
    Power_of_03(dataA[tid]);
        }
    __syncthreads();

   }  
Run Code Online (Sandbox Code Playgroud)

我认为是正确的,但是会出现错误:仅在compute_35或更高版本的体系结构上允许从__global__函数(“ Power_of_03”)调用__global__函数(“ Power_of_02”)

为什么我错了?怎么修呢?

parallel-processing cuda global function call

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

推力矢量距离计算

考虑以下数据集和质心。有 7 个个体和两个均值,每个均具有 8 个维度。它们存储在行主序中。

short dim = 8;
float centroids[] = {
    0.223, 0.002, 0.223, 0.412, 0.334, 0.532, 0.244, 0.612, 
    0.742, 0.812, 0.817, 0.353, 0.325, 0.452, 0.837, 0.441
};   
float data[] = {
    0.314, 0.504, 0.030, 0.215, 0.647, 0.045, 0.443, 0.325,
    0.731, 0.354, 0.696, 0.604, 0.954, 0.673, 0.625, 0.744, 
    0.615, 0.936, 0.045, 0.779, 0.169, 0.589, 0.303, 0.869, 
    0.275, 0.406, 0.003, 0.763, 0.471, 0.748, 0.230, 0.769, 
    0.903, 0.489, 0.135, 0.599, 0.094, 0.088, 0.272, 0.719, 
    0.112, 0.448, 0.809, 0.157, 0.227, 0.978, …
Run Code Online (Sandbox Code Playgroud)

c++ thrust

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

如何计算正在启动的 CUDA 线程数?

我有一个 CUDA 卡,具有: Cuda 计算功能 (3.5) 如果我有一个诸如 <<<2000,512>>> 的调用,内核中发生的迭代次数是多少?我以为是(2000*512),但测试并不能证明这一点?我还想确认我计算变量的方式是正确的。

情况是,在内核中,我根据线程号递增传递的全局内存号:

  int thr = blockDim.x * blockIdx.x + threadIdx.x;
  worknumber = globalnumber + thr;
Run Code Online (Sandbox Code Playgroud)

因此,当我返回到 CPU 时,我想确切地知道有多少增量,以便我可以跟踪,这样当我调用内核 GPU 处理下一组数字时,我就不会重复或跳过数字。

编辑 :

__global__ void allin(uint64_t *lkey, const unsigned char *d_patfile)
{

    uint64_t kkey;
    int tmp;
    int thr = blockDim.x * blockIdx.x + threadIdx.x;
    kkey = *lkey + thr;

if (thr > tmp) {
    tmp = thr;
    printf("%u \n", thr);
    }
}
Run Code Online (Sandbox Code Playgroud)

cuda nvcc

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

使用布尔代数和传递的参数在CUDA中实现类似内核的两个版本是否有效?

我有以下CUDA核心,其中执行计算上昂贵的计算然后在两个操作中使用.

偶尔,我想myKernel没有operationOne.我知道代码分支通常是个坏主意,但是如果所有线程都运行相同的分支,那么仍然存在很大的低效率吗?即以下是一个坏主意?

__global__ void myKernel(bool doOpOne, ...) {
    // usefulValue is computed

    if(doOpOne) {
         // perform operation one
    }
    // perform operation two
}
Run Code Online (Sandbox Code Playgroud)

performance cuda

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