前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >python调用英伟达GPU加速方法

python调用英伟达GPU加速方法

作者头像
DearXuan
发布于 2022-02-21 00:07:58
发布于 2022-02-21 00:07:58
1.5K00
代码可运行
举报
运行总次数:0
代码可运行

调用GPU的本质其实是调用CUDA的dll

如果你对CUDA编程不熟悉,可以参考CUDA并行编程概述

生成CUDA dll

调用显卡的方法是调用CUDA的dll,因此首先要使用CUDA生成dll

下面是示例CUDA代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include "cuda_runtime.h"
#include "device_launch_parameters.h"
 
#include <stdio.h>
#include <iostream>
 
using namespace std;
 
__global__ void DoInKernel(int* a, int* b, int* c, int num) {
	int i = blockIdx.x * 1024 + threadIdx.x;
	if (i >= num) return;
	c[i] = a[i] + b[i];
}
 
extern "C" _declspec(dllexport) void Add(int* ori_a, int* ori_b, int* ori_c, int num) {
	int* dev_a;
	int* dev_b;
	int* dev_c;
	int size = num * sizeof(int);
	cudaMalloc((void**)&dev_a, size);
	cudaMalloc((void**)&dev_b, size);
	cudaMalloc((void**)&dev_c, size);
	cudaMemcpy(dev_a, ori_a, size, cudaMemcpyHostToDevice);
	cudaMemcpy(dev_b, ori_b, size, cudaMemcpyHostToDevice);
	DoInKernel << <num / 1024 + 1, 1024 >> > (dev_a, dev_b, dev_c, num);
	cudaMemcpy(ori_c, dev_c, size, cudaMemcpyDeviceToHost);
	cudaFree(dev_a);
	cudaFree(dev_b);
	cudaFree(dev_c);
}

它的作用是将 ori_a 和 ori_b 数组内的数组相加,并保存到 ori_c

编译后得到CUDA.dll文件

调用dll

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import ctypes
import random
 
length = 4096
 
# dll地址
dll_path = r"C:\Users\Administrator\桌面\CUDA.dll"
 
# 使用stypes库加载dll
dll = ctypes.cdll.LoadLibrary(dll_path)
 
# 创建C语言中的数组
c_int = ctypes.c_int * length
array_a = c_int()
array_b = c_int()
array_c = c_int()
 
# 生成随机数
i = 0
while i < length:
    array_a[i] = random.randint(0,1000)
    array_b[i] = random.randint(0,1000)
    i = i + 1
 
# 运行dll中的 Add() 函数
dll.Add(array_a, array_b, array_c, 4096)
 
# 打印结果
i = 0
while i < length:
    print(array_a[i],"+",array_b[i],"=",array_c[i])
    i = i + 1

运行结果

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年2月20日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
GPU并行计算之向量和
所有的CUDA API返回值都是CUDA中定义的一个错误代码,这种返回值的方式也是我们在写程序中经常用到的。这也意味着我们如果想得到某个结果,只能通过参数引用的方式,而我们定义的dev_a本来就是指针,又加了个&,所以前面是两个*。
猫叔Rex
2020/08/18
1.4K0
《GPU高性能编程 CUDA实战》(CUDA By Example)读书笔记
写在最前 这本书是2011年出版的,按照计算机的发展速度来说已经算是上古书籍了,不过由于其简单易懂,仍旧被推荐为入门神书。先上封面: 由于书比较老,而且由于学习的目的不同,这里只介绍了基础
用户1148523
2018/01/09
2.9K0
《GPU高性能编程 CUDA实战》(CUDA By Example)读书笔记
从普通开发到 AI:Function Calling 的演变与应用
函数调用(Function Calling)是编程中最基本的操作之一。无论是简单的数学计算,还是复杂的系统交互,函数调用都是实现功能的核心机制。随着技术的发展,函数调用不仅在传统软件开发中扮演着重要角色,还在人工智能(AI)和机器学习(ML)领域中发挥着关键作用。本文将从普通开发到 AI 的应用,深入探讨函数调用的演变和优化策略。
码事漫谈
2025/03/28
1210
从普通开发到 AI:Function Calling 的演变与应用
2020-10-21CUDA从入门到精通
在老板的要求下,本博主从2012年上高性能计算课程开始接触CUDA编程,随后将该技术应用到了实际项目中,使处理程序加速超过1K,可见基于图形显示器的并行计算对于追求速度的应用来说无疑是一个理想的选择。还有不到一年毕业,怕是毕业后这些技术也就随毕业而去,准备这个暑假开辟一个CUDA专栏,从入门到精通,步步为营,顺便分享设计的一些经验教训,希望能给学习CUDA的童鞋提供一定指导。个人能力所及,错误难免,欢迎讨论。
爱笑的架构师
2020/10/28
7360
2020-10-21CUDA从入门到精通
CUDA并行编程概述
CUDA是英伟达推出的GPU架构平台,通过GPU强大的并行执行效率,为计算密集型应用加速,CUDA文件以.cu结尾,支持C++语言编写,在使用CUDA前需要下载 CUDA Toolkit
DearXuan
2022/01/19
8560
CUDA编程之线程模型
一个kernel结构如下:Kernel<<>>(param1, param2, …)
AI异构
2020/07/29
2.8K0
CUDA编程之线程模型
英伟达CUDA架构核心概念及入门示例
理解英伟达CUDA架构涉及几个核心概念,这些概念共同构成了CUDA并行计算平台的基础。 1. SIMT(Single Instruction Multiple Thread)架构 CUDA架构基于SIMT模型,这意味着单个指令可以被多个线程并行执行。每个线程代表了最小的执行单位,而线程被组织成线程块(Thread Block),进一步被组织成网格(Grid)。这种层级结构允许程序员设计高度并行的算法,充分利用GPU的并行计算核心。 2. 层级结构 - 线程(Threads): 执行具体计算任务的最小单位。 - 线程块(Thread Blocks): 一组线程,它们共享一些资源,如共享内存,并作为一个单元被调度。 - 网格(Grid): 包含多个线程块,形成执行任务的整体结构。 3. 内存模型 - 全局内存: 所有线程均可访问,但访问速度相对较慢。 - 共享内存: 位于同一线程块内的线程共享,访问速度快,常用于减少内存访问延迟。 - 常量内存和纹理内存: 优化特定类型数据访问的内存类型。 - 寄存器: 最快速的存储,每个线程独有,但数量有限。 4. 同步机制 屏蔽同步(Barrier Synchronization) 通过同步点确保线程块内或网格内的所有线程达到某个执行点后再继续,保证数据一致性。 5. CUDA指令集架构(ISA) CUDA提供了专门的指令集,允许GPU执行并行计算任务。这些指令针对SIMT架构优化,支持高效的数据并行操作。 6. 编程模型 CUDA编程模型允许开发者使用C/C++等高级语言编写程序,通过扩展如`__global__`, `__device__`等关键字定义GPU执行的函数(核函数,kernel functions)。核函数会在GPU上并行执行,而CPU代码负责调度这些核函数并在CPU与GPU之间管理数据传输。 7. 软件栈 CUDA包含一系列工具和库,如nvcc编译器、CUDA runtime、性能分析工具、数学库(如cuFFT, cuBLAS)、深度学习库(如cuDNN)等,为开发者提供了完整的开发环境。
用户7353950
2024/07/05
5330
英伟达CUDA架构核心概念及入门示例
CUDA 02 - 逻辑模型
CUDA逻辑模型是异构模型, 需要CPU和GPU协同工作. 在CUDA中, host和device是两个重要概念, host是指CPU及其内存, device是指GPU及其内存. 典型的CUDA程序的执行流程如下:
Reck Zhang
2021/08/11
5330
CUDA 02 - 逻辑模型
【C++】基础:CUDA并行编程入门
当使用CUDA(Compute Unified Device Architecture)进行并行计算时,我们可以利用GPU(图形处理器)的强大性能来加速各种应用程序。
DevFrank
2024/07/24
8920
零拷贝内存 or 页锁定内存
这是一个小实验,在于验证GPU上使用零拷贝内存和页锁定内存的性能差别。使用的是点积计算,数据量在100M左右。实验步骤很简单,分别在主机上开辟普通内存,页锁定内存以及进行零拷贝内存的操作,看三者哪个完
用户1148523
2018/01/09
2.1K0
零拷贝内存 or 页锁定内存
CUDA共享内存的使用示例
CUDA共享内存使用示例如下:参考教材《GPU高性能编程CUDA实战》。P54-P65 教材下载地址:http://download.csdn.net/download/yizhaoyanbo/10150300。 如果没有下载分可以评论区留下邮箱,我发你。 1 #include <cuda.h> 2 #include <cuda_runtime.h> 3 #include <device_launch_parameters.h> 4 #include <device_functions.h> 5
一棹烟波
2018/01/12
2.9K1
C# Bitmap图像处理加速
BitmapData类专门用于位图处理,与Bitmap的不同点在于,它使用指针直接修改内存,而Bitmap是使用SetPixel()方法间接修改颜色,因此其效率远远超过SetPixel()
DearXuan
2022/01/19
1.3K0
C# Bitmap图像处理加速
关于图像的二维卷积各种版本的实现(C++,Cuda和mex)
该文介绍了利用卷积核对图像进行处理的一种方法,包括其原理、实现步骤和代码示例。
码科智能
2018/01/02
3K0
CUDA 计时器 原
在进行CUDA编程时,需要利用计时方法查看程序运行速度。 首先给出头文件 gputimer.h #ifndef __GPU_TIMER_H__ #define __GPU_TIMER_H__ struct GpuTimer { cudaEvent_t start; cudaEvent_t stop; GpuTimer() { cudaEventCreate(&start); cudaEventCreate(&stop); } ~GpuTimer() { cudaEvent
Gaussic
2018/08/17
1.6K0
CUDA 计时器
                                                                            原
cuda教程[新手入门学编程]
大家好,我是架构君,一个会写代码吟诗的架构师。今天说一说cuda教程[新手入门学编程],希望能够帮助大家进步!!!
Java架构师必看
2022/03/22
3.1K0
cuda教程[新手入门学编程]
手把手教你cuda5.5与VS2010的编译环境搭建
目前版本的cuda是很方便的,它的一个安装里面包括了Toolkit`SDK`document`Nsight等等,而不用你自己去挨个安装,这样也避免了版本的不同步问题。 1 cuda5.5的下载地址,官方网站即可: https://developer.nvidia.com/cuda-downloads   在里面选择你所对应的电脑版本即可。 2 VS2010这个没什么说的了,网上各种的免费资源,下载一个不需要钱的就行。 3 Cuda的安装:(win7版32bit)  安装cuda   3.1 cuda的安装
用户1154259
2018/01/17
7940
手把手教你cuda5.5与VS2010的编译环境搭建
cuda 并行计算(cuda并行程序设计pdf)
上一篇博客主要讲解了怎么去获取核函数执行的准确时间,以及如何去根据这个时间评估CUDA程序的表现,也就是推算所谓的内存带宽,博客的最后我们计算了在GPU上单线程计算立方和的程序的内存带宽,发现其内存带宽的表现是十分糟糕的,其所使用的内存带宽大概只有 5M/s,而像GeForce 8800GTX这样比较老的显卡,也具有超过50GB/s 的内存带宽 。
全栈程序员站长
2022/07/31
1.1K0
cuda 并行计算(cuda并行程序设计pdf)
AI部署篇 | CUDA学习笔记1:向量相加与GPU优化(附CUDA C代码)
GPU并不是一个独立运行的计算平台,而需要与CPU协同工作,也可以把GPU看成是CPU的协处理器,因此当在说GPU并行计算时,其实是指的基于CPU+GPU的异构计算架构。在异构计算架构中,GPU与CPU通过PCIe总线连接在一起进行协同工作,CPU所在位置称为为主机端(host),而GPU所在位置称为设备端(device),如下图所示。
集智书童公众号
2022/01/05
2.9K0
AI部署篇 | CUDA学习笔记1:向量相加与GPU优化(附CUDA C代码)
【AI系统】SIMD & SIMT 与芯片架构
为了进一步探讨 SIMD/SIMT 与 AI 芯片之间的关系,本文将详细介绍 SIMD 单指令多数据和 SIMT 单指令多线程的计算本质,以及对 NVIDIA CUDA 底层实现 SIMD/SIMT 的原理进行讲解。
用户11307734
2024/11/27
1590
CUDA指针数组Kernel函数
在前面的一篇文章中,我们介绍了在C++中使用指针数组的方式实现的一个不规则的二维数组。那么如果我们希望可以在CUDA中也能够使用到这种类似形式的不规则的数组,有没有办法可以直接实现呢?可能过程会稍微有一点麻烦,因为我们需要在Host和Device之间来回的转换,需要使用到很多CUDA内置的cudaMalloc和cudaMemcpy函数,以下做一个完整的介绍。
DechinPhy
2024/03/08
2390
相关推荐
GPU并行计算之向量和
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验