openacc говорит, что ошибка сегментации при разделении больших данных

Поскольку у меня есть большие данные для malloc в графическом процессоре, я должен разделить их. Как показано ниже, чтобы разделить temp1 и temp2 от начала до конца один раз:

for (int start = 0; start < total; start += step) {
    int end = start + step > total?total:start+step;
    fprintf(stderr, "total %ld start :%ld end :%ld\n", total, start, end);

    #pragma acc data pcopyin(sum[0:n_sample], num[0:n_sample*total], lognn[0:preFact])
    #pragma acc data copy(temp1[start*n_array1:end*n_array1], temp2[start*n_array2:end*n_array2])
    #pragma acc kernels loop independent
    for (int index = start; index < end; ++index) {
                unsigned long long * t1 = temp1 + index * n_array1;
                unsigned long long * t2 = temp2 + index * n_array2;
               // fprintf(stderr, "use %d\t", index*n_array1);
                int k = count / 32;
                int l = count / 64;
                t1[k] <<= 2;
                t2[l] <<= 1;
                int x = num[index * n_sample + i];
                int y = num[index * n_sample + j];
     }
}

но мне всегда говорят, что ошибка сегментации, когда первый цикл завершен и начинается второй цикл. Индексная переменная должна быть [0: конец-начало]? или следует выполнить некоторую синхронизацию после завершения цикла?

Благодарность!!


person luxuia    schedule 17.04.2013    source источник
comment
Какой компилятор и версию используете? Какой GPU у вас в системе?   -  person Mark Ebersole    schedule 17.04.2013


Ответы (1)


Предложение данных не должно быть [0:конец-начало]. Нижняя граница и верхняя граница могут быть выражениями. Однако вы должны убедиться, что нижняя_граница ‹ верхняя_граница

person user2054656    schedule 17.04.2013
comment
Извините, я забыл, что в openacc подмассив определяется как arr[start:length]. большое спасибо - person luxuia; 18.04.2013
comment
и.... можете ли вы сказать мне, как исправить предупреждение компилятора, когда я использую вот так: copyin(temp[starti*n_array:stepi*n_array, temp[startj*n_array:stepj*n_array]) предупреждение компилятора PGC-W-0155-two data clauses for array temp я использую PGI, так что я могу сделать.... - person luxuia; 18.04.2013