Есть такая штука -
GPGPU.
Одним из вариантов этого GPGPU является язык
BrookGPU - вариант языка
Brook с расчетом его использования вместе с видеоускорителями.
Идея языка проста и называется она stream-kernel. Мы простыми функциями которые называются kernel обрабатываем данные, уложенные в stream. В случае с GPU kernel должен быть транслируем в шейдеры и данные находятся в текстурах.
Как выглядит kernel:
kernel void sumalpha(float arga<>,float argb<>,float alpha,out float result<>) {
result = arga*alpha+argb*(1-alpha);
};arga, argb и result - stream, потоки. В нашем ядре sumalpha мы складываем их поэлементно с "прозрачностью" alpha. alpha - это параметр ядра.
Вызов тоже прост:
...
float a<100>, b<100>;
... иннициализация a и b ...
float res<100>;
float alpha = ...;
sumalpha(a,b,alpha,res);В принципе, ко входным потокам мы можем адресоваться произвольно instream[i,j], но на выходе результат пишется в текущую точку выходного потока (выходных потоков). Ее можно определить с помощью функции indexof(stream).
Что для всего этого есть: сортировка на GPU со сложностью O(Nlog²N) (bitonic sort), трассировка лучей. Это все есть в примерах.
Определенный минус всего этого дела - заточенность под хардвару, конкретно, под GPU. Даже целые числа конвертируются из (в) float.
Сама штука представляет собой компилятор с оного BrookGPU в C++ и систему поддержки времени исполнения.
Мне идея нравится. Она проста и достаточно элегантна.
Для того же Cell ее можно слегка улучшить - Cell имеет лучший интерфейс к памяти процессора, чем GPU, поэтому ту же трассировку лучей получится сделать значительно быстрее, не надо будет перекодировать деревья в текстуры, достаточно добавить обмен с памятью процесса. Соответственно, вместо загадочного aKDTreeStream[i].x можно использовать нормальный aKDTreePtr->splitCoord.
Вот. ;)
Если что, мы в прошлом году это дело обсасывали достаточно подробно.