for循环的多个pragma指令(C和VS 2013)

时间:2015-09-11 13:12:26

标签: c visual-studio optimization openmp vectorization

我尝试使用OpenMP将for循环计算拆分为多个线程。另外,我试图指示编译器对分配给每个线程的每个块进行矢量化。代码如下:

#pragma omp for private(i)
__pragma(loop(ivdep))
for (i = 0; i < 4096; i++)
    vC[i] = vA[i] + SCALAR * vB[i];

问题在于,两个编译指示都会期待for循环。

是否有任何智能构造可以使这项工作?

有些人可能会争辩说,由于使用OpenMP进行for循环分割,循环的矢量化不会起作用。但是我读到 #pragma omp for 将循环划分为多个等于线程数的连续块。 是thitt吗?

1 个答案:

答案 0 :(得分:2)

如何使用#pragma omp for simd private(i)代替pragma + __pragma()?

编辑:由于OpenMP 4似乎不适合您,您可以手动拆分循环以通过使用{{1}手动计算索引限制来摆脱#pragma omp for }和omp_get_num_threads(),然后为每个线程循环保留omp_get_thread_num()

编辑2:因为我是个好人,因为这是样板(在MPI中编程时更常见,但仍然如此)但是当你第一次做到这一点时非常烦人,这是一个可能的解决方案:

ivdep