PDL :: Tipsp - Интернет в облаке

Это команда PDL :: Tipsp, которую можно запустить в бесплатном хостинг-провайдере OnWorks, используя одну из наших многочисленных бесплатных онлайн-рабочих станций, таких как Ubuntu Online, Fedora Online, онлайн-эмулятор Windows или онлайн-эмулятор MAC OS.

ПРОГРАММА:

ИМЯ


PDL :: Tips - Небольшие лакомые кусочки полезных тайн. Программные лакомые кусочки и тому подобное.

СИНТАКСИС


использовать PDL;

# Что бы здесь ни случилось.

ОПИСАНИЕ


На этой странице представлены полезные идиомы, полезные советы и подсказки по использованию Perl Data Language.
v2.0.

Помощь
Используйте «справку-помощь» в перлдл or pdl2 или используйте программу "pdldoc" из командной строки
для доступа к документации PerlDL. HTML-версии страниц также должны быть
настоящее время в HtmlDocs / PDL каталог распространения PDL. Чтобы найти этот каталог,
попробуйте следующее

pdl> foreach (map {"$ _ / PDL / HtmlDocs"} @ INC) {p "$ _ \ n" if -d $ _}

Индексирование идиомы
Следующий код нормализует набор векторов в $ a. Это работает независимо от
размерность $ a.

$ a / = $ a-> сумовер->фиктивный(0);

Что is на самом деле происходит?
Если вы хотите увидеть, что на самом деле делает код, попробуйте команду

PDL :: Core ::set_debugging(1);

где-то. Это извергает огромное количество отладочной информации для PDL в STDOUT. Планы на
будущее включает возможность перенаправления вывода, а также возможность
выбирать сообщения с большей точностью.

Многие сообщения поступают из «Basic / Core / pdlapi.c», и вы можете посмотреть источник, чтобы увидеть
что происходит.

Если у вас есть дополнительное время для работы над этими механизмами, сообщите об этом в рассылку pdl-porters.
.

Память экономия
Если вы рекурсивно запускаете что-то, что выбирает определенные индексы большого piddle,
" У аборигенов

в то время как(1) {
$ inds = где ($ a> 0);
$ a = $ a-> index ($ inds);
$ b = $ b-> index ($ inds);
func ($ b, $ a);
}

Если вы не пишете в $ b, это сэкономит много памяти, чтобы изменить это на

$ b = $ b-> index ($ inds) -> sever;

Новый метод "sever" заставляет забыть отношение обратной записи. Это похоже на
copy, за исключением того, что он изменяет исходный piddle и возвращает его).

Конечно, лучший способ сделать это -

$ inds = xval ($ a-> long);
в то время как(1) {
$ inds0 = где ($ a> 0);
$ inds1 = $ inds-> index ($ inds) -> sever;
$ a = $ a0-> index ($ inds1);
$ b = $ b-> index ($ inds1) -> sever;
func ($ b, $ a);
}

что не сохраняет все временные экземпляры $ a в памяти. См. "Mandel.pl" в
Поддиректория Demos дистрибутива PerlDL для примера.

PP скорость
Если вы действительно хотите написать быстрый PP-код, первое, что вам нужно сделать, это убедиться, что
что вашему компилятору C разрешено выполнять необходимые оптимизации.

Это означает, что вы должны разрешить как можно больше переменных входить в
регистры:

loop (a)% {
$ a () + = $ COMP (foo_member) * $ b ()
%}

расширяется до

for (i = 0; i <10000; i ++) {
a [я] + = __privtrans-> foo_member * b [i];
}

это самое худшее, что вы можете сделать, так как вашему компилятору C не разрешено предполагать, что "a"
не сбивает "foo_member", что полностью подавляет векторизацию. Вместо этого сделайте

float foo = $ COMP (foo_member);
loop (a)% {
$ a () + = foo * $ b ();
%}

Это ограничение вызвано не PP, а семантикой ANSI C. Конечно, мы могли скопировать
структура в локальные переменные и обратно, но это может вызвать очень странные вещи
иногда.

Есть много других вопросов по организации петель.

В настоящее время мы планируем сделать так, чтобы PP мог выполнять задачи фиксированной ширины, а также физические
piddles (где цикл по первым измерениям будет дешевле, так как их меньше
отдельные приращения, которые могут иметь значение на машинах с небольшим количеством
регистры).

Используйте PDL :: Tipsp онлайн с помощью сервисов onworks.net



Новейшие онлайн-программы для Linux и Windows