在架构方面,CPU 仅由几个具有大缓存内存的核心组成,一次只可以处理几个软件线程。相比之下,GPU 由数百个核心组成,可以同时处理数千个线程。
NumPy 已成为在 Python 中实现多维数据通信的实际方法。然而,对于多核 GPU,这种实施并非最佳。因此,对于较新的针对 GPU 优化的库实施 Numpy 数组或与 Numpy 数组进行互 *** 作。
NVIDIA® CUDA® 是 NVIDIA 专为 GPU 通用计算开发的并行计算平台和编程模型。CUDA 数组接口是描述 GPU 数组(张量)的标准格式,允许在不同的库之间共享 GPU 数组,而无需复制或转换数据。CUDA 数组由 Numba、CuPy、MXNet 和 PyTorch 提供支持。
CuPy 是一个利用 GPU 库在 NVIDIA GPU 上实施 NumPy CUDA 数组的库。
Numba 是一个 Python 编译器,可以编译 Python 代码,以在支持 CUDA 的 GPU 上执行。Numba 直接支持 NumPy 数组。
Apache MXNet 是一个灵活高效的深度学习库。可以使用它的 NDArray 将模型的输入和输出表示和 *** 作为多维数组。NDArray 类似于 NumPy 的 ndarray,但它们可以在 GPU 上运行,以加速计算。
PyTorch 是一种开源深度学习框架,以出色的灵活性和易用性著称。Pytorch Tensors 与 NumPy 的 ndarray 类似,但它们可以在 GPU 上运行,加速计算。
我用python执行时间23秒,用pypy执行时间1.54秒,用numba加速为1.5秒,c语言在本机macos上执行时间1.3秒,java运行速度1.45秒(jre8),详细见图片,可见引入jit编译后,性能直逼c语言,而写python比写c容易太多,比java简洁,写代码速度也是非常非常重要。由于历史原因,很多python库用的c语言库,如pandas(pandas的矩阵计算用numpy优化过非常快,可能比手写c语言循环还要快),可以通过设计来分离c语言加速后的python代码和pure python,分别用不同的加速方法,如numba可以单独加速一个函数,把需要大量计算的放在一个函数用numba加速(numbapro支持显卡加速但是商业版的)。所以只适当设计一下,python在一般计算问题下有这些解决方案下性能不是问题,实在不行,你还可以用boost::python来写个c/c++调用库来解决性能问题。
下面的测试说明,对于性能,原生python比较慢,在windows下python比linux,macos要快,用pypy后相当于java,c#速度,pypy,c#在windows下受益msvc表现较快,,go语言速度表现比较稳定,c语言理论上是最快,但受环境和编译器影响较大。对c#,java可能在GC垃圾回收时会表现不稳定,因为在oop中有大量计算后可能要回收垃圾内存对象,这个没有用到oop,只是纯计算,理论上还是c/c++语言最快。
python和java比,运行速度比java慢,java强大于改进n次的强大jre,但python在很多领域能调用很多现成的开源库,在数据分析中有优势,pyhton的代码比java要简洁,容易入门和使用。在优化的计算库帮助下,如numpy numba,pandas,scikit-learn,python的实际问题运算性能并不低于java。java主要是框架太多,相对复杂,java主要用于业务程序开发,符合软件工程理论,可伸缩性强,强类型有利于对程序的静态检查分析。java随着安卓,hadoop,spark的兴起,加入java语言的公司很多,性能也可以通过优化解决很多问题。很多服务器如ubuntu server,centos都默认支持python,而java虚拟机需要安装配置,python的安装使用也相对简单。python的库有开箱即用感,很多业务领域,你可能还在用oop写代码,考虑设计模式,用锄头挖沟时,而python调用挖掘机api已经炒菜完工开饭了,缺点是油耗比较大。
需要重新编译opencv的,最后getCudaEnabledDeviceCount()这个函数返回值大于零才行
//
first.cpp
:
定义控制台应用程序的入口点。
//
#include
"stdafx.h"
#include
#include
"opencv2/opencv.hpp"
#include
"opencv2/gpu/gpu.hpp"
#pragma
co..
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)