Разработка параллельных и распределённых приложений с использованием шаблона состоит из описания структуры приложения:
Разработки кода иницирующего начало вычислений с помощью библиотек времени исполнения из пакета TempletSDK
#include "gpTBag.h"
#include
#include "time_measurement.h"
int main(int argc, char* argv[]){
int prc_num = 4;
unsigned long start = get_current_time_in_us();
TB::TaskBag bag(prc_num, &argc, &argv);
bag.run();
printf("Done in %6.6f s\n", (get_current_time_in_us()-start)/1000000.0 );
return 0;
}
Сгенерированного по файлу структуры приложения заголовочного файла с пользовательскими секциями
#ifndef _GRAPH_PLUS_MODULE_TB
#define _GRAPH_PLUS_MODULE_TB
#include
#include
#include "../Rtl/gprtmpi.h"
/*$GPBS$TB$!include!*/
#include
#include
#include
/*$GPBS$*/
//
namespace TB{
//Task bag template
class TaskBag:public GPRTMPI::TBag{
public:
class TaskBagTask:public TBag::Task{
public:
TaskBagTask();
virtual~TaskBagTask();
void send_task();
void recv_task();
void send_result();
void recv_result();
/*$GPBS$TaskBag$!taskuserdata!*/
/*$GPBS$*/
};
public:
TaskBag(int num_prc, int *argc, char ***argv);
virtual ~TaskBag();
TBag::Task* createTask();
bool if_job();
void put(Task*t);
void get(Task*t);
void proc(Task*t);
/*$GPBS$TaskBag$!userdata!*/
/*$GPBS$*/
};
}
#endif
И сгенерированного по файлу структуры приложения файла исходного кода с реализацией классов с пользовательскими секциями
#include "gpTBag.h"
namespace TB{
/*$GPBS$TB$!globals!*/
// put global variables and funcs here
/*$GPBS$*/
//////////////////////class TaskBag////////////////////
//Task bag template
TaskBag::TaskBag(int num_prc, int *argc, char ***argv):TBag(num_prc, argc, argv)
{
/*$GPBS$TaskBag$!constructor!*/
/*$GPBS$*/
}
TaskBag::~TaskBag()
{
/*$GPBS$TaskBag$!destructor!*/
/*$GPBS$*/
}
TaskBag::TaskBagTask::TaskBagTask():TBag::Task()
{
/*$GPBS$TaskBag$!taskconstructor!*/
/*$GPBS$*/
}
TaskBag::TaskBagTask::~TaskBagTask()
{
/*$GPBS$TaskBag$!taskdestructor!*/
/*$GPBS$*/
}
void TaskBag::TaskBagTask::send_task()
{
/*$GPBS$TaskBag$!task_send_task!*/
/*$GPBS$*/
}
void TaskBag::TaskBagTask::recv_task()
{
/*$GPBS$TaskBag$!task_recv_task!*/
/*$GPBS$*/
}
void TaskBag::TaskBagTask::send_result()
{
/*$GPBS$TaskBag$!task_send_result!*/
/*$GPBS$*/
}
void TaskBag::TaskBagTask::recv_result()
{
/*$GPBS$TaskBag$!task_recv_result!*/
/*$GPBS$*/
}
/*$GPBS$TaskBag$!usercode!*/
// place your code here
/*$GPBS$*/
GPRTMPI::TBag::Task* TaskBag::createTask(){return new TaskBagTask;}
bool TaskBag::if_job(){
/*$GPBS$TaskBag$if_job*/
return 0;
/*$GPBS$*/
}
void TaskBag::put(Task*t){
TaskBagTask* mt=(TaskBagTask*)t;
/*$GPBS$TaskBag$put*/
/*$GPBS$*/
}
void TaskBag::get(Task*t){
TaskBagTask* mt=(TaskBagTask*)t;
/*$GPBS$TaskBag$get*/
/*$GPBS$*/
}
void TaskBag::proc(Task*t){
TaskBagTask* mt=(TaskBagTask*)t;
/*$GPBS$TaskBag$proc*/
/*$GPBS$*/
}
}