Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Multithreading 直接Cpu线程或OpenCL_Multithreading_Opencl_Cpu - Fatal编程技术网

Multithreading 直接Cpu线程或OpenCL

Multithreading 直接Cpu线程或OpenCL,multithreading,opencl,cpu,Multithreading,Opencl,Cpu,我搜索了各种问题(和网络),但没有找到任何令人满意的答案 我很好奇是使用线程直接加载CPU核心还是使用OpenCL实现。OpenCl只是为了使多处理器/内核更具可移植性,这意味着将代码移植到GPU或CPU,还是OpenCl更快、更高效?我知道GPU有更多的处理单元,但这不是问题所在。是代码中的间接多线程还是使用OpneCL 对不起,我还有一个问题 如果IGP与Descrete图形卡共享PCI线,并且其驱动程序无法在Windows 7下加载,我不得不假设它将不可用,即使您只想使用集成GPU的处理核

我搜索了各种问题(和网络),但没有找到任何令人满意的答案

我很好奇是使用线程直接加载CPU核心还是使用OpenCL实现。OpenCl只是为了使多处理器/内核更具可移植性,这意味着将代码移植到GPU或CPU,还是OpenCl更快、更高效?我知道GPU有更多的处理单元,但这不是问题所在。是代码中的间接多线程还是使用OpneCL

对不起,我还有一个问题


如果IGP与Descrete图形卡共享PCI线,并且其驱动程序无法在Windows 7下加载,我不得不假设它将不可用,即使您只想使用集成GPU的处理核心。这是正确的还是有一种方法可以在没有驱动程序的情况下访问IGP。

编辑:正如@Yann Vernier在评论部分指出的那样,我对使用的术语要求不够严格。因此,在这篇文章中,我使用thread作为workitem的同义词。我不是指CPU线程

我真的无法将OCL与任何其他允许使用CPU不同内核的技术进行比较,因为到目前为止我只使用了OCL
然而,我可能会提出一些关于OCL的意见,尤其是我不太同意ScottD的意见
首先,即使开发运行在GPU上的OCL内核也可以在CPU上运行,但这并不意味着它是高效的。原因很简单,OCL在CPU和GPU上的工作方式不同。要更好地了解其区别,请参阅的第6章
总之,虽然GPU将同时启动给定工作组中的一组线程,但CPU将在同一工作组中的一个核心线程上一个接一个地执行。关于OCL支持的两种不同类型的编程模型,请参见第3.4点。这可以解释为什么OCL内核在CPU上的效率低于“经典”代码:因为它是为GPU设计的
开发人员是以CPU还是GPU为目标不是“认真工作”的问题,而是取决于最适合您需要的编程模型类型。另外,OCL支持CPU的事实也很好,因为它可以在没有配备适当GPU的计算机上正常降级(尽管很难找到这样的计算机)。

关于AMD平台,我已经注意到了一些CPU的问题,以及带有ATI的笔记本电脑。我观察到我的一些代码性能低下,并且崩溃。但原因是处理器是英特尔的。AMD平台将声明拥有可用的CPU设备,即使它是Intel CPU。然而,它将无法像应该的那样高效地使用它。当我针对CPU运行完全相同的代码时,但在安装(并使用)Intel平台之后,所有问题都消失了。这是性能不佳的另一个可能原因。


关于iGPU,它不共享PCIe线路,它位于CPU芯片上(至少是Intel的),是的,您需要驱动程序来使用它。我假设您试图安装驱动程序,并收到类似“您的计算机不符合最低要求…”或类似消息。我想这取决于电脑,但在我的情况下,我有一个配备了NVIDIA和i7 CPU(它有一个HD4000 GPU)的桌面。为了使用iGPU,我必须首先在BIOS中启用它,这允许我安装驱动程序。当然,显示器一次只能使用两个GPU中的一个(取决于BIOS设置),但是,我可以使用OCL访问这两种代码。

在最近使用英特尔opencl工具进行的实验中,我们体验到opencl的性能非常类似于基于gcc和icc的CUDA和基于intrincics的AVX代码,比以前的实验(几年前)要好得多我们看到opencl的性能更差。

运行opencl内核的CPU不一定每个线程都坚持一个CL工作项;它可能会使用向量操作,这些操作很难通过普通编译器访问,并且可能不会出现在您运行的每台机器上。它不会像GPU那样大规模,但它肯定不同于普通C或OpenMP。感谢您的澄清。事实上,我使用线程作为workitem的同义词(来源于NVIDIA使用CUDA的“线程”一词)。我将编辑我的评论。