首页 > 其他分享 >cuda profiler

cuda profiler

时间:2025-01-08 23:22:15浏览次数:1  
标签:int void float profiler cuda tid sizeof

cuda api的采样主要cudart提供了profiler的接口,定义在cuda_profiler_api.h文件中,下面的代码是一个例子。

参考 https://blog.csdn.net/weixin_43603658/article/details/130441136,可以看到使用cudaProfilerStart和cudaProfilerEnd可以查看程序中指定段的性能数据。
nsys在这个基础上可能更加丰富了采样数据的类型,如ptrace看osrt的数据。

#include <iostream>
#include <cuda_runtime.h>
#include <cuda_profiler_api.h>

// 定义向量长度
const int N = 1024;

// 核函数,实现简单的向量加法
__global__ void vectorAdd(const float* a, const float* b, float* c) {
    int tid = blockIdx.x * blockDim.x + threadIdx.x;
    if (tid < N) {
        c[tid] = a[tid] + b[tid];
    }
}

int main() {
    float* a, * b, * c;
    float* d_a, * d_b, * d_c;

    // 在主机上分配内存
    a = new float[N];
    b = new float[N];
    c = new float[N];

    // 在设备上分配内存
    cudaMalloc((void**)&d_a, N * sizeof(float));
    cudaMalloc((void**)&d_b, N * sizeof(float));
    cudaMalloc((void**)&d_c, N * sizeof(float));

    // 初始化主机上的向量数据
    for (int i = 0; i < N; i++) {
        a[i] = i;
        b[i] = i * 2;
    }

    // 将数据从主机复制到设备
    cudaMemcpy(d_a, a, N * sizeof(float), cudaMemcpyHostToDevice);
    cudaMemcpy(d_b, b, N * sizeof(float), cudaMemcpyHostToDevice);

    // 启动CUDA profiler
    cudaProfilerStart();

    // 定义线程块和线程数量
    int blockSize = 256;
    int numBlocks = (N + blockSize - 1) / blockSize;

    // 调用核函数
    vectorAdd<<<numBlocks, blockSize>>>(d_a, d_b, d_c);

    // 检查核函数执行是否出错
    cudaError_t err = cudaGetLastError();
    if (err!= cudaSuccess) {
        std::cerr << "CUDA Error: " << cudaGetErrorString(err) << std::endl;
    }

    // 停止CUDA profiler
    cudaProfilerStop();

    // 将结果从设备复制回主机
    cudaMemcpy(c, d_c, N * sizeof(float), cudaMemcpyDeviceToHost);

    // 释放设备内存
    cudaFree(d_a);
    cudaFree(d_b);
    cudaFree(d_c);

    // 释放主机内存
    delete[] a;
    delete[] b;
    delete[] c;

    return 0;
}

标签:int,void,float,profiler,cuda,tid,sizeof
From: https://www.cnblogs.com/zwlwf/p/18660765

相关文章

  • GPU介绍之CUDA
    关注我,持续分享逻辑思维&管理思维&面试题;可提供大厂面试辅导、及定制化求职/在职/管理/架构辅导;推荐专栏《10天学会使用asp.net编程AI大模型》,目前已完成所有内容。一顿烧烤不到的费用,让人能紧跟时代的浪潮。从普通网站,到公众号、小程序,再到AI大模型网站。干货满满。学成后可......
  • cuda 中BYTE*
    在CUDA编程中,BYTE*通常指的是一个指向字节的指针。CUDA是NVIDIA的并行计算平台和编程模型,用于利用GPU的强大计算能力。BYTE一般是一个无符号字符类型(unsignedchar),用于表示原始数据或字节流。以下是一些与BYTE*相关的常见用法和注意事项:1.定义和初始化在CUDA中,你......
  • BOOST 结合 CUDA 的原理、操作及多领域应用
    摘要:本文深入探讨了BOOST库与CUDA技术相结合的具体操作方法、优势以及在诸多领域中的实际应用案例。首先介绍了BOOST和CUDA的基本概念与特点,随后详细阐述了两者结合的配置步骤、数据交互方式等操作细节,并且通过多个不同领域(如图像处理、机器学习、科学计算等)的具体应用......
  • 如何配置显卡cuda用来pytorch训练
    1、更新显卡驱动程序到最新版上英伟达官网https://www.nvidia.cn/drivers/lookup/现在,更新!2、查看显卡是否支持cuda。打开显卡控制面板。nvidia查看显卡的驱动程序版本,此处为566.36上官网https://docs.nvidia.com/cuda/cuda-toolkit-release-notes/index.html查看对......
  • 高性能计算-CUDA单流多流控制
    1.介绍:(1)用CUDA计算pow(sin(id),2)+pow(cos(id),2)的结果(2)对比单流(同步传输、异步传输)、多流深度优先调度、多流广度优先调度的效率(包含数据传输和计算)核心代码1.用CUDA计算pow(sin(id),2)+pow(cos(id),2)的结果2.对比单流(同步传输、异步传输)、多流深度优......
  • SQL Server Profiler的trc文件生成阻止.240108
    很奇葩,sqlserver自动生成trc文件,每分钟一个,重启服务器也没用。解决思路:查询现在正在跑的trace进程select*fromsys.fn_trace_getinfo(0);关闭C2审计功能EXECsp_configure'c2auditmode','0';重启数据库服务再次查看,已经没了。然后删除数据盘所有的trc文件。......
  • cuda kernel启动的反汇编
    原始代码//Typeyourcodehere,orloadanexample.extern"C"__global__voidsquare(int*array,intn){inttid=blockDim.x*blockIdx.x+threadIdx.x;if(tid<n)array[tid]=array[tid]*array[tid];}voidsquare_do(int......
  • Linux服务器无Root权限安装Cuda方法及问题解决
    CUDA简介什么是CUDA?CUDA(ComputeUnifiedDeviceArchitecture)是由NVIDIA提供的一种并行计算平台和编程模型,用于加速计算密集型任务。CUDA允许开发者使用GPU的计算能力,通过并行处理来快速执行复杂的计算任务。CUDA包括以下主要组成部分:CUDAToolkit:为开发人员提供工......
  • 深度学习CUDA环境安装教程---动手学深度学习
    首先说明我安装的是《动手学深度学习》中的环境本人是小白,一次安装,可能有不对的地方,望包含。安装CUDA因为我们是深度学习,很多时候要用到gpu进行训练,所以我们需要一种方式加快训练速度。通俗地说,CUDA是一种协助“CPU任务分发+GPU并行处理”的编程模型/平台,用于加速GPU和CPU之......
  • 高性能计算-CUDA矩阵加法及优化测试
    1.目标:对16384*16384规模的矩阵进行加法运算,对比CPU和GPU计算的效率,还有不同线程块大小规模下对效率的影响;并做可能的优化测试。2.核心代码/*用GPU对二维矩阵做加法,分析不同线程块规模下的性能变化*/#include<stdio.h>#include<stdlib.h>#include<sys/time.h>#......