Ini adalah perintah PDL::Tipsp yang dapat dijalankan di penyedia hosting gratis OnWorks menggunakan salah satu dari beberapa workstation online gratis kami seperti Ubuntu Online, Fedora Online, emulator online Windows atau emulator online MAC OS
PROGRAM:
NAMA
PDL::Tips - Informasi kecil dari arcana yang berguna. Pemrograman tidbits dan semacamnya.
RINGKASAN
menggunakan PDL;
# Apapun yang terjadi di sini.
DESKRIPSI
Halaman ini mendokumentasikan idiom yang berguna, petunjuk dan tip berguna untuk menggunakan Bahasa Data Perl
v2.0.
Bantuan
Gunakan "bantuan bantuan" di dalam perldl or pdl2 atau gunakan program "pdldoc" dari baris perintah
untuk akses ke dokumentasi PerlDL. Versi HTML halaman juga harus
hadir, di HTMLDocs/PDL direktori distribusi PDL. Untuk menemukan direktori ini,
coba yang berikut ini
pdl> foreach ( peta{"$_/PDL/HtmlDocs"}@INC ) { p "$_\n" if -d $_ }
Pengindeksan idiom
Kode berikut menormalkan sekelompok vektor di $a. Ini bekerja terlepas dari
dimensi $a.
$a /= $a->sumover->boneka(0);
Apa is sebenarnya kejadian?
Jika Anda ingin melihat apa yang sebenarnya dilakukan kode tersebut, coba perintah
PDL::Inti::set_debugging(1);
di suatu tempat. Ini memuntahkan sejumlah besar info debug untuk PDL ke STDOUT. Rencana untuk
masa depan termasuk memungkinkan untuk mengarahkan ulang output, dan juga memungkinkan untuk
pilih pesan dengan lebih presisi.
Banyak pesan berasal dari "Basic/Core/pdlapi.c" dan Anda dapat melihat sumbernya untuk melihat
apa yang sedang terjadi.
Jika Anda memiliki waktu ekstra untuk mengerjakan mekanisme ini, beri tahu milis pdl-porter
daftar.
Memori tabungan
Jika Anda menjalankan sesuatu secara rekursif yang memilih indeks tertentu dari piddle besar,
'like'
sementara(1) {
$inds = dimana($a>0);
$a = $a->indeks($ind);
$b = $b->indeks($ind);
fungsi($b,$a);
}
Jika Anda tidak menulis ke $b, akan menghemat banyak memori untuk mengubahnya ke
$b = $b->indeks($inds)->sever;
Metode baru "sever" menyebabkan hubungan write-back dilupakan. Ini seperti
salin kecuali itu mengubah piddle asli dan mengembalikannya).
Tentu saja, cara terbaik untuk melakukan hal di atas adalah
$inds = xvals ($a->panjang);
sementara(1) {
$inds0 = dimana($a>0);
$inds1 = $inds->index($inds)->sever;
$a = $a0->indeks($inds1);
$b = $b->indeks($inds1)->sever;
fungsi($b,$a);
}
yang tidak menyimpan semua instance sementara $a di memori. Lihat "mandel.pl" di
Demo subdirektori dari distribusi PerlDL sebagai contoh.
PP kecepatan
Jika Anda benar-benar ingin menulis kode PP cepat, hal pertama yang perlu Anda lakukan adalah memastikan
bahwa kompiler C Anda diizinkan untuk melakukan optimasi yang diperlukan.
Artinya, Anda harus mengizinkan sebanyak mungkin variabel untuk masuk
mendaftar:
lingkaran(a) %{
$a() += $COMP(foo_member) * $b()
%}
berkembang menjadi
untuk(i=0; i<10000; i++) {
a[i] += __privtrans->foo_member * b[i];
}
adalah tentang yang terburuk yang dapat Anda lakukan, karena kompiler C Anda tidak diizinkan untuk berasumsi bahwa "a"
tidak menghancurkan "foo_member" yang sepenuhnya menghambat vektorisasi. Sebagai gantinya, lakukan
float foo = $COMP(foo_member);
lingkaran(a) %{
$a() += foo * $b();
%}
Ini bukan pembatasan yang disebabkan oleh PP tetapi oleh semantik C ANSI. Tentu saja, kita bisa menyalin
struct menjadi variabel lokal dan kembali tetapi itu dapat menyebabkan hal-hal yang sangat aneh
terkadang.
Ada banyak masalah lain tentang pengorganisasian loop.
Kami saat ini berencana untuk membuat PP dapat melakukan hal-hal dengan lebar tetap serta fisik
piddles (di mana mengulang dimensi pertama akan lebih murah karena lebih sedikit
kenaikan yang berbeda, yang mungkin membuat perbedaan pada mesin dengan sejumlah kecil
register).
Gunakan PDL::Tipsp online menggunakan layanan onworks.net