当前位置: 首页 > news >正文

使用 modelscope gpu 跑通第一个 cuda 入门实例

文章目录

      • 1、前往 modelscope -- 我的 Notebook
      • 2、编写cuda程序
      • 3、编译 运行


1、前往 modelscope – 我的 Notebook

https://www.modelscope.cn/my/mynotebook

选择有 GPU 的实例
在这里插入图片描述


安全验证都很漂亮
在这里插入图片描述


2、编写cuda程序

以下是一个经典的“向量加法”示例

#include <iostream>
#include <cuda_runtime.h>// 定义核函数 (Kernel Function),在GPU上执行
// __global__ 关键字表示这是一个核函数 [[7]]
__global__ void vectorAdd(float *A, float *B, float *C, int N) {// 计算当前线程处理的元素索引int i = blockIdx.x * blockDim.x + threadIdx.x;// 检查索引是否越界if (i < N) {C[i] = A[i] + B[i]; // 执行加法}
}int main() {int N = 1000; // 向量大小size_t size = N * sizeof(float);// 在主机(CPU)上分配内存float *h_A = new float[N];float *h_B = new float[N];float *h_C = new float[N];// 初始化主机数据for (int i = 0; i < N; i++) {h_A[i] = i;h_B[i] = i * 2;}// 在设备(GPU)上分配内存float *d_A, *d_B, *d_C;cudaMalloc(&d_A, size);cudaMalloc(&d_B, size);cudaMalloc(&d_C, size);// 将数据从主机复制到设备cudaMemcpy(d_A, h_A, size, cudaMemcpyHostToDevice);cudaMemcpy(d_B, h_B, size, cudaMemcpyHostToDevice);// 定义执行配置:1个Block,每个Block有 N 个线程(简单起见,假设 N 不太大)int threadsPerBlock = 256; // 通常选择 256 或 512int blocksPerGrid = (N + threadsPerBlock - 1) / threadsPerBlock; // 向上取整// 调用核函数vectorAdd<<<blocksPerGrid, threadsPerBlock>>>(d_A, d_B, d_C, N);// 将结果从设备复制回主机cudaMemcpy(h_C, d_C, size, cudaMemcpyDeviceToHost);// 验证结果(打印前10个元素)std::cout << "Result (first 10 elements):" << std::endl;for (int i = 0; i < 10; i++) {std::cout << h_C[i] << " ";}std::cout << std::endl;// 释放设备内存cudaFree(d_A);cudaFree(d_B);cudaFree(d_C);// 释放主机内存delete[] h_A;delete[] h_B;delete[] h_C;return 0;
}

3、编译 运行

打开终端:

在这里插入图片描述


nvcc -o vector_add vector_add.cu./vector_add

执行日志

# ./vector_add
Result (first 10 elements):
0 3 6 9 12 15 18 21 24 27 

执行效果:
在这里插入图片描述

··***

http://www.dtcms.com/a/394391.html

相关文章:

  • Agent实战02-agent入门案例LlamaIndex
  • 微服务基础1-微服务拆分与服务调用
  • http、UDP协议
  • 微服务基础3-服务保护与分布式事务
  • C++红黑树详解
  • 【不背八股】15.kmp算法/ Dijkstra算法/二叉树遍历
  • 【ES】ElasticSearch 数据库之查询操作 从入门>实践>精通 一篇文章包含ES的所有查询语法
  • huggingface-cli修改模型下载路径
  • 计算机视觉——灰度分布
  • OpenFeature 标准在 ABP vNext 的落地
  • Agentic AI 多智能体协作:开发实战、框架选型与踩坑指南
  • [优选算法专题三二分查找——NO.17二分查找]
  • 一文学会c++哈希
  • 【06】EPGF 架构搭建教程之 本地环境管理工具的本地化
  • 【开发实践】DNS 报文分析与 CDN 架构可视化方案
  • Ubuntu 系统下 Nginx + PHP 环境搭建教程
  • AI 如何改变日常生活
  • 字典树 Trie 介绍、实现、封装与模拟 C++STL 设计
  • 第一性原理(First Principles Thinking)
  • 1.UE-准备环境(一)-账号注册和打开虚幻引擎源码页面
  • javascript `AbortController`
  • 时间复杂度与空间复杂度
  • rocketmq队列和消费者关系
  • RAG评估指南:从核心指标到开源框架,打造高效检索生成系统
  • xtuoj 0x05-A 前缀和
  • 防误删 (实时) 文件备份系统 (btrfs 快照 + rsync)
  • 【FreeRTOS】第七课(1):任务间通信(使用队列)
  • OD C卷 - 二叉树计算
  • DiffDock 环境安装和使用教程
  • NVIC中的不可屏蔽中断NMI(Non-Maskable Interrupt)是什么?