2017-01-05 15 views
0

Когда я пытался скомпилировать свой код в OpenACC, он сообщает:отчет PGCC-S-0000-Внутренние ошибки для _mp_malloc пока нет кучи распределения

PGCC-S-0000-Internal compiler error. Call in OpenACC region to support routine - _mp_malloc (/home/lisanhu/mine/ws/C/AccSeqC/as_align.cc: 92) 
PGCC-S-0155-Compiler failed to translate accelerator region (see -Minfo messages) (/home/lisanhu/mine/ws/C/AccSeqC/as_align.cc: 92) 
inexact_dfs_iter_search(const char *, long, long, const long *, const long *, long, const char *, const long *, const char *, acc_range *, int): 
    92, Generating acc routine seq 
     93, Accelerator restriction: unsupported call to support routine '_mp_malloc' 

В то время как функция сообщила определяется следующим образом:

int 
inexact_dfs_iter_search(const char *query, const array_size q_length, array_size allowed_diffs, 
         const array_size *c, const array_size *o, array_size r_length, 
         const char *ref_bwt, const array_size *rev_o, const char *rev_bwt, 
         Range *res, int num_of_res) { 
    array_size d[q_length]; 
    calculateD(query, q_length, r_length, c, rev_o, rev_bwt, d); 
// for (int i = 0; i < q_length; ++i) { 
//  cout << d[i]; 
// } 
// cout << endl; 
// cout << strndup(query, q_length) << endl; 
    Profile p{q_length - 1, 1, r_length - 1, allowed_diffs}; 
    int prof_size = 9 * q_length + 1; 
    Profile profs[prof_size]; 
    Stack<Profile> profiles(profs, prof_size); 
    profiles.push(p); 

    Heap<Range> results(res, num_of_res); 
    while (!profiles.empty() && !results.full()) { 
     if (profiles.full()) { 
      return 1; 
     } 
//  p = profiles.peek(); 
     p = profiles.pop(); 
     inex_dfs_process_profile(query, p, c, o, ref_bwt, d, profiles, results); 
    } 
    return 0; 
} 

линия 92 является пятой линии (это часть определения функции, так странно)

Я действительно буду признателен, если кто-то может помочь мне с этим.

ответ

0

Я нашел причину этого. Для array_size d[q_length]; он фактически вызывает _mp_malloc для выделения памяти в стеке. Я попытался заменить q_length на константу, и она отлично работает. (хотя это временная настройка, но я выяснил, что он, наконец,)

+0

Извините Sanhu Li, но мы еще не поддерживаем VLA в коде устройства. Конечно, мы не должны давать ICE, а скорее сообщение об ошибке. Пожалуйста, отправьте примечание в службу поддержки PGI ([email protected]), и мы проверим. –

 Смежные вопросы

  • Нет связанных вопросов^_^