如何在没有任何非标准库的情况下在C中进行多处理

如何在没有任何非标准库的情况下在C中进行多处理,c,parallel-processing,multiprocessing,opencl,C,Parallel Processing,Multiprocessing,Opencl,假设你想用C从头开始编写自己的Opencl版本,你会怎么做?OpenCL如何在幕后完成并行编程?只是pthreads吗?涵盖了很多功能,包括运行时API库、基于C的编程语言、该语言的库环境,以及支持多种实现的加载程序库。如果您想看看如何实现、和存在的开源示例。至少Pocl的CPU目标确实使用了pthreads,但OpenCL设计用于支持将任务卸载到协处理器(如GPU)以及使用向量操作,因此一个线程不一定运行一个工作项 标题没有提到OpenCL,但要求使用标准库。标准的伟大之处在于有太多的选择;例

假设你想用C从头开始编写自己的Opencl版本,你会怎么做?OpenCL如何在幕后完成并行编程?只是pthreads吗?

涵盖了很多功能,包括运行时API库、基于C的编程语言、该语言的库环境,以及支持多种实现的加载程序库。如果您想看看如何实现、和存在的开源示例。至少Pocl的CPU目标确实使用了pthreads,但OpenCL设计用于支持将任务卸载到协处理器(如GPU)以及使用向量操作,因此一个线程不一定运行一个工作项

标题没有提到OpenCL,但要求使用标准库。标准的伟大之处在于有太多的选择;例如,C标准不提供多线程,也不保证多任务。多处理通常指在多个进程中运行,例如在CPython中,由于全局解释器锁,这是获得Python代码并发执行的唯一方法。这可以通过Unix标准函数完成。多线程可以使用POSIX.1c标准扩展或。OpenMP的最新版本还支持加速器卸载,这正是OpenCL的设计宗旨。由于OpenMP和OpenCL提供了受限和抽象的环境,因此原则上它们可以在许多其他环境之上实现,例如CUDA

实现并行执行本身需要硬件知识和访问权限,通常是操作系统的领域;POSIX线程通常是这方面的抽象层,例如在Linux上使用

OpenMP通常是将C程序转换为并行执行的最简单方法,因为许多编译器都支持它;您可以使用pragmas注释分支点,并使用例如-fopenmp for GCC进行编译。如果在没有OpenMP的情况下编译,这样的程序仍然可以像以前一样工作

涵盖了许多功能,包括运行时API库、基于C的编程语言、该语言的库环境,以及支持多种实现的加载程序库。如果您想看看如何实现、和存在的开源示例。至少Pocl的CPU目标确实使用了pthreads,但OpenCL设计用于支持将任务卸载到协处理器(如GPU)以及使用向量操作,因此一个线程不一定运行一个工作项

标题没有提到OpenCL,但要求使用标准库。标准的伟大之处在于有太多的选择;例如,C标准不提供多线程,也不保证多任务。多处理通常指在多个进程中运行,例如在CPython中,由于全局解释器锁,这是获得Python代码并发执行的唯一方法。这可以通过Unix标准函数完成。多线程可以使用POSIX.1c标准扩展或。OpenMP的最新版本还支持加速器卸载,这正是OpenCL的设计宗旨。由于OpenMP和OpenCL提供了受限和抽象的环境,因此原则上它们可以在许多其他环境之上实现,例如CUDA

实现并行执行本身需要硬件知识和访问权限,通常是操作系统的领域;POSIX线程通常是这方面的抽象层,例如在Linux上使用


OpenMP通常是将C程序转换为并行执行的最简单方法,因为许多编译器都支持它;您可以使用pragmas注释分支点,并使用例如-fopenmp for GCC进行编译。如果在没有OpenMP的情况下编译,这样的程序仍然可以像以前一样工作

首先:OpenCL!=并行处理。这是它的优势之一,但它还有很多优点

关注问题的一部分:

假设您想用C从头开始编写自己的Opencl版本

首先:熟悉驱动程序开发。我们的GPU CL运行时与驱动程序密切相关。如果您想从头开始,您需要非常熟悉PCIe协议,并挖掘一些关于切换管脚的内存。这是可行的,但它是一个不平凡的例子

CPU级别的多线程处理是一个完全不同的问题,从阴阳两方面都有记录。使用一个不需要自己编写的操作系统的好处是,它已经为您处理好了

只是pthreads吗

你认为这些措施是如何实施的?它们的功能是规范的一部分,但它们的实现完全依赖于平台,您可以称之为非标准。线程的底层实现取决于操作系统 这里有一个,它不是一个给定的编译器,还有很多其他因素


这是一个很好的问题。

首先:OpenCL!=并行处理。这是它的优势之一,但它还有很多优点

关注问题的一部分:

假设您想用C从头开始编写自己的Opencl版本

首先:熟悉驱动程序开发。我们的GPU CL运行时与驱动程序密切相关。如果您想从头开始,您需要非常熟悉PCIe协议,并挖掘一些关于切换管脚的内存。这是可行的,但它是一个不平凡的例子

CPU级别的多线程处理是一个完全不同的问题,从阴阳两方面都有记录。使用一个不需要自己编写的操作系统的好处是,它已经为您处理好了

只是pthreads吗

你认为这些措施是如何实施的?它们的功能是规范的一部分,但它们的实现完全依赖于平台,您可以称之为非标准。线程的底层实现取决于操作系统(如果有操作系统,而不是给定的)、编译器和大量其他因素


这是一个很好的问题。

多处理不是多线程不,不是。它正在利用标准C不知道的特殊硬件资源。如果你想在C语言中实现它,你必须处理硬件寄存器,suchIt可能使用嵌入式汇编代码,并且是高度不可移植的。最持久的标准是OpenMP、MPI。这些都是标准。OpenCL不仅仅是pthread,它正在逐渐消失。它只可移植到实现了底层硬件抽象的平台上。与Java类似——只要您在JVM可用的平台上进行移植,Java就是可移植的。多处理不是多线程不,不是。它正在利用标准C不知道的特殊硬件资源。如果你想在C语言中实现它,你必须处理硬件寄存器,suchIt可能使用嵌入式汇编代码,并且是高度不可移植的。最持久的标准是OpenMP、MPI。这些都是标准。OpenCL不仅仅是pthread,它正在逐渐消失。它只可移植到实现了底层硬件抽象的平台上。与Java类似——只要你移植到一个有JVM的平台上,Java就是可移植的。回答不错。但是,多进程通常指在多个进程中运行,这是非常特定于平台的。在单个进程中启动一组线程或内核,在单个进程中并行处理处理器密集型任务,这是OpenMP的主要领域,而多处理是MPI的主要领域,包括跨多台计算机的MPI;实施包括例如MPIch和OpenMPI。但是边界一直在变化。说得好!这里有更多的字符。回答很好。但是,多进程通常指在多个进程中运行,这是非常特定于平台的。在单个进程中启动一组线程或内核,在单个进程中并行处理处理器密集型任务,这是OpenMP的主要领域,而多处理是MPI的主要领域,包括跨多台计算机的MPI;实施包括例如MPIch和OpenMPI。但是边界一直在变化。说得好!这里有更多的字符。