Проект Templet

акторный фреймворк для запуска задач
на множестве ядер, кластерах и в облаках
templet.ssau.ru

Инструменты пользователя

Инструменты сайта


templet:пример:hello_taskbag_world

Разработка параллельных и распределённых приложений с использованием шаблона состоит из описания структуры приложения:

gpTBag.txt
<module id="TB" templet="" rem="">
 
<include file="../Rtl/gprtmpi.h" module=""/>
 
<param id="rtl" value="GPRTMPI"/>
 
<assemble id="TaskBag" templet="TBAG" rem="Task bag template">
 
</assemble>
 
</module>

Разработки кода иницирующего начало вычислений с помощью библиотек времени исполнения из пакета TempletSDK

TBag.cpp
#include "gpTBag.h"
#include <stdio.h>
#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;
}

Сгенерированного по файлу структуры приложения заголовочного файла с пользовательскими секциями

gpTBag.h
#ifndef _GRAPH_PLUS_MODULE_TB
#define _GRAPH_PLUS_MODULE_TB
 
#include <string.h>
#include <assert.h>
 
#include "../Rtl/gprtmpi.h"
 
/*$GPBS$TB$!include!*/
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
 
/*$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

И сгенерированного по файлу структуры приложения файла исходного кода с реализацией классов с пользовательскими секциями

gpTBag.cpp
#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$*/
}
 
}
templet/пример/hello_taskbag_world.txt · Последнее изменение: 2013/10/27 11:38 — artamonov