CUDA中使用术语线程发散;根据我的理解,这是一种情况,不同的线程被分配来完成不同的任务,这会导致很大的性能下降。Openmp线程分歧?
我想知道,是不是也有类似处罚OpenMP中这样做呢?例如,假设我有一个6核心处理器和一个包含6个线程的程序。如果我有一个条件使得3个线程执行某个任务,然后让其他三个线程完成一个完全不同的任务,那么会不会有很大的性能下降?我想实质上是使用openmp来做MIMD。
基本上,我正在用openmp和CUDA编写一个程序。我想要两个线程运行CUDA内核,而另一个线程运行C代码。谢谢。
只是好奇,在OpenMP中如何去做这件事?我知道你已经回答了你的问题,但很高兴看到一段代码。 – 2012-04-20 22:37:42
这是题外话题,但是在你让主机代码过于复杂之前,你可能不需要多于一个CUDA的CPU线程 - 使用CUDA 4.0和更高版本的多GPU编程可以从一个主机线程完成,所以除非你在主机方面有同样的工作,多个线程可能不会增加任何东西,但复杂性。如果您在CPU上执行并行工作,则可以使用一个CPU线程用于CUDA,其余用于CPU并行工作。 – harrism 2012-04-23 04:49:08