小编Pun*_*han的帖子

嵌套锁和简单锁之间的区别

我无法弄清楚omp_nest_lock_t和omp_lock_t lck之间的区别; 这段代码完美地同步了longtask(),但在执行时无法弄清楚它们之间的区别;

  omp_nest_lock_t lck_n;          //omp_lock_t lck;
    int t_id;
    omp_init_nest_lock(&lck_n);    //omp_init_lock(&lck);
    omp_set_num_threads(6);

    #pragma omp parallel private(t_id) shared(lck_n) 
    {
    t_id = omp_get_thread_num();
    omp_set_nest_lock(&lck_n);      //omp_set_lock(&lck);
    printf("\nhi by %d\n",t_id);
    long_task();
    printf("My thread id is %d.\n", id);
   omp_unset_nest_lock(&lck_n);      //omp_unset_lock(&lck);
    }
    omp_destroy_nest_lock(&lck_n);    //omp_destroy_lock(&lck);
Run Code Online (Sandbox Code Playgroud)

c c++ parallel-processing multithreading openmp

4
推荐指数
1
解决办法
1581
查看次数

openMP的目标数据和目标数据之间的区别?

目标构造将代码区域从主机卸载到目标设备。变量pv1v2,明确地映射到使用在地图子句目标设备。目标数据也一样,

那么,这意味着:

  • “该构造创建的变量将在整个目标数据区域中持续存在”
  • “创建新设备数据环境”

关于“目标数据”结构,

我的意思是这些代码之间的卸载机制有什么区别:

void vec_mult1(float *p, float *v1, float *v2, int N)
{
    int i;
    init(v1, v2, N);
#pragma omp target map(to: v1[0:N], v2[:N]) map(from: p[0:N])
#pragma omp parallel for
    for (i=0; i<N; i++)
        p[i] = v1[i] * v2[i];
    output(p, N);
}


void vec_mult2(float *p, float *v1, float *v2, int N)
{
    int i;
    init(v1, v2, N);
#pragma omp target device(mic0) data map(to: v1[0:N], v2[:N]) map(from: p[0:N])
    {
    //this code runs …
Run Code Online (Sandbox Code Playgroud)

c c++ parallel-processing multithreading openmp

4
推荐指数
1
解决办法
2483
查看次数

为什么 openMP 取消构造不取消工作共享区域?

我原以为变量“i”将达到最大值 11,然后“for”工作共享区域将被取消,代码是:

omp_set_num_threads(11);

#pragma omp parallel
{

    #pragma omp for
    for(i=0;i<9999;i++){
        printf("%d by %d \n",i,omp_get_thread_num());

        if(i>11)   //2
        {
            #pragma omp cancel for 
        }

    }//for

}//parallel omp pragma
Run Code Online (Sandbox Code Playgroud)

但是我持有最大值 9998 的变量我认为这意味着工作共享区域没有被取消。

c c++ parallel-processing process openmp

3
推荐指数
1
解决办法
1250
查看次数

标签 统计

c ×3

c++ ×3

openmp ×3

parallel-processing ×3

multithreading ×2

process ×1