摘要: 流处理器与其他部件协同工作的过程如下: 与 CPU 的协同: 任务分配与指令传输:CPU 负责整体的系统控制和任务调度。在图形渲染等需要大量并行计算的场景中,CPU 将相关的图形数据处理任务分配给 GPU。例如在运行 3D 游戏时,游戏的逻辑部分(如玩家的移动、游戏规则的判断等)由 CPU 处理,而 阅读全文
posted @ 2024-11-09 18:58 MarsCactus 阅读(7) 评论(0) 推荐(0) 编辑
摘要: OpenGL 纹理采样主要在 GPU 的流式多处理器(Streaming Multiprocessor,SM)中完成。SM 内部包含多个用于执行计算的核心(Core)以及纹理缓存(Texture Cache)等部件,这些部件协同工作来实现纹理采样。具体过程如下: 纹理数据获取: 当需要进行纹理采样时 阅读全文
posted @ 2024-11-09 18:57 MarsCactus 阅读(24) 评论(0) 推荐(0) 编辑
摘要: NVIDIA GPU 内部主要由以下部件组成: 流处理器(Streaming Processor 或 CUDA Core): 功能:这是 NVIDIA GPU 最基本的计算单元,用于执行各种算术和逻辑运算,比如加法、减法、乘法、除法等。在图形处理中,负责对图形数据进行大量的数学计算,如顶点坐标变换、 阅读全文
posted @ 2024-11-09 18:51 MarsCactus 阅读(62) 评论(0) 推荐(0) 编辑
摘要: GPU 架构是图形处理器(GPU)的内部设计和组织方式,它决定了 GPU 的性能、功能和效率。以下是 GPU 架构的一些主要组成部分和相关特点: 流处理器(Streaming Processor)或着色器核心(Shader Core): 这是 GPU 中最基本的计算单元,负责执行图形渲染和计算任务中 阅读全文
posted @ 2024-11-09 18:44 MarsCactus 阅读(23) 评论(0) 推荐(0) 编辑
摘要: 算术逻辑单元(ALU): 功能:这是流处理器的核心运算部件,用于执行各种算术和逻辑运算,比如加法、减法、乘法、除法、比较、逻辑与、逻辑或等操作。在图形处理中,ALU 会对图形数据进行大量的数学计算,例如对顶点的坐标进行变换、对像素的颜色值进行计算等;在通用计算任务中,如深度学习的训练和推理,ALU 阅读全文
posted @ 2024-11-09 18:43 MarsCactus 阅读(11) 评论(0) 推荐(0) 编辑
摘要: 以下是一个使用GLSL(OpenGL Shading Language)和GLM(OpenGL Mathematics Library)来实现OpenGL trackball功能的示例。这个示例将展示如何通过鼠标操作来旋转场景中的物体,就好像在操作一个虚拟的trackball一样。 1. 准备工作 阅读全文
posted @ 2024-11-09 18:33 MarsCactus 阅读(6) 评论(0) 推荐(0) 编辑
摘要: 以下是一个使用GLSL(OpenGL Shading Language)和GLM(OpenGL Mathematics)库来实现OpenGL trackball功能的示例。这个示例将展示如何通过鼠标操作来旋转场景中的物体,就像在操作一个虚拟的轨迹球一样。 1. 准备工作 包含必要的头文件和库: 需要 阅读全文
posted @ 2024-11-09 18:31 MarsCactus 阅读(27) 评论(0) 推荐(0) 编辑
摘要: 在 OpenGL 中实现 trackball(轨迹球)功能可以让用户通过鼠标操作来旋转场景中的物体,就好像在操作一个虚拟的轨迹球一样。以下是一种常见的实现方式的步骤: 基本原理 Trackball 的基本思想是将二维的鼠标移动映射到三维空间中的旋转操作。当用户在屏幕上按下鼠标并移动时,根据鼠标的起始 阅读全文
posted @ 2024-11-09 18:29 MarsCactus 阅读(59) 评论(0) 推荐(0) 编辑
摘要: 在 C++ 中,条件变量的等待操作主要通过std::condition_variable类来实现,其等待操作涉及到与互斥锁的配合使用,以下是详细的实现过程: 包含必要的头文件 首先需要包含<condition_variable>和头文件,因为条件变量std::condition_variable的使 阅读全文
posted @ 2024-11-09 18:18 MarsCactus 阅读(29) 评论(0) 推荐(0) 编辑
摘要: 在使用条件变量进行多线程编程时,确实存在丢失通知的风险,以下是一些可以避免丢失通知的方法: 正确的等待条件设置 原理: 条件变量是基于特定条件来让线程等待或继续执行的。如果等待条件设置得不准确,可能会导致线程在不应该醒来的时候醒来,或者错过真正需要醒来的时机,从而出现通知丢失的情况。所以,要确保等待 阅读全文
posted @ 2024-11-09 18:11 MarsCactus 阅读(12) 评论(0) 推荐(0) 编辑
摘要: 互斥锁(Mutex) 原理: 互斥锁用于保护共享资源,确保在同一时刻只有一个线程能够访问被保护的资源。当一个线程想要访问共享资源时,它首先尝试获取互斥锁。如果锁已经被其他线程持有,那么该线程会被阻塞,直到锁被释放。一旦获取到锁,线程就可以安全地访问共享资源,访问结束后再释放锁,以便其他线程能够获取锁 阅读全文
posted @ 2024-11-09 18:10 MarsCactus 阅读(56) 评论(0) 推荐(0) 编辑
摘要: C++11 之前的情况 在 C++11 之前,标准并没有对静态变量在多线程环境下的初始化提供线程安全保证。这意味着如果多个线程同时访问一个未初始化的静态变量,可能会导致初始化过程多次执行或者出现数据竞争等问题。 例如,假设有一个函数包含一个静态局部变量: int getValue() { stati 阅读全文
posted @ 2024-11-09 18:02 MarsCactus 阅读(55) 评论(0) 推荐(0) 编辑