Jus*_*tin 5 multithreading cuda openmp
术语线程分歧用于CUDA; 根据我的理解,这是一种情况,其中分配了不同的线程来执行不同的任务,这导致了巨大的性能损失.
我想知道,在openmp中这样做有类似的惩罚吗?例如,假设我有一个6核处理器和一个包含6个线程的程序.如果我有条件使3个线程执行某个任务,然后让其他三个线程执行完全不同的任务,那么会有很大的性能损失吗?我想在本质上它是使用openmp来做MIMD.
基本上,我正在用openmp和CUDA编写程序.我希望两个线程运行CUDA内核,而另一个线程运行C代码.谢谢.
不,使用OpenMP分散线程没有性能损失.这是CUDA中的一个问题,因为指令同时广播到一组核心的方式.当一个OpenMP线程以CPU核心为目标时,每个CPU核心都有自己独立的指令集,它就像任何其他单线程程序一样运行.
如果在线程发散后存在同步障碍,您可能会发现某些核心未被充分利用,因为这会迫使更快的线程等待较慢的线程赶上.