Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > CUDA - распараллелить тройной цикл


Автор: daemvil 28.1.2011, 18:35
уже очень долго бьюсь с этой задачей, никак не могу распараллелить приведенный ниже цикл. Может кто подскажет как это сделать?
Код

for (int k1=1;k1<=16;k1++) 
 for (int t1=0;t1<=NPackets;t1++)  //t=0...T
  for (int t2=t1;t2<=NPackets;t2++)  //k=t...T
  {
    vzaimkorr[k1][t2-t1]=vzaimkorr[k1][t2-t1]+kans[vk[k1][1]][t1]*kans[vk[k1][2]][t2];    
  }

NPackets - число точек(их 21000000, можно конечно взять пачками по 75000 точек, если это упростит задачу)
vzaimkorr - двухмерный массив из 16 корреляционных функций по NPackets точек типа float. (16xNPackets)
vk - двухмерный массив индексов 16х2 (нужен для взаимнокорреляционных функций, это "комбинации" каналов kans)
kans - массивы данных для обработки (16хNPackets)

допустим k1 можно раскидать на 16 блоков
а с остальными циклами как быть? особенно с последним, который от t1 до NPackets. я слышал, что видеокарты сейчас вроде как циклы сами распараллеливают некоторые, будет ли это эффективно здесь?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)