Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 数组元素看似任意变化[并行快速排序/前缀和]_C_Parallel Processing_Cilk - Fatal编程技术网

C 数组元素看似任意变化[并行快速排序/前缀和]

C 数组元素看似任意变化[并行快速排序/前缀和],c,parallel-processing,cilk,C,Parallel Processing,Cilk,因此,我正在使用Cilk在C中实现并行快速排序,我遇到了一个奇怪的问题。我的代码的相关部分,以供参考(并就长度提前道歉): #包括 #包括 #包括 #包括 #包括 #包括 无效前缀(int*输入,int*输出,int长度){ 如果(长度==1){ 输出[0]=输入[0]; 返回; } int i; int nPairs=(int)地板((双)长)/2; int pairs=(int)ceil((双)长)/2; int z[对]; int w[对]; (i=0;inPairs)的cilk_{ z[

因此,我正在使用Cilk在C中实现并行快速排序,我遇到了一个奇怪的问题。我的代码的相关部分,以供参考(并就长度提前道歉):

#包括
#包括
#包括
#包括
#包括
#包括
无效前缀(int*输入,int*输出,int长度){
如果(长度==1){
输出[0]=输入[0];
返回;
}
int i;
int nPairs=(int)地板((双)长)/2;
int pairs=(int)ceil((双)长)/2;
int z[对];
int w[对];
(i=0;inPairs)的cilk_{
z[pairs-1]=输入[length-1];
}
前缀(z、w、pairs);
(i=0;i0;i--)的cilk_{
输入[i]=输入[i-1];
}
输入[0]=0;
}
void paraSort(双*数组,整数长度){
如果(长度==1){
返回;
}
int pivot=rand()%长度;
int低集[长度];
整数高位集[长度];
int equalSet[长度];
int i;
(i=0;i0)的cilk_{
paraSort(高排名,numHigh);
}否则如果(numLow>0&&numHigh==0){
帕拉斯波特(低地,努姆洛);
}

(i=0;i你自相矛盾

equalIndex是除最后一个元素为1之外的所有零

但后来你推测

不知何故,equalIndex中的值分配不正确

.你不能两全其美

我不知道Cilk,但是从C中推断出来,我倾向于认为你在破坏你自己的数据。特别是考虑这个代码,这似乎是问题所在:

double lowList[imin(numLow,1)];
double highList[imin(numHigh,1)];
double equalList[numEqual];

cilk_for(i=0;i<length;i++){
    if(lowSet[i]==1){
       lowList[lowIndex[i]] = array[i];
    } else if(highSet[i]==1){ 
       highList[highIndex[i]] = array[i];
    } else if(equalSet[i]==1){
       equalList[equalIndex[i]] = array[i];
    }
}
double-lowList[imin(numLow,1)];
双高名单[imin(numHigh,1)];
双重平等主义者[numEqual];

cilk_for(i=0;i
lowList
highList
只要调用
numLow
numHigh
(或者1,如果没有这样的元素),它们依次是
lowIndex
highIndex
prefixSum
之后但在
prefixScan
之前的最后一个元素。(编辑:这应该是满足这些条件的图元数-小于轴、大于轴等)我知道访问数组定义边界之外的值会产生分段错误,这就是这里发生的情况-我正在尝试找出
equalList的情况。
…你知道吗,这应该是最大值,而不是最小值。让我来解决这个问题。这似乎已经解决了问题!非常感谢。现在尝试并选择把它放大。
double lowList[imin(numLow,1)];
double highList[imin(numHigh,1)];
double equalList[numEqual];

cilk_for(i=0;i<length;i++){
    if(lowSet[i]==1){
       lowList[lowIndex[i]] = array[i];
    } else if(highSet[i]==1){ 
       highList[highIndex[i]] = array[i];
    } else if(equalSet[i]==1){
       equalList[equalIndex[i]] = array[i];
    }
}