当前位置: 首页 > 知识库问答 >
问题:

在Nvidia GPU(CUDA)中使用Java

柳钟展
2023-03-14

我们订购了一些CUDA GPU来尝试它,由于CUDA不支持Java,我想知道从何开始。我应该构建一个JNI接口吗?我应该使用JCUDA还是有其他方法

我没有这方面的经验,我希望有人能指导我的一些东西,这样我就可以开始研究和学习。

共有1个答案

锺离嘉茂
2023-03-14

首先,您应该意识到CUDA不会自动地使计算更快。一方面,因为GPU编程是一门艺术,而且要把它弄对可能是非常非常有挑战性的。另一方面,因为GPU只适合于某些类型的计算。

这可能听起来很混乱,因为你基本上可以在GPU上计算任何东西。关键的一点当然是,你是否会实现一个好的加速。这里最重要的分类是一个问题是任务并行还是数据并行。第一个问题大致上是指几个线程或多或少独立地处理自己的任务的问题。第二个问题指的是许多线程都在执行相同的操作--但是在数据的不同部分上执行相同的操作。

后者是GPU擅长的那种问题:它们有很多内核,所有内核都做同样的事情,但对输入数据的不同部分进行操作。

因此,GPU性能的另一个关键点是数据局部性:如果您必须读或写数据(而且在大多数情况下,您将不得不;-)),那么您应该确保数据尽可能地保持在GPU内核附近。GPU因此具有某些内存区域(称为“本地内存”或“共享内存”),其大小通常只有几KB,但对于即将涉及到计算的数据特别有效。

所以再次强调这一点:GPU编程是一门艺术,它只与CPU上的并行编程有很远的关系。Java中的线程,以及所有并发基础设施(如ThreadPoolExecutorsForkJoinPools等)可能会给人一种印象,即您只需要以某种方式将工作拆分,并将其分布在多个处理器之间。在GPU上,您可能会遇到低得多的挑战:占用率、注册压力、共享内存压力、内存合并……仅举几例。

然而,当你有一个数据并行,计算限制的问题要解决时,GPU是一种方法

http://www.habanero.rice.edu/publications.html(JCUDA):一个库,可以将特殊的Java代码(称为JCUDA代码)翻译成Java和CUDA-C代码,然后可以在GPU上编译和执行。然而,该图书馆似乎并不公开。

https://www2.informatik.uni-erlangen.de/en/research/javaopenmp/index.html:用于for OpenMP构造的Java语言扩展,具有CUDA后端

https://github.com/ochafik/javacl:用于OpenCL的Java绑定:一个面向对象的OpenCL库,基于自动生成的低级绑定

http://jocl.org/:Java bindings for OpenCL:低级绑定,它是原始OpenCL API的1:1映射

http://jcuda.org/:Java bindings for CUDA:低级绑定,它是原始CUDA API的1:1映射

http://sourceforge.net/projects/jopencl/:用于OpenCL的Java绑定。自2010年以来似乎不再维持

 类似资料:
  • 问题内容: 我正在做一个用Java完成的业务项目,需要巨大的计算能力来计算业务市场。简单的数学运算,但包含大量数据。 我们订购了一些cuda gpu进行尝试,并且由于cuda不支持Java,我想知道从哪里开始。我应该建立一个JNI接口吗?我应该使用JCUDA还是其他方法? 我没有这方面的经验,我想如果有人可以指导我一些事情,以便我可以开始研究和学习。 问题答案: 首先,你应该意识到CUDA不会自动

  • 我想从CUDA代码()创建一个. dll,以便从外部C程序中使用这个库。经过一些尝试,我只是在. cu文件中留下了一个简单的C函数。代码如下: kernel.cu 内核.h 我首先尝试使用生成一个对象,然后使用创建DLL,如下所示: 它工作正常,并生成。为了测试DLL文件,我编写了一个简单的程序: 编译方式: 结果是执行开始时的内存访问错误。 然而如果我重新命名。cu文件在。C(因为它只是C代码)

  • Im使用CMake生成visual studio 2013解决方案。下一步我将尝试构建它,但出现以下错误: 构建NVCC(设备)对象模块/核心/CMakeFiles/cuda_compile.dir/src/cuda/Debug/cuda_compile_generated_gpu_mat.cu.obj nvcc致命:不支持的gpu体系结构“compute_11” 我尝试版本2.10和3.0与cu

  • 本文向大家介绍cuda 用CUDA对两个数组求和,包括了cuda 用CUDA对两个数组求和的使用技巧和注意事项,需要的朋友参考一下 示例 本示例说明了如何创建一个简单的程序,该程序将int使用CUDA对两个数组求和。 CUDA程序是异构的,由在CPU和GPU上运行的部分组成。 利用CUDA的程序的主要部分类似于CPU程序,包括 为将在GPU上使用的数据分配内存 数据从主机内存复制到GPU内存 调用

  • CUDA 工具包是一种针对支持CUDA功能的GPU(图形处理器)的C语言开发环境。CUDA 开发环境包括: nvcc C语言编译器 适用于GPU(图形处理器)的CUDA FFT和BLAS库 分析器 适用于GPU(图形处理器)的gdb调试器(在2008年3月推出alpha版) CUDA运行时(CUDA runtime)驱动程序(目前在标准的NVIDIA GPU驱动中也提供) CUDA编程手册 CUD

  • 本文向大家介绍pytorch中使用cuda扩展的实现示例,包括了pytorch中使用cuda扩展的实现示例的使用技巧和注意事项,需要的朋友参考一下 以下面这个例子作为教程,实现功能是element-wise add; (pytorch中想调用cuda模块,还是用另外使用C编写接口脚本) 第一步:cuda编程的源文件和头文件 第二步:C编程的源文件和头文件(接口函数) 第三步:编译,先编译cuda模