私は、Stampede を通じて Xeon Phi を使用して Collatz Conjecture 問題に取り組んでいます。コードがテストされ、最大 100,000 の値で正常に動作することをテストしましたが、100 万までの値をテストすると、すぐにセグメンテーション エラー ("SIGSEV") が発生します。私は何日も壁に頭をぶつけていましたが、単にバグを理解することができません. どんな助けでも本当に感謝しています。
typedef unsigned long long bigInt;
// Number to test to (starting from 1)
#define bigSize 100000
typedef struct {
int numSteps;
bigInt stopPoint;
} batcher;
typedef struct {
bigInt num;
batcher to_batch;
} to_ret;
int main () {
//Stores values as [num][#steps to smaller val][smaller val]
to_ret retlist[bigSize];
//Stores values as [#steps to smaller val][smaller val], sorted by num
batcher results[bigSize];
...
#pragma offload target(mic:0) inout(retlist) shared(retlist)
{
#pragma omp parallel for
for(i = 1; i < bigSize; i++){
retlist[i].num = i + 1;
bigInt next = retlist[i].num;
int count = 0;
do {
count++;
if (next%2 == 1)
next=(3*next+1)/2;
else
next/=2;
} while(next > retlist[i].num);
retlist[i].to_batch.numSteps = count;
retlist[i].to_batch.stopPoint = next;
}
}
///Organizes data into a sorted array
#pragma omp parallel for
for (i = 0; i < bigSize; i++){
results[retlist[i].num - 1] = retlist[i].to_batch;
}
...
}
問題は上記のコード セグメントのどこかにあると確信しています。