码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 【AI实战】CUDA 编程入门及开源项目代码分享


    【AI实战】CUDA 编程入门

    • CUDA 简介
    • 官方文档
    • 简单的代码
    • 开源学习的代码
    • 参考

    在这里插入图片描述

    CUDA 简介

    CUDA(Compute Unified Device Architecture),是显卡厂商NVIDIA推出的运算平台。

    CUDA™是一种由NVIDIA推出的通用并行计算架构, 该架构使GPU能够解决复杂的计算问题。 它包含了 CUDA指令集架构(ISA)以及GPU内部的并行计算 引擎。

    开发人员可以使用C语言来为CUDA™架构编 写程序,所编写出的程序可以在支持CUDA™的处理 器上以超高性能运行。(来源:百度百科)

    随着显卡的发展,GPU越来越强大,而且GPU为显示图像做了优化。在计算上已经超越了通用的CPU。

    如此强大的芯片如果只是作为显卡就太浪费了,因此NVIDIA推出CUDA,让显卡可以用于图像计算以外的目的。

    CUDA(Compute Unified Device Architecture)是一个新的基础架构,这个架构可以使用GPU来解决商业、工业以及科学方面的复杂计算问题。

    CUDA的SDK中的编译器和开发平台支持Windows、Linux系统,可以与Visual Studio2005,2008,2010集成在一起。

    官方文档

    • NVIDIA CUDA C++ Programming Guide
      地址:https://docs.nvidia.com/cuda/cuda-c-programming-guide/index.html

    • CUDA C++ Best Practices Guide

      地址:https://docs.nvidia.com/cuda/cuda-c-best-practices-guide/index.html

    • CUDA C编程权威指南

      英文原版叫《Professional CUDA C Programming》
      pdf文件地址:http://www.hds.bme.hu/~fhegedus/C++/Professional%20CUDA%20C%20Programming.pdf

    简单的代码

    将大小为N的两个向量 A 和 B 相加,并将结果存储到向量 C 中:

    // Kernel definition
    __global__ void VecAdd(float* A, float* B, float* C)
    {
        int i = threadIdx.x;
        C[i] = A[i] + B[i];
    }
    
    int main()
    {
        ...
        // Kernel invocation with N threads
        VecAdd<<<1, N>>>(A, B, C);
        ...
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    以下代码将大小为 N x N 的两个矩阵 A 和 B 相加,并将结果存储到矩阵 C 中:

    // Kernel definition
    __global__ void MatAdd(float A[N][N], float B[N][N],
                           float C[N][N])
    {
        int i = threadIdx.x;
        int j = threadIdx.y;
        C[i][j] = A[i][j] + B[i][j];
    }
    
    int main()
    {
        ...
        // Kernel invocation with one block of N * N * 1 threads
        int numBlocks = 1;
        dim3 threadsPerBlock(N, N);
        MatAdd<<<numBlocks, threadsPerBlock>>>(A, B, C);
        ...
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    开源学习的代码

    这里分享一些开源项目,以便更好的学习。

    根据各自的需求阅读对应的源代码。

    能自己动手写就动手写,多写才是王道。

    • FasterTransformer
      FasterTransformer:https://github.com/NVIDIA/DeepLearningExamples/tree/master/FasterTransformer

      这是英伟达开源的Transformer推理加速引擎。

    • TurboTransformers

      TurboTransformers:https://github.com/Tencent/TurboTransformers

      这是腾讯开源的Transformer推理加速引擎。

    • DeepSpeed

      DeepSpeed: https://github.com/microsoft/DeepSpeed

      这是微软开源的深度学习分布式训练加速引擎

    • cuda-samples

      https://github.com/NVIDIA/cuda-samples

    • CUDALibrarySamples

      https://github.com/NVIDIA/CUDALibrarySamples

    • CUDA-Programming

      https://github.com/brucefan1983/CUDA-Programming

    • cuda-convnet2

      https://github.com/akrizhevsky/cuda-convnet2

    • tiny-cuda-nn

      https://github.com/NVlabs/tiny-cuda-nn

    • tsne-cuda

      https://github.com/CannyLab/tsne-cuda

    • CUDA_Freshman

      https://github.com/Tony-Tan/CUDA_Freshman

    • lightseq

      LightSeq:https://github.com/bytedance/lightseq

    参考

    • https://docs.nvidia.com/cuda
  • 相关阅读:
    算法学习的积累
    java设计模式之原型模式
    pytest简介及jenkins集成
    小程序开发---02认识宿主环境
    基于web的老年保健品销售系统/保健品销售系统
    【4-5章】Spark编程基础(Python版)
    计算机图形学 实验一:二维图形绘制
    MySQL⭐二、使用Navicat连接到服务器上的MySQL
    机器学习实战(4)——训练模型
    git 删除、合并多次commit提交记录
  • 原文地址:https://blog.csdn.net/zengNLP/article/details/127722076
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号