Сообщения о фатальных ошибках




"Regexp `%s' compilation failed!"

· указанное регулярное выражение-фильтр для визуализации системных событий (режим отладки) не удалось откомпилировать.

”Unknown TCT option %s!"

· неизвестная опция командной строки (следует за ключом -tct), определяющей начальный Т-контекст времени исполнения

"Internal feature failed"

· одно из встроенных расширений Т-микроядра не удалось проинициализировать

"Stack overflow"

· недостаточно памяти для требуемого программой количества суперпотоков

“Threads initialization failed"

· Ошибка на стадиии инициализации подсистемы поддержки суперпотоков

"Out of memory"

· недостаточно памяти для программы

“MPI_Error[%d!= %d]: %.*s"

· сбой подсистемы обмены сообщений MPI

"No free MPI_Request (%d tries)"

· недопустимая задержка в подсистеме коммуникаций

”Out of supermemory"

· исчерпан лимит ячеек суперпамяти. Необходимо увеличить размер суперматрицы.

“Deadlock detected" - внутреняя ошибка синхронизации.

"Drop or freeze on unitialized T-value!" - Т-функция не проинициализировала один из своих выходных аргументов

Информационные сообщения

Эта группа сообщений сигнализирует либо об исключительно важных для оператора событиях, либо выводятся в режиме отладки (опция компилятора -dbg)

“MemoryLeak:...”

· в программе осталась неосвобожденная память в момент завершения

“main result is ready and %d TFuns are still working. Memory leaks are possible”

· в момент завершения головной функции tfun main остались работающие Т-функции.

“Leaked cell %x,%lld with data %s (%d bytes)”

· в программе осталась неосвобожденная суперпамять в момент завершения

“local memo works”

· началось повторное использование результатов мемо-функций на одном узле

“global memo works”

· началось повторное использование результатов мемо-функций, вычисляющихся на других узлах

Приложение A. Пример вставки и замены листьев в дереве.

Файл trefal.tcc

 

#include <iostream>

 

#define DBG fprintf(stderr,"%d: %d\n",ts::myRank,__LINE__)

 

using namespace std;

 

struct Expr;

 

typedef ts::TVar<Expr> TExpr;

 

struct Expr: private ts::TExtData

{

private:

 

TExpr* terms;

 

void copyFrom (const Expr& e, size_t start, size_t length) {

TExpr* p = *this;

const TExpr* q = e;

q += start;

for (unsigned i = 0; i < length; i++)

new (p++) TExpr(*q++);

}

 

void clear () {

if (terms) {

delete[] terms;

terms = 0;

} else {

TExpr* p = *this;

for (unsigned i = 0; i < getLength(); i++)

p++->~TExpr();

}

}

 

public:

 

Expr (): terms(0) {};

 

void init (size_t s) {

assert(!terms);

terms = new TExpr[s];

extDataSize() = s * sizeof(TExpr);

};

 

operator const TExpr* () const { return terms? terms: (TExpr*)extData(); }

operator TExpr* () { return terms? terms: (TExpr*)extData(); }

 

Expr (const Expr& e): terms(0) {

copyFrom(e, 0, e.getLength());

}

 

Expr& operator= (const Expr& e) {

if (this!= &e) {

clear();

init(e.getLength());

copyFrom(e, 0, e.getLength());

}

return *this;

}

 

Expr subexpr (size_t start, size_t length) const {

Expr e;

e.init(length);

e.copyFrom(*this, start, length);

return e;

}

 

size_t getLength () const {

return extDataSize() / sizeof(TExpr);

}

 

TExpr& operator[] (int i) {

return ((TExpr *)*this)[i];

}

 

~Expr () {

clear();

}

};

 

// e is intentionally not const!

ostream& operator< (ostream& os, Expr& e) {

os < e.getLength();

TExpr* p = e;

for (unsigned i = 0; i < e.getLength(); i++)

os < " (" < (Expr &)*p++ < ")";

return os;

}

 

istream& operator> (istream& is, Expr& e) {

size_t len;

char c1, c2;

is > len;

e.init(len);

TExpr* p = e;

for (unsigned i = 0; i < len; i++) {

is > c1 > (Expr &)*p++ > c2;

assert (c1 == '(' & c2 == ')');

}

return is;

}

 

Expr operator+ (const Expr& e1, const Expr& e2) {

Expr e;

e.init(e1.getLength() + e2.getLength());

TExpr* p = e;

const TExpr* q = e1;

for (unsigned i = 0; i < e1.getLength(); i++)

new (p++) TExpr(*q++);

q = e2;

for (unsigned i = 0; i < e2.getLength(); i++)

new (p++) TExpr(*q++);

return e;

}

 

tfun int insert (TExpr e, TExpr s, Expr tout out) {

Expr& x = (Expr&) e;

if (x.getLength() == 0) {

out = (Expr&) s;

} else {

TExpr z;

Expr& o = (Expr&) z;

o.init(x.getLength());

TExpr* p = o;

TExpr* q = x;

for (unsigned i = 0; i < x.getLength(); i++)

insert(*q++, s, *p++);

out = o;

}

return 0;

}

 

Expr empty;

 

tfun int subst (TExpr e, TExpr s, Expr tout out) {

Expr& x = (Expr&) e;

if (x.getLength() == 0) {

out = empty;

} else {

TExpr out1;

TExpr* q = x;

if (((Expr&)*q).getLength() == 0)

out1 = s;

else {

TExpr o;

subst(*q, s, o);

((Expr&) out1).init(1);

((TExpr*)(Expr&) out1)[0] = o;

}

TExpr out2;

TExpr e2;

((Expr&) e2) = x.subexpr(1, x.getLength() - 1);

subst(e2, s, out2);

out = (Expr&)out1 + (Expr&)out2;

}

return 0;

}

 

 

tfun int main (int argc, char *argv[]) {

TExpr s;

TExpr e;

TExpr out;

cin > e > s;

cerr < "expr: " < e < endl < "subst: " < s < endl;

insert(e, s, out);

cerr < "after insert: " < out < endl;

TExpr out2;

insert(e, s, out2);

subst(out2, s, out2);

cerr < "after subst.insert: " < out2 < endl;

return 0;

}

 



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2017-04-01 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: