Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Руководство программиста_администратора.docx
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
551.89 Кб
Скачать

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

"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!" - Т-функция не проинициализировала один из своих выходных аргументов

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

Эта группа сообщений сигнализирует либо об исключительно важных для оператора событиях, либо выводятся в режиме отладки (опция компилятора -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”

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

5. Приложение 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;

}