2015-04-27 3 views
0

Я использую Keystone II от TI, который имеет ARM как хост и 8 ядер ускорителя DSP. Эти ядра DSP не разговаривают друг с другом, поскольку у них нет общей памяти.Проблема чтения/записи памяти OpenCL

Я получаю эту странную проблему, которую я не могу переписать в этот массив «cum», в котором я вычисляю кумулятивную частоту. Я только могу прочитать все, что я написал в первый раз. После этого записи не регистрируются. Какие-либо решения этой проблемы?

Устройство имеет архитектуру единой памяти. Также 'cum' и 'frequency' имеют тип CL_MEM_READ_WRITE.

Этот фрагмент кода работает на ядрах DSP

...    
     //upscan 
     for(i=0; i < 32; i++) 
     { 
      if(pid<4) 
      { 
      localvar1 = frequency[(i*8)+(2*pid)]; 
      localvar2 = frequency[(i*8)+(2*pid)+1]; 
      cum[(i*8)+(2*pid)+1] = localvar1 + localvar2; 
      } 
     } 
     for(i=0; i < 32; i++) 
     { 
      if(pid<2) 
      { 
      localvar1 = cum[(i*8)+(4*pid)+3]; 
      localvar2 = cum[(i*8)+(4*pid)+1]; 
      cum[(i*8)+(4*pid)+3] = localvar1 + localvar2; 
      }   
     } 
     for(i=0; i < 32; i++) 
     { 
      if(pid<1) 
      { 
      localvar1 = cum[(i*8)+(pid)+7]; 
      localvar2 = cum[(i*8)+(pid)+3]; 
      cum[(i*8)+(pid)+7] = localvar1 + localvar2; 
      } 
     } 
... 
+0

Если вы пишете кумулятивные частоты, если это не похоже на 'cum [(i * 8) + (2 * pid) +1] + = localvar1 + localvar2;' – Christian

+0

@Christian 'localvar1' - это сам элемент , Поэтому я уже читаю его, чтобы получить кумулятивную сумму. –

ответ

0

использовать barrier или mem_fence между вашим для петель, выбор точной флаги зависит от типа памяти вы используете (глобальный, локальный) и специфические детали устройства, но барьер должен решить вашу проблему.

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