2015-12-12 2 views
0

У меня возникла проблема с передачей данных с сопроцессора Intel Xeon Phi для размещения процессора. Я пытаюсь выполнить вычисление с использованием модели разгрузки. В начале моего вычисления я переношу все данные в сопроцессор (один массив). После вычисления я хочу перенести на основной процессор только часть этого массива, но в результате я получаю следующую ошибку:Intel MIC - ошибка разгрузки: передача данных

ошибка при загрузке: передача данных (base = 0x75654640, size = 7896016) не подмножество существующего распределения (base = 0x75654640, размер = 4512008)

Вот часть исходного кода:

array_Dc = _mm_malloc(...); 
... 
#pragma offload target(mic : micZero) \ 
in(array_Dc : length(size) alloc_if(0) free_if(0)) \ 
out(array[micBegin : micEnd] : alloc_if(0) free_if(0) 
{ 
    //... 
} 

в этом случае размер этого массива = 564001, micBegin = 423001, micEnd = 564001. мне нужно передать данные потому что они используются процессором. В чем проблема? Как его решить?

ответ

2

Жалоба на то, что вы пытаетесь передать часть массива, не сообщая ему, сколько массива он должен выделять на сопроцессоре. Он хочет знать, хотите ли вы выделить только часть массива, который вы передаете, или если вы хотите выделить большую часть или даже весь массив. Есть несколько вещей, которые вы можете сделать. Один из них - использовать опцию alloc. В документации для компилятора 16.0 вы можете найти направления на Allocating Memory for Parts of Arrays. В принципе, ваш вариант из стали бы - если вы хотите, чтобы выделить место для полного массива на сопроцессора:

#pragma offload ........... out(array[micBegin : micEnd] : alloc[0 : 564001])

Другим вариантом было бы отделить выделение массива от передачи данных, например, с помощью offload_transfer , В документации для компилятора 16.0 вы можете найти направление по адресу About Asynchronous Data Transfer.

Последнее значение - в C/C++ значение micEnd будет состоять из числа элементов, в отличие от Fortran, где это будет индекс последнего элемента. Как старый программист Фортран, это подталкивает меня к стене, но так оно и есть.

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