Доброго времени суток!
Срочно требуется помощь. Пишу дипломную. Резко пришлось менять тему. Дали работу с OpenCL.
C SDK разобраться не хватает мозгу, нервов и времени. В общем, вопрос-просьба, думаю, что элементарный: каким образом задавать, подключать и использовать свой kernel? Как передавать в него входные параметры и соответственно их получать.
Если можно, очень прошу код на C++.
Общая задача такова - оконное приложение .Net 4.0, на определенном этапе есть 3 входящих массива.
1-й - Набор индексов, по которым "вытаскиваются" элементы из 2-го и 3-го и с ними производятся мат. операции. Собственно, обычный код выглядит так:
- array<double>^ a = gcnew array<double>(768);//На входе
- array<double>^ b = gcnew array<double>(256);//На входе
- array<double>^ aConst = gcnew array<double>(cCount);//На входе
- double chisl = 0;
- double znam = 0;
- array<double>^ res = gcnew array<double>(iPicBytes);//На выход
- array<array<Byte>^>^ pp = gcnew array<array<Byte>^>(cCount);
- //iLength - колич-во обр. эл-тов, на входе
- //cCount - необходимая размерная единица, на входе
- for (int l=0;l<iLength;l++)
- {
- chisl =0;
- znam = 0;
- int iSumPic = 0;
- for (int t=0;t<cPicCount;t++)
- {
- chisl += (b [pp [t][l] ])* (a[pp[t][l * 3 + (l%3)] / aConst[t]);
- znam += b[pp[t][l]];
- iSumPic += pp[t][l];
- }
- if (znam > 0)
- {
- res[l] = double(chisl/znam);
- }
- else
- {
- if (iSumPic > 0)
- res[l] = -1;
- else
- res[l] = 0;
- }
И вот это все мне надо перегнать OpenCL и распараллелить под HD4870. ПОМОГИТЕ, ПОЖАЛУЙСТА!