понедельник, 12 января 2009 г.

Моя маленькая радость

      Решая свою текущую задачу (созадние нейроконструктора работающего на видахе) сделали с комрадом библиотеку для программирования видах AMD - уровень абстракции над уровнем абстракции над вычислениями  ( Computation Abstraction Layer == CAL) кто видел примеры из AMD StreamComputing SDK (CAL) тот поймёт зачем это было сделано ( что бы писать меньше хост-кода для запуска каждой задачи ;-)).


Могу вас уверить обьём кода уменьшился в 4-5 раз. Вот пример простейшего приложения  

#include "useGPU.h"

using namespace std;

std::string programIL = 
 "il_ps_2_0\n"
 "dcl_input_interp(linear) v0.xy\n"
 "dcl_output_generic o0\n"
 "dcl_resource_id(0)_type(2d,unnorm)_fmtx(float)_fmty(float)_fmtz(float)_fmtw(float)\n"
 "sample_resource(0)_sampler(0) r0, v0.xy\n"
 "dcl_literal l0, 0x3F000000, 0x3F000000, 0x3F000000, 0x3F000000\n"
 "sub r2.x, r0.x, v0.x\n"
 "mov o0.x, r2.x\n"
 "ret_dyn\n"
 "end\n";

void main()
{
 useGPU g;
 float idata[256][256];
 for (int i = 0; i < j =" 0;" odata =" NULL;" string=""> > params;
 params.push_back( make_pair(0,"i0") );
 params.push_back( make_pair(1,"o0") );
 CALevent e = g.Execute(0,0,1,params);
 while ( g.Wait(0,e) == CAL_RESULT_PENDING);
 void* ret = g.GetResult(1);
 odata = reinterpret_cast(ret);
for(int i = 0; i <>
 {
  for(int j = 0; j <>Есть вторая версия - там кода ещё в 1,5 раза меньше всё такое обьектно ориентированое, воздушное - но не поддерживает более 1 видахи и тупо глючит.