Разделение области 1024x512 пикселей на блоки 4x4 пикселей, выделение 15 ячеек для частиц в каждом блоке, имеющих 12 тыс. Частиц для вычисления только с силами исключения, заняло не более 8 мс для Intel HD-400 (имеет 12 вычислительных блоков, черезopencl api) для:
for(each particle) // this part unfolded on N workitems of opencl
for(each neighboring box) {
for(each particle in selected box)
{
dist = distance(particles[i],particles[j]);
if(dist < limit) {/* sqrt, mult, div, add, sub */}
}
}
, поэтому разделение пространства и использование opencl, безусловно, увеличивает скорость.Без разделения, перебор занял 44 мс, что неплохо для бюджетного интегрированного gpu с одноканальной медленной памятью.
Кроме того, при одновременном использовании второго процессора, около 0,5 мс - 0,1 мс, но потому чтопамяти в фоновом режиме.