RVGPU:一个基于RISC-V指令集实现的开源GPU

1. 简介

1.1 RVGPU简介

RVGPU是一个基于RISC-V指令集实现的开源GPU项目,项目目标是提供一套完整的基于RISC-V指令集的开源GPU软硬件方案。

代码仓库:rvgpu: 正在构建一套基于原生RISC-V指令集的GPU。

文档:RVGPU — rvgpu 0.1 documentation

目前已经发布 v0.2版本,可以支持简单的cuda程序在cmodel上运行。

项目包含的代码仓库如下:

  • rvgpu:项目的顶层仓库,通过git submodule的方式来管理所有子项目。

  • rvgpu-cmodel:gpu的C模型,用来实现指令集、架构的仿真。

  • rvgpu-llvm:编译器工具链,用于实现cuda编译以及rvgpu后端。

  • rvgpu-mesa:OpenGL、Vulkan的实现。

  • qemu:实现一个虚拟的gpu设备。

  • gvm:gpu runtime的实现。

  • kmod-drv:内核态驱动。

  • tools:一些开发工具。

  • docs:项目文档。

项目将实现的框架如下,目前还处于早期阶段,大多数代码还在开发过程中:

../_images/rvgpu_softstack.PNG

2. 如何运行

2.1 编译源码

项目整体使用git submodule的方式管理,所以只需要clone顶层仓库就可以拉取所有的代码:

git clone --recursive https://gitee.com/rvgpu/rvgpu.git

涉及到的构建代码比较多,所以在tools仓库下实现了一个构建脚本,可以编译安装所有需要的代码仓库:

cd rvgpu
./tools/build/build.sh

编译时间较长,正确执行完脚本后,将安装到当前路径下的install目录下:

qihangkong@st-ubuntu:~/git/rvgpu$ ls install/
bin  include  lib  libexec  share

还可以直接使用编译好的二进制包:

链接: https://pan.baidu.com/s/14Yg7-wfkixe6oZoTFE75fQ 提取码: mjwa 复制这段内容后打开百度网盘手机App,操作更方便哦

2.2 运行cuda程序

cuda程序mul.cu如下:

// file: mul.cu
#include <iostream>

__global__ void mul(int a, float* x, float* y) {
    y[threadIdx.x] = a * x[threadIdx.x];
}

int main(int argc, char* argv[]) {
    const int kDataLen = 4;

    int a = 2;
    float host_x[kDataLen] = {1.0f, 2.0f, 3.0f, 4.0f};
    float host_y[kDataLen];

    // Copy input data to device.
    float* device_x;
    float* device_y;
    cudaMalloc(&device_x, kDataLen * sizeof(float));
    cudaMalloc(&device_y, kDataLen * sizeof(float));
    cudaMemcpy(device_x, host_x, kDataLen * sizeof(float), cudaMemcpyHostToDevice);

    // Launch the kernel.
    mul<<<1, kDataLen>>>(a, device_x, device_y);

    // Copy output data to host.
    cudaDeviceSynchronize();
    cudaMemcpy(host_y, device_y, kDataLen * sizeof(float), cudaMemcpyDeviceToHost);

    // Print the results.
    for (int i = 0; i < kDataLen; ++i) {
        std::cout << "y[" << i << "] = " << host_y[i] << "\n";
    }

    cudaDeviceReset();
    return 0;
}

使用clang编译cuda:

export PATH=${PWD}/install/bin:${PATH}
clang++ mul.cu -o mul --cuda-gpu-arch=rv64g -L /usr/lib64 -lcudart -ldl -lrt -pthread

通过–cuda-gpu-arch=rv64g指定编译cuda的目标设备为rvgpu。 运行程序如下:

export LD_LIBRARY_PATH=${PWD}/install/lib
# 确保应用程序已经链接到指定的动态库上
qihangkong@st-ubuntu:~/git/rvgpu$ ldd ./mul
./mul: /home/qihangkong/git/rvgpu/install/lib/libcudart.so.11.0: no version information available (required by ./mul)
        linux-vdso.so.1 (0x00007ffdc52c9000)
        libcudart.so.11.0 => /home/qihangkong/git/rvgpu/install/lib/libcudart.so.11.0 (0x00007f7f09c3f000)
        libstdc++.so.6 => /lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f7f09800000)
        libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f7f09b3c000)
        libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f7f09b1c000)
        libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f7f09400000)
        librvgpu.so.1.0 => /home/qihangkong/git/rvgpu/install/lib/librvgpu.so.1.0 (0x00007f7f09b15000)
        /lib64/ld-linux-x86-64.so.2 (0x00007f7f09c51000)
        librvgsim.so.0.0.1 => /home/qihangkong/git/rvgpu/install/lib/librvgsim.so.0.0.1 (0x00007f7f09af0000)
        libsoftfloat.so => /home/qihangkong/git/rvgpu/install/lib/libsoftfloat.so (0x00007f7f09ace000)

运行如下:

qihangkong@st-ubuntu:~/git/rvgpu$ ./mul
./mul: /home/qihangkong/git/rvgpu/install/lib/libcudart.so.11.0: no version information available (required by ./mul)
this is RVGSim
Run Kernel
y[0] = 2
y[1] = 4
y[2] = 6
y[3] = 8

3. 问题

如果有什么问题欢迎随时联系我们:

rvgpu: 正在构建一套基于原生RISC-V指令集的GPU。

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
开放源码的GPU计算能力可以推到一个新的水平BINGHAMTON,纽约–Binghamton大学的研究人员已经使用一个开源的图形处理器(GPU)的研究。宾汉姆顿大学计算机科学助理教授Timothy Miller Aaron Carpenter和研究生Philip Dexter,与合著者Jeff Bush,有Nyami,一个综合的图形处理器(GPU)的通用图形的特定工作负载的建筑模型。这标志着第一次的团队采取了一个开源GPU的设计和运行的一系列的实验,看看不同的硬件和软件配置会影响电路的性能。根据Miller的说法,其结果将有助于科学家们做出自己的GPU计算能力和推到一个新的水平。“作为一个研究人员,重要的是要有工具,实事求是地评估新的想法,可能会提高性能,能源效率,或其他处理器架构的挑战,”Miller说。虽然模拟器可以走捷径,一个实际的综合开源处理器不能偷工减料,所以我们可以说,任何实验结果得到特别可靠。”GPU已经存在了大约40年,通常发现在商业视频或图形卡在电脑或游戏机。专门的电路有计算能力,使图像更平滑,更充满活力的屏幕上。最近有一个运动,看看芯片是否可以应用到非图形计算,如算法处理大块数据。 “我们不一定在寻找结果的新颖性,所以我们想创建一个新的工具,然后显示它是如何使用的,”Carpenter说。我希望人们能更有效地在GPU上的实验,为爱好者和研究者,创造未来的GPU更高效的设计。”开源GPU用于他们的研究团队是宾厄姆顿的先河。虽然成千上万的GPU是每年生产的商业化,这是第一个可以修改的爱好者和研究者了解如何变化可能会影响主流芯片。布什,在公司的软件工程总监,是该论文的第一作者。“这是坏的开源社区,GPU厂商都决定保持他们的芯片规格的秘密。这阻止了开源开发人员编写可以利用该硬件的软件,“Miller说。Miller开始在2004个类似的项目,而布什开始工作的nyami 2010。”这使得其他研究者更容易进行他们自己的实验,因为他们不需要重新发明轮子.。随着“开放硬件”社区的贡献,我们可以把更多的创造性的想法,并产生一个越来越好的工具。调查结果的后果可能使处理器更容易为研究人员工作,并探讨不同的设计权衡。Dexter,Miller,Carpenter和布什已经走出了一条新的道路,可能会影响从太空旅行的一切发现心脏手术。“我有一个论文的研究思路列表我们可以探索利用nyuzi [芯片更名],专注于各种性能瓶颈。这个想法是为了寻找那些让nyuzi低效相比其他GPU和解决那些问题研究。我们也可以用nyuzi作为开展研究,不是针对GPU平台,能源效率和可靠性,”Miller说。本文《Nyami:一个综合的GPU通用建筑模型和图形的具体工作量”出现在对系统和软件的性能分析国际研讨会。http://www.binghamton.edu/mpr/news-releases/news-release.html?id=2362--------------------------------------------------------------------------------------------------------NyuziProcessorMicroarchitecture 该项目是一个专为高度并行和GPGPU应用程序设计的开源处理器。 它的灵感来自英特尔的Larrabee,虽然指令集和微架构有很大的不同。处理器运行在Verilog仿真和FPGA上。它是一种现代架构,具有集合关联L1和L2缓存,细粒度硬件多线程,流水线SIMD浮点和整数执行单元,并支持多个缓存一致性内核。它包括基于LLVM的C/C 编译器。GPU已经被证明对于具有大量内在并行性的应用程序是有用的,如图像处理和机器学习。 然而,GPU具有缺乏灵活性的高度约束的编程模型。 这个项目是一个混合架构,结合GPU架构概念,如宽SIMD和硬件多线程与通用指令集。 硬件实现的重点更多在于计算而不是图形,缺乏固定功能的图形硬件。 它能够作为协处理器或独立处理器操作。这已使用Nangate 45nm库合成。每个核心的估计:面积1.84 mm2,功率329 mW,最大频率671 Mhz。 标签:Nyuzi
### 回答1: RISC-V是一种开放的指令集架构,它是根据精简指令集计算机(RISC)的原则设计的。RISC-V指令集中文版是对RISC-V指令集进行中文翻译的版本。这个翻译版本的目的是为了方便中文用户理解和使用RISC-V指令集RISC-V指令集中文版包括了一系列指令,用于执行不同的计算和操作。这些指令可以分为几个类别,包括算术指令、逻辑指令、存储访问指令、控制转移指令等。 算术指令主要用于实现加法、减法、乘法和除法等算术运算。逻辑指令主要用于实现逻辑运算,如与、或和非等。存储访问指令用于访问存储器中的数据,包括读取和写入操作。控制转移指令用于控制程序的执行流程,如跳转、函数调用等。 RISC-V指令集中文版的设计遵循了精简指令集计算机的原则,它采用了固定长度的指令格式,每条指令都有相同数量的位数。这种设计简化了指令的解码和执行过程,提高了指令的执行效率。 通过使用RISC-V指令集中文版,开发者可以更容易地编写和调试程序。同时,由于RISC-V是开放的指令集架构,任何人都可以自由使用和扩展它,这为开发者提供了更大的灵活性和创造性。 总之,RISC-V指令集中文版是一种开放的、简洁而功能强大的指令集架构,它为中文用户提供了一种更加便捷和灵活的编程方式。 ### 回答2: RISC-V是一种开源指令集架构,其设计目标是简洁、清晰和可扩展。RISC-V指令集的中文版描述了指令的功能和操作方式,以便于中文用户理解和使用。 RISC-V指令集中包括了基本的指令和扩展指令。基本指令包括了加载、存储、算术、逻辑、控制等常用的操作。例如,LOAD指令可以从内存中加载数据到寄存器中,STORE指令可以将寄存器的数据存储到内存中。算术指令比如ADD、SUB、MUL等可以执行加法、减法、乘法等运算。逻辑指令如AND、OR、XOR可以进行与、或、异或等逻辑运算。控制指令如BRANCH、JUMP可以用于条件判断和跳转。这些基本指令可以满足大部分应用的需求。 扩展指令则可根据应用需求进行定制。例如,浮点指令扩展可以添加浮点数运算指令,向量指令扩展可以添加向量运算指令。这些扩展指令能够满足不同应用领域的需求,提高了RISC-V指令集的通用性和灵活性。 RISC-V指令集中的指令使用类似于汇编语言的格式进行描述。每个指令由操作码和操作数组成。操作码表示指令的功能,操作数则是用于指定操作的寄存器或者内存地址。指令可以通过相应的汇编器进行编译,生成机器码后可以在RISC-V架构的处理器上执行。 总的来说,RISC-V指令集中文版提供了详细的指令描述和例子,使得中文用户可以理解和使用这个开源指令集,并且可以根据需要进行扩展,以满足不同应用场景的需求。 ### 回答3: RISC-V指令集是一种开源的、精简的指令集架构。其设计思想是为了简化处理器架构,提供更高的性能和灵活性。 RISC-V指令集的设计原则是简化和统一。它采用了固定大小的指令格式,指令长度为32位,其中包含指令操作码、操作数和地址等。这种设计能够提高指令的解码效率,并且使得指令的执行速度更快。 RISC-V指令集提供了丰富的指令集扩展方式,可以根据特定应用的需求进行扩展。这样的设计使得RISC-V成为了一种高度可定制化的指令集架构,适用于多种不同的应用领域。 另外,RISC-V指令集还提供了多种特权级别的支持。在特权级别方面,RISC-V定义了四个特权级别:用户模式、监管模式、机器模式和超级模式。这样的设计使得RISC-V可以适应不同的操作环境和安全需求。 最后,RISC-V指令集是一种开源指令集架构,这意味着任何人都可以使用、修改和贡献代码。这种开源的特性促进了RISC-V的发展和创新,使得更多的人参与到指令集架构的设计和优化中。 总而言之,RISC-V指令集是一种开源的、精简的指令集架构,它具有简洁统一、可扩展性强、支持多种特权级别等特点。这些特性使得RISC-V成为了一种广泛应用的指令集架构,并在众多领域受到了广泛的关注和应用。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

马师傅哈哈哈

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值