如何使以下顺序代码并行?

问题描述 投票:-2回答:1

我想将以下内核代码并行化,在下面的代码中,a的大小为n,b和c为8 * n,而d的大小小于n(例如:3 * n / 4)

j=0;
for(i=0;i<n;i++)
 {
  if (a[b[i]]!=a[c[i]])
  {
   d[j]=b[i];
   j++;
  }
 }

由于a和d的元素数量不相同,因此我面临给i = get_global_id(0)的问题,因为这样做,在d的某些元素中,如果'如果“条件违反...!那么我该如何进行并联..?如果不是这样,那么如果我将值放置在d中的位置存储在另一个数组中,是否有可能删除d在内核中的“无值”位置。

我想使以下内核代码并行,在下面的代码中,a的大小为n,b和c为8 * n,而d的大小小于n(例如:3 * n / 4)j = 0; for(i = 0; i ] >>>

opencl
1个回答
1
投票

基本上,这是基于谓词的并行数组压缩。

看看Parallel Prefix Sum (Scan) with CUDA或推力http://docs.nvidia.com/cuda/thrust/index.html

© www.soinside.com 2019 - 2024. All rights reserved.