LINUX.ORG.RU

Скорость вычислений


0

0

Есть программа производящая расчет, сейчас в ней путаница в коде - вперемешку идут вызовы Tcl и C. Вопрос будет ли она быстрее работать, если мы четко поделим вызовы - сначала идет тикль, потом си? На сколько она ускорится, если мы совсем откажемся от тикля?
Вообще замедляется ли работа при использовании скриптов и на сколько?
Где можно про это глянуть?
Заранее спасибо.

PS: си делает мат. вычисления через blas и lapack. Тикль используется в обработке геморрного конфигурационного файла.

★★★

Вообще-то на С можно написать расширение для TCL
Оно (расширение) в TCL будет как стандартная функция.
Один раз запускаете TCL и работаете только с кодом tcl.

Если же вы много раз запускаете интерпретатор TCL, то потери в производительности будут существенными.

sdio ★★★★★
()
Ответ на: комментарий от sdio

вызовы тикля идут из си программы по Tcl_Eval*. И интерпретатор один используется (в смысле указатель на него interp) и другие функции соответственно тоже из библиотеки.

vaborg ★★★
() автор топика

профайлер пользоваться не можно в этом сезоне ? :)

парсер конфига на tcl это сильно :) хотя каюсь, писал.. именно для подобных задач (это которые с lapack) и по оптыу скажу - время затрачиваемое на чтение самого грандиозного конфига чем угодно, просто мизер по сравнению с тем, что тратится на вычисления и чтение/запись массивов данных.

anonymous
()
Ответ на: комментарий от anonymous

можно :) но сначала надо узнать чего можить - может уже все заможили до меня. Проблема не в писании данных - а в том что лучше убрать тикль из или свети к минимуму или это ни на что не скажется.

vaborg ★★★
() автор топика

Разгреби/зарефактори код -- сначала читай конфиг тиклем, потом делай вычисления на си.

Тащить за собой тикл только из-за чтения конфига это жесть ИМХО

aton
()
Ответ на: комментарий от anonymous

> чем больше убираешь кода, тем быстрее работает программа (лемма). :)

А всегда ли это нужно? 

Пример: замените значение переменной А: если 2 - на 1, если 1 - на 2.

Короткая запись:
A = 3 - A;

Правильная запись:
if ( A == 1)
    A = 2;
elseif (A == 2)
    A = 1;
else {
    printf ("Incorrect value, using 1\n");
    A = 1;
}

Igron ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.