content:
Bekicot atau biasa dikenal dengan nama siput darat sebenarnya adalah binatang yang berasal dari Afrika Timur kemudian menyebar ke hampir seluruh penjuru dunia termasuk Indonesia melalui perdagangan. Hewan kecil yang satu ini terhitung mudah dalam pemeliharaannya bahkan di beberapa tempat dibudidayakan untuk kemudian dikonsumsi tidak terkecuali Indonesia.
Meskipun teridentifikasi membawa parasite namun biasanya bekicot yang dipelihara sudah terbebas dari penyakit karena proses perawatannya. Spesies ini sangat mudah ditemui, karena habiatatnya yang memang mudah untuk dijumpai.
Biasanya spesies ini mudah ditemukan jika daerah atau kawasan tersebut sedikit lembab dan biasanya akan banyak bermunculan ketika pagi hari. Bekicot di Indonesia sudah tidak asing lagi jika membahas masalah olahan makanan berbahan dasar bekicot.
Ada banyak yang beranggapan bahwa hewan kecil ini hanya sebagai parasite, namun sebenarnya memiliki manfaat yang memang sudah diakui dalam bidang kesehatan. Berikut ini misalnya.
Memiliki Kandungan Protein Tinggi
www.wikiwand.com
Beberapa penelitian menunjukkan bahwa pada 100 gram daging bekicot mengandung 12 gram protein dan hanya mengandung 1% kadar lemak. Maka bisa disimpulkan bahwa bekicot adalah bahan makanan yang cocok digunakan sebagai alternatif pengganti daging merah yang biasanya kamu konsumsi dengan membandingkan kadar lemak yang terkandung didalamnya.
Bagi kamu yang suka fitnes maka tentunya makanan dari bekicot ini adalah salah satu makanan yang perlu untuk kau makan karena kandungan didalamnya akan membantu perkembangan otot agar menjadi lebih baik.
Menyembuhkan Asma
jurnalsehat.com
Masih belum ada memang penelitian akan manfaat bekicot sebagai obat asma, tetapi berdasarkan testimoni beberapa golongan masyarakat yang mengungkapkan manfaat hewan kecil satu ini dapat menyembuhkan Asma. Jika seorang penderita Asma mengkonsumsi daging bekicot secara rutin, maka lama kelamaan akan menghilangkan gejala asma.
Menyembuhkan Penyakit TBC
penyakitakut.web.id
Untuk sebuah penelitiannya memang masih sama dengan sebelumnya yakni belum ada penelitian yang akurat akan manfaatnya. Namun ada banyak masyarakat yang mengungkapkan bahwa daging bekicot ini bermanfaat untuk menyembuhkan penyakit TBC.
Obat Gatal-Gatal dan Penyakit Kulit Lainnya
khasiatnyata.blogspot.com
Di daerah jawa timur, hewan kecil satu ini biasanya disajikan dalam bentuk sate tentunya dengan tambahan bumbu kacang. Banyak juga masyarakat yang meyakini akan khasiat dari hewan kecil satu ini untuk menyembuhkan sakit gatal-gatal dan penyakit kulit lainnya.
Meredam Panas Dalam
www.anggaputra.com
Daging bekicot mampu meredakan panas dalam, tetapi tentunya dalam bentuk sup bukan dalam bentuk sate atau olahan makanan lainnya.
Baik untuk Penderita Liver dan Hepatitis
www.123rf.com
Untuk salah satu kegunaannya ini, sudah banyak klinik yang menyarankan untuk mengkonsumsi daging bekicot bagi para penderita penyakit liver dan hepatits. Pasalnya tingginya kandungan protein dan rendahnya kandungan lemak dalam daging bekicot.
Cara Budidaya Bekicot
cara.media
Menyiapkan Sarana dan Peralatan
Menyiapkan Kandang
Untuk melakukan budidaya bekicot tidak memakan banyak ruang karena persayaratan utamanya adalah mengenai kelembapan serta keteduhan dari lokasi budidaya. Kandang bisa didirikan di tanah kering, teduh dan lembab dengan suhu udara antara 25 hinga 30o celcius. Untuk pemeliharaannya terhitung mudah.
Menyiapkan Peralatan
Untuk peralatan yang dibutuhkan yakni hanya peralatan dan bahan yang bisa kamu gunakan untuk membuat kandang bekicot. Kamu bisa menggunakan kayu, semen, bata, pasir, kain kasa da cangkul.
Pembibitan
Jika kamu masih belum mempunyai bibit unggul, maka langkah yang harus kamu lakukan adalah menggunakan bibit lokal dengan cara memilih yang berukuran 75 hingga 100 gram.
Karena kebanyakan jenis bekicot bertelur disembarang tempat, maka jumlah telur yang menetas biasanya berkisar lebih 50 butir. Sedangkan untuk jumlah produksi telurnya adalah tergantung dari kesuburan bekicot itu sendiri.
Setelah masanya dirasa cukup, maka telur bekicot tersebut akan menetas dengan sendirinya dalam bentuk anak cangkang dan tidak dijaga induknya. Apabila tempat tersebut memenuhi syarat seperti kelembapan dan segalanya maka telur bekicot akan menetas dengan cepat.
Pemeliharaan
Untuk mempertahankan suhu lingkungan yang lembab bisa digunakan atap karena pada dasarnya bekicot sangat menyukai suhu yang lembab. Ketika masuk musim kemarau bisa diakalai dengan menyiram lokasi peternakan dengan air setiap harinya.
Untuk mendapatkan hasil budidaya yang maksimal, maka hal yang tidak boleh kamu lupakan adalah memberikan pakan yang bermutu dan tentunya pemberian pakan secara teratur. Mutu pakan dan kebiasaan makan bekicot akan menjadi acuan kapan dan bagaimana kamu memberikan pakannya. Untuk pakannya bisa kamu berikan daun-daunan serta buah yang sekiranya disukai oleh bekicot.
Usahakan untuk selalu mengecek kandang bekicot kamu, karena jika tidak bisa jadi hewan pengganggu bekicot kamu akan sangat mudah untuk masuk dalam kandang.
Panen dan Pasca Panen
Dengan pemeliharaan yang baik, bekicot yang kamu ternakkan bisa dipanen setelah 5 hingga 8 bulan. Jika dilihat secara fisik, maka panjang cangkang yang perlu untuk kamu perhatikan (8-10 cm).
Setelah bekicot dipanen, kamu bisa melakukan dua hal tambahan yakni memilih untuk mengkonsumsi sendiri atau memasarkannya. Ketika memasarkannya kamu bisa memasarkan dalam bentuk makanan olahan siap makan atau hanya dalam bentuk dagingnya saja.
Untuk kisaran harganya dipasaran sebenarnya beragam. Untuk bekicot yang sudah siap panen biasanya dihargai 30.000 rupiah per ekornya, dengan demikian bisa kamu prediksi langsung berapa penghasilan yang mungkin kamu dapatkan ketika sudah memanen.
Demikian artikel mengenai manfaat serta bagaimana cara melakukan ternak bekicot untuk kamu jadikan referensi. Semoga bermanfaat
Categories Dunia Fauna
Leave a Comment Cancel reply
Comment
Name Email Website
Save my name, email, and website in this browser for the next time I comment.
Artikel Populer
Makanan untuk Semua Jenis Kura-kura
24 Jenis dan Gambar Ikan Koi
Pengertian Seni Rupa 2 dimensi dan Seni Rupa 3 dimensi Beserta Contohnya
Apa Manfaat Ketela Pohon? Berikut Penjelasan Lengkapnya
Kunci Jawaban Tebak Gambar Level 7 (LENGKAP)
© 2021 Ragam Informasi
This website uses cookies to improve your experience. We'll assume you're ok with this, but you can opt-out if you wish. Read MoreACCEPT
Privacy & Cookies Policy
Close
Privacy Overview
This website uses cookies to improve your experience while you navigate through the website. Out of these cookies, the cookies that are categorized as necessary are stored on your browser as they are essential for the working of basic functionalities of the website. We also use third-party cookies that help us analyze and understand how you use this website. These cookies will be stored in your browser only with your consent. You also have the option to opt-out of these cookies. But opting out of some of these cookies may have an effect on your browsing experience.
Necessary
Necessary
Always Enabled
Necessary cookies are absolutely essential for the website to function properly. This category only includes cookies that ensures basic functionalities and security features of the website. These cookies do not store any personal information.
Non-necessary
Non-necessary
Any cookies that may not be particularly necessary for the website to function and is used specifically to collect user personal data via analytics, ads, other embedded contents are termed as non-necessary cookies. It is mandatory to procure user consent prior to running these cookies on your website.


content:
Sudah sering mendengar tentang Facebook Ads namun masih bingung dengan cara kerja Facebook Ads? Ingin memasang iklan via Meta Facebook namun takut boncos karena tidak paham sistematisnya? Yuk, mending baca artikel ini untuk menjawab semua pertanyaan dalam benak Anda!
Pengertian Facebook Ads
Pertama-tama, kenalan dulu, yuk, dengan apa itu Facebook Ads! Pengertian Facebook Ads secara sederhananya adalah iklan yang ditempatkan dan kerap muncul di sosial media Facebook baik yang diakses melalui PC maupun Smartphone. Era serba globalisasi, seperti sekarang ini, pemasangan iklan digital menjadi pilihan yang lebih disukai oleh banyak orang terutama pelaku usaha.
Alasannya adalah, selain memiliki potensi untuk menjangkau calon pembeli secara luas tanpa terhalang letak demografis dan juga psikografisnya sesuai dengan target yang Anda tentukan, biaya Facebook Ads juga dapat disesuaikan dengan budget yang dimiliki.
Ingin tau lebih banyak tentang Facebook Ads? Artikel ini tidak hanya mengajak Anda belajar FB Ads gratis, namun juga memberikan Anda sedikit tips untuk bisa membuat iklan yang menarik bagi audiens Anda.
Stop boros beriklan sekarang!
Start pakai Ginee Ads biar iklanmu efektif dan penjualan meningkat! Ginee Ads serba bisa, kok, seputar iklan digital!
Pakai Ginee Ads, yuk!
Mengapa Anda Memerlukan Facebook Ads
Kenapa masih harus mencari cara belajar Facebook Ads? Kenapa membutuhkan Facebook Ads? Jadi, meskipun mungkin Fanpage bisnis Anda telah memiliki pengikut organik yang lumayan banyak, namun kadang kala, update produk-produk terbaru Anda belum tentu dapat dilihat oleh semua pengikut Anda.
Inilah sebabnya kenapa Anda tetap membutuhkan Facebook Ads. Selain untuk memastikan pengikut Fanpage bisnis Anda tidak ketinggalan informasi tentang promo besar yang sedang Anda jalani, dengan belajar Facebook Ads, Anda juga memiliki kesempatan untuk meningkatkan kesempatan mendapatkan pengikut baru.
Ditambah lagi, Facebook Ads memungkinkan Anda untuk menjadwal sendiri kapan iklan Anda akan tayang, sehingga promosi yang Anda lakukan tidak akan terlewatkan.
Budget Ads mahal, belum untung juga?
Mending join Ginee Ads sekarang! Lebih hemat, iklan gampang, analisis iklan juga lengkap!
Ginee Ads Solusi #1
Baca juga: Waktu Terbaik Iklan di Facebook Jam Senja atau? Kepoin Sini!
Keuntungan Menggunakan Facebook Ads
Penjabaran diatas belum cukup meyakinkan Anda bahwa manfaat Facebook Ads sangat Anda butuhkan untuk kemajuan bisnis Anda? Baiklah, coba perhatikan penjabaran berikut dan lihat apa saja keuntungan yang bisa Anda dapatkan dari beriklan dengan Facebook Ads.
Pilih Campaign Sesuai Kebutuhan
Bersama Facebook Ads, Anda dapat menentukan tujuan dari pemasangan iklan, seperti:
Awareness.
Consideration.
Conversion.
Masing-masing objektif memiliki subkategori dengan format yang berbeda dan dapat menyesuaikan dengan kebutuhan Anda. Untuk objektif konversi, jenis iklan ini akan sangat tepat bagi Anda yang ingin mendapatkan profit penjualan dari pemasangan iklan.
Mengatur Sendiri Budget Iklan Anda
Berbeda dengan pemasangan iklan konvensional melalui papan billboard, media cetak, maupun televisi yang membutuhkan budget puluhan sampai ratusan juta rupiah, dengan cara mempelajari Facebook Ads, Anda dapat menghemat sebagian dari anggaran beriklan di media konvensional untuk dialokasikan ke kebutuhan pengembangan bisnis yang lain.
Dengan Facebook Ads, Anda dapat mengatur sendiri budget yang ingin Anda keluarkan untuk sebuah iklan. Anda bahkan dapat memasang iklan dengan budget 15.000 rupiah per hari.
Menjangkau Audiens yang Lebih Luas dengan Target Spesifik
Facebook Ads memudahkan Anda dalam menjangkau target pasar Anda. Berbeda dengan iklan konvensional yang kerap salah sasaran dan tidak jarang gagal menghasilkan timbal balik yang optimal karena jangkauannya yang kurang relevan, Facebook Ads memiliki fitur sortir audiens yang dapat Anda manfaatkan untuk menyortir kategori target audiens Anda serinci mungkin.
Anda dapat mengatur demografi target Anda berdasarkan usia audiens, lokasi tempat tinggal, jenis kelamin, usia, dan lain sebagainya. Anda juga dapat mengatur iklan berdasarkan psikografi yang berkaitan dengan minat dan kegemaran target audience dengan usia 21 tahun keatas.
Cara Kerja Facebook Ads
Setelah menjelaskan soal manfaat-manfaat yang ditawarkan oleh pemasangan iklan, sekarang saatnya mengetahui bagaimana cara kerja Facebook Ads dan apa saja tahapan yang harus Anda lalui.
Pertama, untuk dapat melakukan daftar Facebook Ads, Anda harus memiliki halaman dengan informasi tentang bisnis, produk, maupun layanan yang tersedia. Anda dapat menuju halaman Facebook Ads pada Facebook untuk bisnis untuk langkah berikutnya.
Setelah berada pada halaman iklan, selanjutnya Anda tinggal melakukan login Facebook Ads dan Anda akan menemukan fitur Facebook Ads Manager yang memberi Anda kemudahan dalam pengaturan penayangan iklan Anda. Anda akan diminta untuk menentukan objektif atau target iklan Anda sesuai kebutuhan.
Meskipun belum ada opsi penayangan Facebook Ads gratis, tapi setidaknya Facebook menawarkan keringanan dalam hal biaya pemasangan iklan. Anda dapat mulai beriklan dengan menghabiskan minimal 15.000 rupiah per iklan dan metode pembayaran yang ditawarkan untuk membayar iklan Anda juga variatif dan praktis.
Setelah melakukan setting objektif, memilih target audiens, dan melakukan pembayaran, iklan Anda sudah dapat dijalankan. Menariknya, Anda juga dapat memantau kinerja iklan Anda secara real time sehingga dapat melakukan evaluasi untuk pemasangan iklan berikutnya.
Mau iklan apapun, omzet belum nambah?
Ayo, rubah itu semua dengan Ginee Ads! Urus semua iklan di berbagai platform sekaligus, gak perlu ribet lagi!
Join Ginee Ads, yuk!
Tips Menggunakan Facebook Ads
Agar pemasangan iklan Facebook Ads Anda menghasilkan feedback yang optimal, selain menentukan audiens yang tepat, Anda juga harus pintar memilih format iklan dan dipadukan dengan komponen iklan yang tepat. Facebook sendiri menyediakan tiga jenis format iklan, yaitu:
Kolom kanan.
Desktop News Feed.
Mobile News Feed.
Komponen iklan tepat yang dimaksud berupa:
Visualisasi.
Relevansi.
Value Produk.
Ketersediaan Call To Action.
Salah satu contoh Facebook Ads yang baik adalah iklan yang ditampilkan The New York Times melalui format Mobile News Feed. Alasannya adalah, The New York Times menggunakan kartun unik yang secara langsung akan menangkap perhatian pengguna dengan perpaduan visual dan teks. Ilustrasi akan membawa pengguna merasa satu langkah lebih dekat dengan brand.
Tingkat relevansi dari iklannya yang ditujukan untuk usia 20 tahun keatas juga sangat halus dan alami. Iklan yang ditampilkan juga menunjukkan ketertarikan pengguna Facebook yang mungkin menyukai atau bahkan telah membaca iklan tersebut. Sebagai penutup, iklan dari The New York Times memiliki ajakan untuk melakukan aksi yang jelas. Sebagai referensi, berikut contoh iklan The New York Times.
Baca juga: 5 Kalimat Iklan yang Manjur Bikin Iklan Efektif!
Kesimpulan
Facebook Ads memiliki cara kerja yang cukup sederhana dengan manfaat luar biasa yang ditawarkan. Selain itu, aplikasinya juga mudah, Anda bahkan dapat memasang iklan dengan cara buat FB Ads di HP dan pembayarannya dilakukan melalui e-wallet. Syaratnya hanya cukup dengan membuat Facebook page untuk produk atau bisnis Anda.
Selain itu, budget yang harus Anda keluarkan untuk memasang iklan melalui FB Ads tergolong murah jika dibandingkan dengan iklan konvensional. Belum lagi Anda memiliki kesempatan untuk menentukan sendiri target audiens iklan Anda. Inilah yang menjadi alasan kenapa banyak pemilik usaha beralih ke Facebook Ads.
Selama objektif iklan Anda di konsep dengan matang dan penerapan strategi pemasaran Anda benar, iklan Anda pasti akan mendatangkan profit yang menjanjikan. Belum lagi sekarang Facebook sedang menjadi pusat perhatian banyak orang karena project Metaverse yang sedang digarap.
Menurut Mark Zuckerberg selalu pendiri Facebook Inc. (kini berganti nama menjadi Meta Platform Inc) meskipun saat ini harus mengeluarkan dana investasi yang tidak sedikit untuk pengembangan project ini, namun beliau mempercayai bahwa metaverse adalah investasi masa depan yang akan sangat menguntungkan.
Strategi Iklan Facebook Ads Tepat dengan Ginee Ads
Ingin memulai iklan Facebook sekarang tapi masih galau memilih objektif yang tepat? Tidak tahu strategi mana yang lebih sesuai dengan bisnis Anda? Atau tidak punya cukup waktu untuk mengelola akun iklan karena Anda yang harus mengurus segala sesuatu sendirian? Jangan khawatir, masih ada Ginee Ads, kok!
Dengan Ginee Ads semua perencanaan iklan, pengurusan akun iklan, memantau kinerja iklan, hingga memberikan laporan rinci secara berkala, semuanya akan Ginee siapkan untuk Anda. Jadi tunggu apa lagi? Yuk, segera konsultasikan kampanye iklan dengan Ginee Ads!
Banyak beriklan di mana-mana malah pusing sendiri?
Aman, Ginee Ads solusinya! Kamu bisa atur iklan di Facebook, Instagram, Google, marketplace Ads, dan lainnya cuma sama Ginee. Lebih efisien, bisa nentuin strategi beriklan yang baik, dan gak ribet!

content-type: text/plain

warc-identified-content-language: ind,eng

warc-type: conversion

label: id

label: en


content:
Suatu tindakan adalah sertifikasi atau kesaksian tertulis di mana akun tentang apa yang terjadi, ditangani atau disepakati pada kesempatan keadaan apa pun yang menjaminnya, seperti pertemuan konsorsium, pemilihan seseorang untuk posisi yang dapat publik atau pribadi, pertemuan dewan perusahaan atau organisasi, bukti kelahiran atau fakta lain yang memerlukan atau memerlukan sertifikasi hukum yang sesuai dari sesuatu yang terjadi karena kepentingan dan karena di masa depan, jika diperlukan, itu dapat berfungsi sebagai bukti di pengadilan.
Dengan demikian dan seperti yang terjadi pada dokumen publik lainnya, catatan harus memiliki rangkaian data yang akan menentukan ketika mengevaluasi validitasnya , sepanjang dan umumnya dibuat oleh seorang profesional yang dikenal sebagai notaris dan yang diberdayakan olehnya. untuk melanjutkan persiapan yang sama.
Di antara data yang harus ditetapkan dalam dokumen ini adalah: tanggal, waktu, perkenalan yang sangat singkat tentang alasan pekerjaan tersebut di atas, kemudian, dalam yang disebut badan, notaris akan membuat detail rinci tentang apa yang terjadi di tindakan atau pertemuan tersebut dan yang memotivasi pelaksanaan risalah terkait. Ini adalah salah satu data paling dasar yang harus muncul dan dalam kasus, misalnya, rapat konsorsium, seperti yang kami sebutkan di atas, yang mungkin menjadi salah satu motivasi untuk membuat jenis dokumen ini, penggajian harus dicatat. peserta yang sama, sintesis debat dalam kasus yang terjadi di dalamnya, serta kesimpulan yang dicapai dan jika dicapai setelah pemungutan suara,juga berikan penjelasan tentang bagaimana hasil dari ini.
Untuk memberikan potongan terakhir untuk itu, biasanya, gaya paragraf digunakan di mana waktu di mana tindakan yang dilakukan berakhir ditunjukkan dan membatasi bahwa tanda tangan dari mereka yang hadir di acara tersebut dan sepenuhnya setuju. untuk itu.
Risalah tersebut kemudian biasanya ditranskripsikan menjadi buku-buku yang secara khusus disiapkan dan dirancang untuk tujuan ini, dengan halaman-halaman berjajar dan diberi nomor secara berurutan.

warc-identified-content-language: ind


content:
Mengenal dan Membandingkan Berbagai Pemrograman Paralel pada CPU dan GPU [GGPU – Bag. 2] – Belajar Pembelajaran Mesin Indonesia
Lanjut ke konten
Cari
Cari untuk:
Belajar Pembelajaran Mesin Indonesia
IndoML.com
Menu
Home
Daftar Isi
Berdasarkan Topik
Data Science
Deep Learning
Machine Learning
Reinforcement Learning
Finansial
Kalkulus
Statistika
Pemrograman
Visualisasi
Perangkat Keras
Berdasarkan Tingkatan
0. Persiapan
1. Pemula
2. Menengah
3. Ahli
Berdasarkan Format
Artikel
Buku
Catatan Kuliah
MOOC
Kursus Online
NanoDegree/MicroMasters
Video
Kaggle
Berdasarkan Bahasa
C/C++
Python
R
Matlab/Octave
Berdasarkan Nilai Ulasan
☆
☆☆
☆☆☆
☆☆☆☆
☆☆☆☆☆
Cheatsheets
All Cheatsheets
Student Notes: Convolutional Neural Networks (CNN) Introduction
Neural Networks and Deep Learning
Reinforcement Learning – An Introduction
Intro to Descriptive Statistics
Contact
About
Buka Pencarian
Mengenal dan Membandingkan Berbagai Pemrograman Paralel pada CPU dan GPU [GGPU – Bag. 2]
Di artikel sebelumnya Mengenal General Purpose Programming pada GPU (GPGPU) – [Bag. 1] kita sudah membahas kemampuan, manfaat, dan sedikit gambaran tentang cara melakukan pemrograman umum pada GPU. Di artikel ini kita akan melihat secara lebih detil bermacam cara pemrograman umum pada GPU dan juga pemrograman paralel pada CPU sekaligus kita bandingkan performansinya masing-masing.
Tujuan saya melakukan ini adalah mencari pertimbangan untuk memutuskan platform, bahasa pemrograman, dan API/librari apa yang nanti saya pakai untuk proyek pembelajaran mesin saya.
Tujuan
Dari segi platform, tentu saya ingin mengetahui seberapa besar manfaat yang kita dapat dengan menggunakan GPU. Di artikel sebelumnya sudah dipaparkan spesifikasi performansi di atas kertas, dan kali ini kita akan ukur perbedaannya secara riil di program kita.
Selain itu ada pilihan sistem operasi, yaitu Linux dan Windows. Kalau MacOS sepertinya kurang sesuai, paling tidak buat saya, karena GPU secara fisik bentuknya adalah kartu PCI-X sehingga harus punya komputer Apple yang berupa desktop atau server dan agak susah menjustifikasi investasinya. Kecuali kalau hanya untuk menjalankan dengan CPU, untuk pengembangan kode atau sekedar coba-coba, maka bisa pakai MacBook.
Berikut adalah tabel dukungan sistem operasi dari librari-librari pembelajaran mesin terkenal:
Linux Windows MacOS Lainnya
TensorFlow ✓ ✓ ✓ Android, iOS
PyTorch ✓ ✓ ✓
MXNet ✓ ✓ ✓ Raspberry Pi
CNTK ✓ ✓
Theano ✓ ✓ ✓
Caffe ✓ ✓ ✓
scikit-learn ✓ ✓ ✓ NetBSD
Menurut pengamatan saya, walaupun Windows didukung, tapi dukungannya tidak sebagus Linux. Misalnya saat ini, TensorFlow dan MXNet terbaru yang mendukung CUDA 9 hanya baru dirilis di Linux.
Dari segi bahasa pemrograman, karena saya fasih memakai Python dan C++, maka dua bahasa inilah yang menjadi perhatian utama saya. Python jelas adalah bahasa utama untuk pembelajaran mesin. Kalau Anda memilih Python maka rasanya Anda berada di jalan yang benar. Tapi C++ dengan standard barunya C++-11 sepertinya sangat mengasyikkan dan menarik untuk dipakai, jadi sebenarnya saya agak-agak mencari justifikasi agar bisa memakai C++.
Berikut adalah tabel dukungan bahasa dari berbagai librari pembelajaran mesin. Sepertinya dukungan paling luas memang untuk Python dan C++.
Python C++ Java Lainnya
TensorFlow ✓ ~ ~ Go
PyTorch ✓ ~
MXNet ✓ ✓ R, Julia, Scala, Perl
CNTK ✓ ✓ ~ C#, BrainScript
Theano ✓
Caffe ✓ ✓
scikit-learn ✓
(catatan: tanda ~ artinya hanya mendukung sebagian)
Dari segi librari, saya relatif belum familiar dengan librari apapun, jadi tidak ada preferensi untuk memilih salah satu karena semua harus belajar dari awal. Tapi perhatian utama saya adalah TensorFlow dan PyTorch, karena dua inilah yang mempunyai dukungan terbesar baik dari industri maupun komunitas (TensorFlow dibuat oleh Google dan PyTorch oleh Facebook). Tapi MXNet juga menarik karena mendukung C++ dan ada dukungan dari Amazon (bisa dijalankan di AWS). Sedangkan Theano kurang menarik karena penciptanya mengatakan tidak akan melanjutkan pengembangannya lagi, dan CNTK dari Microsoft kurang menarik karena rasanya tidak memberikan hal baru dari yang diberikan TensorFlow dan PyTorch (kecuali kalau Anda memakai C# atau .NET, maka CNTK adalah pilihan utama Anda). Tapi ini hanya sekedar perasaan dan tidak didasari penelitian apapun. Kalau Caffe saya belum meneliti.
Saya juga mengesampingkan beberapa librari dengan pertimbangan sebagai berikut:
scikit-learn: librari pembelajaran mesin yang cukup lengkap di Python, dengan bimbingan yang sangat banyak (dokumen, kursus, buku-buku). Sayangnya tidak mendukung GPU.
deeplearning4j: mungkin librari pembelajaran mesin yang paling lengkap untuk Java. Mendukung GPU juga.
mlpack: sekilas sepertinya cukup lengkap dan keren (mendukung reinforcement learning dan memakai idiom C++ moderen seperti template), tapi hanya C++ dan tidak mendukung GPU.
Dengan pertimbangan-pertimbangan di atas, kita akan melakukan percobaan dan pengukuran untuk menjawabnya. Kita akan melihat dari beberapa dimensi:
CPU vs GPU: membandingkan program yang sama dijalankan di CPU dan GPU
Python vs skrip vs C++: membandingkan performansi bahasa Python vs bahasa skrip lainnya vs C++
loop vs tervektorisasi (vectorized): membandingkan implementasi dalam bentuk loop dan yang tervektorisasi
Windows vs Linux: semua di atas, dibandingkan di Linux dan Windows , dijalankan di komputer yang sama (dual boot).
Kita akan membandingkan beberapa bahasa pemrograman dan librari:
librari C++: CUDA, OpenCL, OpenMP
bahasa pemrograman skrip: Python, Java, R, Octave, Julia
librari pembelajaran mesin: PyOpenCL, TensorFlow, MXNet
Pertanyaannya tentunya, tes apa yang pas dan cukup representatif, bisa berjalan di semua platform, dan tidak terlalu sulit untuk dilakukan?
SAXPY Benchmark
Berawal dari ide di artikel Six Ways to SAXPY, akhirnya saya buat SAXPY Benchmark, yang bisa Anda clone di https://github.com/bennylp/saxpy-benchmark. SAXPY adalah Single Precision A * X Plus Y, yaitu:
Y = A * X + Y
SAXPY dipilih karena kalkulasi ini umum dilakukan, dan mudah diimplementasikan di berbagai bahasa, baik menggunakan loop maupun tervektorisasi:
Loop:
for i=1 to N:
   y[i] += A * x[i]
Tervektorisasi:
   // Y = array[N]
   // X = array[N]
   Y += A * X
Sedangkan kekurangannya adalah, karena kalkulasi yang dilakukan begitu sederhana, maka porsi yang signifikan dihabiskan untuk mengakses memori.
Untuk N, saya set N=2^26, atau 64 mega, tepatnya 67108864. Pertimbangannya adalah agar eksekusinya tidak terlalu cepat atau lambat, dan jangan memakai terlalu banyak memori.
Untuk semua tes, hanya waktu kalkulasi SAXPY yang dihitung. Operasi lain seperti alokasi/dealokasi memori, inisialisasi array, transfer memori antara host dan GPU jika ada, dan verifikasi hasil tidak dimasukkan dalam pengukuran waktu.
Untuk setiap tes akan diulang berkali-kali (10-20 kali) dan 5 hasil terbaik akan dicatat dan diambil rata-ratanya. Kadang-kadang tes juga saya ulang di lain waktu untku melihat apakah bisa mendapatkan hasil yang lebih cepat.
Tes-tes dilakukan di satu komputer desktop yang dual-boot Windows dan Linux, dengan spesifikasi sbb:
Ubuntu 16.04
Windows 10
Host Intel i7-6700 3.4 GHz, 4 core HT, 16 GB RAM
GPU NVidia GeForce GTX 1080 8GB
OS Ubuntu 16.04 64bit Windows 10 64bit
C++ g++ 5.4.0 Visual Studio 2015 C++
CUDA 9.0 8.0
OpenCL
Khronos header 1.2
Intel driver 16.1.1
NVidia driver 1.2
Intel SDK 7.0.0.2519
OpenCL from CUDA SDK
OpenMP bawaan kompiler bawaan kompiler
Python 3.5.2 3.5.3 64bit
Java Oracle JDK SE 1.9.0.1 Oracle JDK SE 1.8.0_9
Octave 4.0.0 64bit 4.2.1 64bit
R 3.2.3 64bit 3.4.2 64bit
Julia 0.6.1 64bit 0.6.1 64bit
TensorFlow 1.4 CUDA 9.0 1.3 CUDA 8.0
MXNet mxnet-cu90 (0.12.1) mxnet-cu80 (0.12.0)
PyOpenCL 2015.1 2017.2
Dengan spesifikasi dan keterbatasan di atas, mari kita mulai!
Vektorisasi
Sebelum masuk ke pemrograman paralel, ada satu idiom yang penting untuk dipahami dalam pemrograman numerik. Dalam setiap kesempatan, kita selalu disarankan untuk menghindari loop dan memakai implementasi yang tervektorisasi, artinya implementasi yang menggunakan operasi vektor atau matriks (atau array), seperti pada contoh SAXPY di atas. Tujuannya adalah agar operasi dapat berjalan dengan lebih cepat.
Kita akan tinjau misalnya di Python. Di Python, SAXPY bisa kita implementasikan sebagai loop atau dengan Numpy. Implementasi dengan versi loop dapat Anda lihat di kode asal saxpy_loop.py, yang isi garis-besarnya kurang lebih adalah sebagai berikut.
(catatan: untuk kode-kode di bawah, AVAL, XVAL, dan YVAL adalah konstanta random)
x = [XVAL] * N
y = [YVAL] * N
for i in range(N):
    y[i] += AVAL * x[i]
Di Python, Numpy adalah librari fundamental untuk komputasi numerik dan sains. Implementasi tervektorisasi dengan Numpy dapat Anda lihat di kode asal saxpy_numpy.py yang isi garis-besarnya kurang lebih adalah sbb:
import numpy as np
x = np.zeros(N, dtype=np.float32) + XVAL
y = np.zeros(N, dtype=np.float32) + YVAL
y += AVAL * x
Hasil berbandingan waktu eksekusi kedua cara di atas adalah sbb:
Seperti terlihat di grafik di atas, merubah implementasi Python dari loop menjadi operasi vektor dengan Numpy bisa mempercepat eksekusi sebanyak kira-kira 155 kali!
Agar lebih lengkap, dan untuk mengenalkan bentuk grafik yang akan kita pakai dalam artikel ini, berikut adalah perbandingan Python loop vs tervektorisasi di Linux dan Windows (dengan memakai kode asal yang sama seperti di atas, dijalankan di dua sistem operasi di komputer yang sama).
Terlihat di Windows vektorisasi juga mempercepat eksekusi kurang-lebih 155-160 kali.
Di Windows terlihat performansi Python lebih jelek dari pada di Linux (sekitar 1.6x lebih lambat), baik versi loop maupun Numpy. Untuk sementara ini kita abaikan dulu, nanti akan kita bahas di bawah.
Vektorisasi dengan Python Pandas
Pandas adalah librari yang sangat popular di Python untuk analisis data dengan struktur tabular seperti tabel.
Operasi di Pandas juga tervektorisasi. Untuk SAXPY, implementasi lengkapnya dapat Anda lihat di kode asal saxpy_pandas.py yang isi garis-besarnya kurang lebih adalah sbb:
import pandas as pd
import numpy as np

df = pd.DataFrame(np.zeros((N, 2), dtype=np.float32),
                  columns=["y", "x"])
df.x = XVAL
df.y = YVAL
df.y += AVAL * df.x
Berikut adalah perbandingan performansi antara Pandas dan Numpy.
Ternyata ada perbedaan performansi yang signifikan (sekitar 4x lipat) antara Pandas dan Numpy.
Vektorisasi di Bahasa R
Bahasa R adalah bahasa untuk komputasi numerik dan grafik yang dipakai secara luas di bidang statistika, sains data, dan finansial. Untuk bidang-bidang ini mungkin pemakaiannya bahkan lebih luas dari pada Python.
Bahasa R mendukung eksekusi di GPU dengan API CUDA dan kompilasi kode secara JIT (just in time) menjadi byte-code.
Perlu juga dicatat bahwa R tidak mempunya tipe data floating point dengan presisi tunggal (FP32), sehingga operasinya akan lebih lambat.
Idiom vektorisasi juga terbukti meningkatkan performansi di bahasa R. Berikut kita bandingkan implementasi dalam bentuk loop (saxpy_loop.R) dengan beberapa tipe data vektor di R:
array: vektor satu dimensi (saxpy_array.R)
matrix: tipe data tabular dua dimensi (saxpy_matrix.R )
data.frame: tipe data dengan fungsionalitas sama seperti matrix (saxpy_dataframe.R)
data.table: tipe data dengan fungsionalitas sama seperti data frame (saxpy_datatable.R)
Terus terang saya kurang memahami perbedaan detil antara tipe-tipe data ini. Saya hanya melihat ada beberapa tipe data yang mirip-mirip dan saya ingin membandingkan performansinya.
Berikut adalah hasilnya.
Seperti di Python, vektorisasi di R juga akan mempercepat eksekusi secara signifikan. Paling parah adalah loop di Linux, yang entah kenapa memakan waktu 75 detik, padahal loop yang sama di Windows hanya 5 detik. Kalau ini kita abaikan, maka penggunaan tipe data tervektorisasi tercepat (dalam hal ini array atau data.frame) akan mempercepat eksekusi kurang lebih 35x.
Python vs Skrip Lain vs Java vs C++
Octave
Octave adalah bahasa pemrograman berorientasi matematika dengan sintaks kompatibel dengan Matlab. Sangat populer di bidang sains, dan banyak disarankan sebagai sarana untuk membuat purwarupa model pembelajaran mesin karena sintaksnya lebih mudah.
Julia
Julia diklaim sebagai bahasa pemrograman tingkat tinggi dengan performa tinggi untuk komputasi numerik. Bahasa ini mengunggulkan kecepatannya yang lebih cepat dari bahasa-bahasa skrip lain dan Java (lihat di halaman depan laman julialang.org), dan mendukung eksekusi paralel baik dengan CPU atau GPU. Untuk pembelajaran mesin di Julia dapat memakai MXNet.
Java
Java tentu semua sudah tahu. Saya ikutkan di sini sebagai komparasi. Dan ternyata hasilnya cukup mengejutkan.
~~~~~
Berikut grafik perbandingan performansi eksekusi non-paralel dari:
Python Numpy (saxpy_numpy.py)
bahasa R tervektorisasi dengan menggunakan array (saxpy_array.R)
Octave tervektorisasi (saxpy.m)
Java loop (SaxpyLoop.java)
Julia tervektorisasi (saxpy_array.jl) dan loop (saxpy_loop.jl)
C++ loop (saxpy_cpu.cpp)
Ternyata R dan Octave tidak lebih cepat dari pada Numpy, walaupun kadang orang mengklaim begitu. Kecepatan Numpy lumayan, di Linux, hanya 2.1x lebih lambat dari pada kode natif C++ (kalau di Windows 3.4x). Dengan demikian kalau ada yang mengklaim kecepatan Numpy mendekati kecepatan natif, maka itu juga tidak benar.
Performansi Java sangat bagus, kecepatannya hanya lebih lambat 10-15% dibandingkan C++.
Namun yang mengejutkan adalah Julia, yang kecepatannya bisa sama dengan C++, bahkan bisa lebih cepat! Sejujurnya, tadinya untuk kompilasi C++ saya pakai opsi optimisasi seadanya (-O3 di gcc atau /Ox di msvc). Tapi dengan opsi ini ternyata kecepatannya kalah dibanding Julia! Oleh karena itu kemudian opsinya saya maksimalkan lagi agar lebih cepat.
Devektorisasi Julia
Hasil pada Julia menunjukkan fenomena menarik dan berkebalikan dengan idiom vektorisasi di bahasa-bahasa lain, yaitu kecepatan implementasi loop di Julia malah justru lebih cepat dari implementasi tervektorisasi. Agar lebih jelas, berikut saya tampilkan lagi perbandingan performansi implementasi dalam loop dan vektor, dibandingkan dengan C++.
Julia memang akan mengkompilasi kode kita menjadi kode mesin dengan kompiler JIT (just in time). Julia juga menyediakan beberapa instruksi tingkat bawah pada kode asal kita agar kompiler dapat mengoptimasi secara lebih baik. Berikut adalah kutipan kode asal SAXPY untuk Julia loop. Anda bisa melihat kode asal lengkapnya di file saxpy_loop.jl.
function saxpy( a, x, y )
    @simd for i=1:length(x)
        @inbounds y[i] += a*x[i]
    end
end
Instruksi untuk membantu optimisasi kompiler dapat Anda lihat di kutipan di atas (yaitu @simd dan @inbound). Ini bisa menjadi fitur plus atau minus dari Julia. Plusnya kita punya fasilitas untuk mengontrol optimasi, sedang minusnya adalah perhatian kita jadi terpecah untuk melakukan optimasi tingkat bawah, sesuatu yang harusnya dilakukan kompiler.
Dengan performansi yang begitu bagus untuk versi loop, sangat disayangkan bahwa versi vektornya lambat. Tapi Julia saat ini masih terus dikembangkan (sekarang masih versi 0.6.1) dan semoga performansinya akan lebih baik di versi-versi berikutnya.
Librari Pembelajaran Mesin Python
Sekarang kita akan menggunakan librari pembelajaran mesin untuk melakukan operasi array. Penggunaan librari ini memungkinkan kita untuk mengeksekusinya di GPU nanti.
Perbandingan performansi operasi array menggunakan Numpy (saxpy_numpy.py) dan TensorFlow (saxpy_tf.py) dan MXNet (saxpy_mxnet.py) di CPU adalah sebagai berikut.
Sesuai grafik di atas, kalau hanya melakukan operasi numerik sederhana seperti SAXPY, librari pembelajaran mesin lebih lambat dari pada memakai Numpy. Mungkin karena pekerjaan yang dilakukan librari tersebut terlalu canggih, yang ongkosnya lebih tinggi dari pada melakukan SAXPY secara langsung. Tapi ini hanya tebakan saja.
Catatan tentang Performansi Windows
Mungkin Anda bertanya-tanya dari tadi, kenapa performansi di Windows hampir selalu lebih buruk dari pada di Linux. Saya belum menyelidiki apakah memang perbedaan performansi ini memang sudah “dari sononya”. Tapi yang jelas kondisi Windows saya, karena sudah dipakai beberapa tahun, sudah banyak sekali isinya. Saya sudah berusaha mematikan sebanyak mungkin program ketika menjalankan pengukuran, namun masih ada puluhan proses lain yang saya tidak tahu juga apa saja yang masih berjalan.
Sedangkan Linux saya baru saja dibangun.
Disamping itu ada perbedaan kompiler, versi program, dan librari, karena perbedaan ketersediaannya. Harusnya perbedaan ini tidak berpengaruh sih, karena tesnya sangat sederhana.
Dengan perbedaan kedua sistem seperti ini, maka perbedaan pada hasil ini jangan dijadikan sebagai referensi yang terlalu serius. Saya sarankan Anda mencoba sendiri SAXPY benchmark di sistem Anda.
Operasi Array pada Python dengan GPU
Seperti dikatakan di atas, penggunaan librari pembelajaran mesin pada Python memungkinkan eksekusi pada GPU. Mari kita lihat perbedaan hasilnya antara eksekusi di CPU dan GPU dengan librari-librari ini.
Sebagai catatan, percobaan ini dilakukan dengan GPU NVidia GeForce GTX 1080. Untuk penggunaan GPU lain tentu hasilnya akan lain. Kode sumber yang dipakai sama dengan untuk versi CPU di atas, yaitu saxpy_numpy.py (Numpy), saxpy_tf.py (TensorFlow) dan saxpy_mxnet.py (MXNet), tinggal dikasi argumen berbeda.
Seperti terlihat, di Linux, librari tercepat di GPU (MXNet) bisa mempercepat eksekusi 6x dibanding eksekusi tercepat di CPU (Numpy). Ironisnya, MXNet jalannya paling lambat kalau di CPU, hampir 3x lipat dari Numpy.
Untuk TensorFlow tidak ada perbedaan kecepatan yang berarti pada eksekusi di GPU antara di Linux dan Windows. Harusnya memang begitu, karena eksekusi di GPU relatif bebas dari pengaruh “junk” yang berjalan di host, jadi mestinya hasilnya lebih konsisten.
Tapi untuk MXNet, ternyata perbedaannya cukup besar, sekitar 2.9x lebih lambat di Windows (sekali lagi walaupun eksekusinya di GPU yang sama). Dalam hal ini, salah satu perbedaan yang mungkin berpengaruh adalah versi CUDA (librari komputasi GPU dari NVidia) yang dipakai MXNet di kedua platform berbeda. Windows memakai CUDA 8.0, sedangkan Linux memakai CUDA 9.0. Mungkin ini penyebabnya, atau ada penyebab lain, tidak jelas. Anehnya perbedaan ini juga ada di TensorFlow, tapi toh performansinya hampir sama.
Python GPU vs C++ CPU
Kita bandingkan kecepatan librari Python GPU tadi dengan loop C++ yang berjalan di CPU.
Librari Python dengan GPU berhasil mengalahkan loop sederhana C++ di CPU.
Tapi peningkatan kecepatannya rasanya kurang maksimal. Librari GPU tercepat dengan Python (MXNet) hanya 2.9x lebih cepat dari loop C++. Padahal sudah memakai GPU yang lumayan canggih dan mahal (GTX 1080 termasuk kartu grafis konsumer papan atas). Padahal sudah memakai librari yang state-of-the-art, melawan program C yang bodo-bodoan. Apalagi kalau memakai TensorFlow, maka hanya lebih cepat 1.2x.
Sepertinya kita harus menggali lebih dalam.
Pemrograman Paralel CPU dan GPU dengan C++
Untuk pemrograman GPU dengan C++, kita akan meninjau tiga librari.
CUDA
Dalam kemasan SDK yang dibuat NVidia untuk mengakses GPU, CUDA adalah API di tingkat yang paling bawah. Selain itu, kemasan juga berisi librari-librari tingkat yang lebih tinggi misalnya operasi aritmetika (BLAS), pemrosesan sinyak, dan jaringan syaraf tiruan (neural network).
Contoh program CUDA yang sederhana bisa Anda lihat di kode asal program SAXPY untuk CUDA, yaitu file saxpy_cuda.cpp. Kode asalnya hanya sekitar 50 baris sehingga cukup mudah untuk diikuti. Perintah untuk mengkompilenya dapat Anda lihat di Makefile.
OpenCL
OpenCL adalah librari untuk pemrograman paralel baik untuk CPU, GPU, DSP, FPGA, dan piranti akselerator lain. Kelebihan OpenCL adalah dukungan untuk jenis perangkat keras yang lebih banyak (misalnya CPU dari Intel dan kartu grafis AMD), selain kartu grafis NVidia juga, jadi menggunakan ini akan membuat program kita lebih portabel.
Contoh program C++ OpenCL yang sederhana bisa Anda lihat di kode asal SAXPY untuk OpenCL yaitu file saxpy_ocl1.cpp. Perintah untuk mengkompilenya dapat Anda lihat di Makefile. Kalau Anda ingin melihat implementasi SAXPY dalam OpenCL dalam bahasa C, bisa dilihat di file saxpy_ocl2.cpp. File ini jauh lebih panjang dari pada versi C++.
OpenMP
OpenMP (Open Multi-Processing) adalah salah satu spesifikasi pemrograman paralel yang paling lama. Versi 4 dari spesifikasi OpenMP mendukung pemrograman GPU. Namun untuk percobaan kita, saya hanya mencoba paralelisme di CPU, karena untuk eksekusi di GPU sepertinya kita harus kompile sendiri gcc versi trunk.
Kompiler-kompiler baru sudah mendukung OpenMP. Saya mencoba dengan gcc 5.4 dan Visual C++ 2015, dukungan OpenMP sudah ada dan tinggal memberi opsi -fopenmp dan /fopenmp untuk mengaktifkannya di kedua kompiler tersebut. Untuk di MacOS, kompilernya juga sudah mendukung OpenMP, tapi ada librari lagi yang harus diunduh.
OpenMP adalah pemrograman berbasis direktif. Perintah-perintah untuk OpenMP diberikan dalam #pragma omp seperti contoh berikut dari loop di kode asal SAXPY. Anda bisa melihat kode asal lengkapnya di file saxpy_omp.cpp.
#pragma omp parallel
{
    int num_threads = omp_get_num_threads();
    for (int i=omp_get_thread_num(); i<N; i+=num_threads)
        y[i] += AVAL * x[i];
}
Dibanding dengan CUDA dan OpenCL, maka pemrograman paralel OpenMP tingkatnya lebih tinggi sehingga lebih mudah dipakai. Namun kekurangannya adalah dia terasa seperti “bahasa dalam bahasa” (yaitu bahasa direktif di dalam bahasa C/C++) dan sifat direktif yang lebih implisit (misalnya direktif di atas kalau dikompile di kompiler yang tidak mendukung OpenMP maka akan diabaikan) membuat kita harus lebih berhati-hati agar program berjalan seperti yang kita inginkan.
Yang Tidak Dicoba
Satu yang tidak sempat saya coba adalah OpenACC (Open Accelerators), sebuah model pemrograman berbasis direktif (seperti OpenMP) untuk permrograman paralel secara portabel di CPU, GPU, dan piranti akselerator lain. Dukungan untuk OpenACC sepertinya masih kurang. GCC misalnya, hanya ada dukungan eksperimental di GCC 7. Visual C++ tidak/belum mendukung OpenACC.
C++ Paralel di CPU
Kita akan coba dulu di CPU. Kode sumber untuk SAXPY OpenCL dan OpenMP sama baik untuk eksekusi di CPU dan GPU (kalau CUDA hanya bisa jalan di GPU), cukup hanya diberi argumen cpu atau gpu untuk mengaturnya. Harapan saya dengan menggunakan OpenCL dan OpenMP eksekusinya akan lebih cepat dibanding loop C++ biasa, karena CPU saya punya 4 core, dengan hyper-threading maka bisa ada 8 eksekusi paralel yang bisa dijalankan.
Ternyata hasilnya tidak seperti yang diharapkan. Dari kedua librari tadi tidak satupun yang bisa mempercepat eksekusi program.
Penyebabnya mungkin karena operasinya terlalu sederhana, jadi overhead untuk membuat eksekusi paralel lebih besar dari pada kalau menjalankan operasinya sendiri. Jadi untuk mendapatkan paralelisme yang optimal pada CPU, kita harus memecah program kita menjadi task yang lebih besar, mirip kalau kita memecah task untuk multi-threading mungkin. Ini masuk akal karena implementasi paralelisme OpenCL dan OpenMP di sistem operasi umum seperti Windows dan Linux kemungkinan memakai thread.
C++ Paralel di GPU
Selanjutnya mari kita coba bandingkan performansi C++ loop dengan eksekusi di GPU. Kali ini OpenMP yang tidak ikut karena seperti dibahas di atas SAXPY OpenMP saya belum mendukung eksekusi di GPU.
Terlihat peningkatannya sangat signifikan, bisa sampai 13x.
Dan terlihat juga, performansi GPU cukup konsisten, dengan dua API berbeda, di sistem operasi berbeda, perbedaan performansinya hanya 6% maksimum.
PyOpenCL dan PyCUDA
Dengan performansi dan konsistensi CUDA dan OpenCL dari C++ yang cukup menjanjikan, mungkin ada jalan tengah untuk mengakses GPU dari Python, dengan menggunakan API yang lebih low level.
Jalan tengah itu adalah:
PyOpenCL: wrapper Python yang memberikan API OpenCL di Python
PyCUDA: wrapper Python yang memberikan API CUDA di Python
Namun penting untuk diketahui bahwa walaupun kita menggunakan Python, namun fungsi yang dieksekusi di GPU tetap harus dibuat dalam bahasa C (di dalam program Python), yang dikompile oleh PyOpenCL atau PyCUDA ketika program dijalankan. Untuk lebih jelasnya silakan lihat kode sumbersaxpy_pycuda.py dan saxpy_pyocl.py.
PyCUDA
Kode asal untuk pemrograman SAXPY dengan PyOpenCL dapat Anda lihat di file saxpy_pycuda.py. Berikut adalah hasilnya.
Sesuai dengan grafik di atas, performansi PyCUDA sangat mendekati performansi CUDA dengan C++. Perbedaan performansi antara Windows dan Linux menurut saya karena ada bagian yang dieksekusi di host.
PyOpenCL
Kode asal untuk pemrograman SAXPY dengan PyOpenCL dapat Anda lihat di file saxpy_pyocl.py. Berikut adalah hasilnya.
Terlihat konsistensi performansinya cukup membingungkan.
Untuk CPU, kalau C++ OpenCL tidak bisa mempercepat eksekusi, maka PyOpenCL justru bisa mempercepat eksekusi di CPU! Kalau benar begitu dan bukan karena hal lain (misalnya bugs) maka ini cukup menarik untuk diamati.
Di sisi lain, untuk GPU, performansi PyOpenCL sungguh mengecewakan, sangat jauh dari performansi dan konsistensi OpenCL C++ untuk GPU.
Jadi untuk OpenCL dan PyOpenCL, hanya OpenCL C++ untuk GPU yang memberikan performansi yang konsisten.
Kesimpulan
Berikut adalah grafik selengkapnya dari semua percobaan, minus Python loop dan R loop yang terlalu lambat sehingga grafiknya akan merusak skala grafik lain kalau dipasang.
Mudah-mudahan hasil percobaan di atas bisa menambah informasi Anda untuk memilih platform, bahasa, dan API/librari apa untuk dipakai di proyek Anda.
Sekali lagi harap diingat bahwa percobaan ini hanyalah mengukur SAXPY, suatu ekspresi sederhana yang hanya merepresentasikan SAXPY dan tidak untuk dipakai untuk menggeneralisir performansi suatu bahasa, librari, atau sistem operasi.
Untuk artikel selanjutnya kita akan bahas perangkat keras GPU yang bisa kita pakai.
Share this:
Twitter
Facebook
Surat elektronik
Cetak
LinkedIn
Telegram
WhatsApp
Lagi
Tumblr
Pinterest
Pocket
Skype
Menyukai ini:
Suka Memuat...
Diterbitkan oleh Benny Prijono
Lihat semua pos dari Benny Prijono
November 28, 2017
2. Menengah, Artikel, C/C++, Machine Learning, Matlab/Octave, Pemrograman, Perangkat Keras, Python, R
GPGPU, Machine Learning
Navigasi pos
Mengenal General Purpose Programming pada GPU (GPGPU) – [Bag. 1]
Ulasan Buku: Reinforcement Learning: An Introduction, 2nd Edition (Sutton & Barto)
3 respons untuk ‘Mengenal dan Membandingkan Berbagai Pemrograman Paralel pada CPU dan GPU [GGPU – Bag. 2]’
Add yours
fajarlaksono berkata:
April 9, 2018 pukul 22:33
Mantap om…
SukaSuka
Balas
saripudin berkata:
Juni 26, 2019 pukul 16:44
Di tabel dukungan sistem operasi dari librari-librari pembelajaran mesin terkenal, seharusnya PyTorch juga masuk dalam dukungan Windows.. karena bisa juga di install package nya
SukaSuka
Balas
Benny Prijono berkata:
September 19, 2019 pukul 19:09
Iya betul, sekarang sudah bisa. Trims
SukaSuka
Balas
Tinggalkan Balasan Batalkan balasan
Ketikkan komentar di sini...
Isikan data di bawah atau klik salah satu ikon untuk log in:
Email (wajib) (Alamat takkan pernah dipublikasikan)
Nama (wajib)
Situs web
You are commenting using your WordPress.com account.	( Logout / Ubah )
You are commenting using your Twitter account.	( Logout / Ubah )
You are commenting using your Facebook account.	( Logout / Ubah )
Batal
Connecting to %s
Beri tahu saya komentar baru melalui email.
Beritahu saya pos-pos baru lewat surat elektronik.
Δ
Kategori
Berdasarkan Bahasa: (33)
C/C++ (2)
Matlab/Octave (3)
Python (29)
R (8)
Berdasarkan Format: (47)
Artikel (6)
Buku (7)
Catatan Kuliah (5)
Jupyter Notebook (1)
Kaggle (1)
Kursus Online (4)
MOOC (12)
NanoDegree/MicroMasters (11)
Video (3)
Berdasarkan Nilai Review: (35)
☆ (1)
☆☆ (1)
☆☆☆ (11)
☆☆☆☆ (16)
☆☆☆☆☆ (6)
Berdasarkan Tingkat: (47)
0. Persiapan (10)
1. Pemula (20)
2. Menengah (24)
Berdasarkan Topik (46)
Aljabar Linear (2)
Data Science (10)
Deep Learning (10)
Finansial (1)
Kalkulus (1)
Machine Learning (12)
Pemrograman (14)
Perangkat Keras (2)
Reinforcement Learning (6)
Statistika (4)
Visualisasi (1)
Uncategorized (1)
Arsip
Juli 2020 (1)
September 2019 (4)
Agustus 2019 (3)
April 2018 (3)
Maret 2018 (3)
Februari 2018 (6)
November 2017 (2)
Oktober 2017 (3)
September 2017 (2)
Agustus 2017 (15)
Juli 2017 (1)
Juni 2017 (5)
Tag
Actor-Critic AlexNet Andrew Ng Anomaly Detection Anova Bagging Bayesian Learning Boosting CAPM Charles Isbell Chi-Square Clustering CNN Correlation Data-Wrangling Data Science David Silver Decision Trees Deep Learning derivatives Dimensionality Reduction DQN Dyna E-Greedy encoder-decoder Ensemble Feature Selection Feature Transformation Finansial Game Theory Georgia Tech GoogLeNet GPGPU Hypothesis-Testing Inception Information Theory Instance-Based Learning Kaggle KNN Le-Net5 Linear Regression Machine Learning Markov Decision Process matlab Matplotlib Max-Pooling Michael Littman Monte-Carlo MOOC Neural Networks NLP NumPy octave Panda partial derivatives plotting Python PyTorch Q-Learning R Recommender System Reinforcement Learning ResNet Richard Sutton RNN Sarsa sequence model Sharpe Ratio Statistika SVM T-Test Temporal-Difference Tucker Balch VGG Z-Test
Cari untuk:
Berlangganan ke Blog via Email
Masukkan alamat surel Anda untuk berlangganan blog ini dan menerima pemberitahuan tulisan-tulisan baru melalui surel.
Bergabunglah dengan 59 pengikut lainnya
Alamat Email:
Berlangganan
Follow Belajar Pembelajaran Mesin Indonesia on WordPress.com
My Sites
PJSIP
Quant.id
Retailogi
Stocks Asia
Stosia
Blog di WordPress.com.
Atas ↑
Privasi & Cookie: Situs ini menggunakan cookie. Dengan melanjutkan menggunakan situs web ini, Anda setuju dengan penggunaan mereka.

annotation: short_sentences header footer

label: de

label: ja

label: ceb

label: it


content:
Inimajalah.com tidak bertanggungjawab ke atas mana-mana artikel, berita, foto, video, grafik, iklan dan sebagainya yang bukan dihasilkan oleh staf editorial majalah online ini.
Inimajalah.com juga tidak bertanggungjawab ke atas semua komen. Ia pendapat peribadi individu berkenaan dan bukan menggambarkan pendirian kami.

warc-identified-content-language: msa


content:
Piezoelektrik memiliki arti dalam kelas nomina atau kata benda sehingga piezoelektrik dapat menyatakan nama dari seseorang, tempat, atau semua benda dan segala yang dibendakan.
Piezoelektrik
Berkenaan dengan terjadinya arus listrik dalam jenis kristal tertentu apabila diberi tekanan mekanis atau sebaliknya, dan apabila dilalui arus listrik bolak-balik, kristal ini bergetar.
Kesimpulan
Menurut Kamus Besar Bahasa Indonesia (KBBI), arti kata piezoelektrik adalah berkenaan dengan terjadinya arus listrik dalam jenis kristal tertentu apabila diberi tekanan mekanis atau sebaliknya, dan apabila dilalui arus listrik bolak-balik, kristal ini bergetar. Piezoelektrik memiliki arti dalam bidang ilmu fisika.


content:
Blog berisi artikel rohani menarik dan liputan seminar/acara dan perenungan. Fundamental-Baptist-Independent-Alkitabiah, Dispensational in theology, Pre-Tribulational Rapture Pre-millennial, Textus Receptus and Masoretic Text (traditional-text based), Baptism by immersion, Six-day literal creation, Literal & Grammatical & Historical in hermeneutics
Halaman
Beranda
KUIS BERHADIAH
PENGAKUAN IMAN
PRODUK
KUIS FUNDAMENTAL
HEALING EPIDEMIC
TRAGEDI KOMPROMI
PENGAJARAN ALKITAB
3000 Webkristiani
Selasa, 28 Juli 2009
SAKSI JEHOVAH: SINYAL YANG MEMBINASAKAN
Seandainya dari awal Saksi Jehovah masuk Indonesia seperti denominasi lain, tanpa dihimpit oleh pemerintah, maka mungkin mereka akan hanya memiliki beberapa beberapa gereja seperti Mormon dan Christian Science. Terlebih lagi jika gereja-gereja Protestan membekali anggota jemaat tentang poin-poin kesesatan Saksi Jehovah, maka mereka pasti tidak bisa mendapatkan banyak orang.
Namun kelompok Protestan telah salah sikap, memakai tangan pemerintah menghadang mereka di permukaan, sehinggamemaksa mereka bergerak di bawah. Akhirnya bukan rahasia lagi bahwa mereka berjalan dua-dua orang memasuki rumah orang Kristen, mempertanyakan komposisi iman mereka, dan mulai memasukkan pengajaran mereka. Hasilnya, jumlah mereka tak terhitung, dan jaringan mereka menggurita.
Kebiasaan menggunakan tangan pemerintah bukan hanya tidak efektif bahkan selain membuktikan yang bersangkutan tidak memiliki argumentasi, juga menciptakan tantangan bagi yang dihimpit untuk berjuang lebih keras. Sepatutnya gereja yang merasa dirinya lebih alkitabiah dari Saksi Jehovah menyelenggarakan seminar, dan menerbitkan berbagai traktat dan buklet untuk memperkuat iman jemaat dan menjelaskan poin-poin kesalahan pengajaran Saksi Jehovah.
Sejarah Singkat Saksi Jehovah
Charles Taze Russel lahir 16 Februari 1852, Pittsburgh, Pennsylvania. Sejak remaja Ia sangat menentang adanya Neraka yang menghukum orang, dan ia sangat menentang institusi agama (gereja). Pada saat umur 18, tahun 1870 ia mengumpulkan orang-orang untuk pelajaran Alkitab, dan pada tahun 1878 kelompok PA-nya mentahbiskannya sebagai Pastor.
Dari tahun 1876 hingga 1878 Russell adalah seorang asisten editor dari sebuah majalah bulanan di Rochester, New York. Kemudian ia berhenti karena kontroversi dari tulisannya tentang Penebusan Kristus. Setelah meninggalkan posisi asisten editor, Russell menerbitkan The Herald of the Morning (1879), yang hari ini berkembang menjadi The Watchtower Announcing Jehovah's Kingdom. Diawali dengan oplah 6000 examplar menjadi 20 juta dan diterjemahkan ke lebih seratus bahasa. Terbitan lain dari Watchtower yang berjudul Awake! dicetak lebih 15 juta examplar dan diterjemahkan ke lebih dari tiga puluh bahasa.
Namun C.T. Russell adalah seorang yang sangat percaya diri, sekalipun ia hanya sekolah sampai kelas-7 (SMP kelas satu), namun ia berusaha mengajar dan memimpin. Sangat tidak heran kalau pengajarannya hanya kebenaran yang parsial bukan kebenaran harmonis yang ditafsirkan dari seluruh ayat Alkitab dan melalui pertimbangan arti kata dalam bahasa aslinya.
Pada bulan Juni 1912, Gembala Gereja Baptis James Street, Hamilton, Ontario, Rev. J. J. Ross, menerbitkan sebuah pamflet yang isinyamengupas kehidupan moral yang tidak beres dan pengetahuan theologi yang cetek dari C.T. Russell. Tentu Russell kebakaran jenggot dan menuntut Ross ke pengadilan atas tuduhan menghina seseorang. Tetapi tanpa disangka oleh Russell ternyata tuntutannya akhirnya menjadi bumerang yang mempermalukan dirinya amatsangat. Karena ternyata pengadilan memenangkan Rev. Ross, berhubung semua yang dituliskan oleh Rev. J.J. Ross tentang Russell terbukti benar. Bahwa Russell bukan kepala keluarga yang baikkarena bercerai dengan istrinya, bahwa ia tidak pernah mengecap pendidikan tinggi yang cukup, tidak pernah sekolah theologi, dan bahwa ia tidakmengerti bahasa Ibrani maupun Yunani.
Lucunya ketika Russell ditanya, apakah ia mengerti bahasa Yunani, ia menjawab mengerti. Dan kemudian pengacara membukakan kitab bahasa Yunani dan memintanya membaca satu kata yang paling atas dan dia tidak dapat melakukannya. Tentu semua orang yang ada dalam ruang sidang menertawakannya. Dan akhirnya ia harus dengan wajah yang sangat malu mengaku bahwa ia tidak mengerti bahasa Yunani. [Walter Marth, The Kingdom of the Cults, Miniapholis: Bethany House Publishers, 1985, pp 42-47].
Fakta yang sangat mengherankan lagi adalah Russell tidak pernah ditahbiskan oleh organisasi apapun namun menyebut dirinya, dan disebut oleh pengikutnya "Pastor". Walter Marth berkata bahwa sebagai pengkhotbah ia memukau banyak orang, namun sebagai theolog ia tidak memukau siapapun terutama theolog yang terpelajar. Ia tidak memiliki argumentasi theologi yang memiliki dasar, melainkan hanya mengandalkan keberanian dan spekulasi serta kepintaran mengolah kata-kata, berani membuat pernyataan, bahkan berani mengajarkan hal-hal yang bertolak belakang dengan kebanyakan gereja tanpa argumentasi yang mamadai.
Dalam terbitan The Watchtower, 15 September 1910, halaman 298, Russell menyatakan bahwa orang- orang cukup membaca tulisannya, tidak perlu membaca Alkitab karena tulisannya telah menjelaskan Alkitab bahkan adalah sama dengan Alkitab. Ia berkata kepada pengikutnya bahwa mereka tidak akan sanggup memahami Alkitab dengan jelas dan Ia memahaminya dan akan menjelaskannya untuk mereka. Menurut Russell jika semua orang mengaminkan pengajarannya maka umat manusia akan segera masuk ke dalam sebuah kerajaan yang penuh damai. Jualannya laku keras karena tidak lama kemudian terjadi konflik yang memimpin ke Perang Dunia I. Jualannya lebih laku lagi setelah PD I karena banyak orang yang mengalami depresi oleh PD I.
Setelah kematian C.T. Russell pada tanggal 31 Oktober 1916, selanjutnya Komunitas Menara Pengawas (Watchtower Society) dipimpin oleh Joseph Franklin Rutherford, seorang hakim di kota Boonville, Missouri. Ia adalah seorang yang sangat hebat dalam menulis. Dalam hidupnya ia telah menulis lebih dari seratus buku. Sesungguhnya selain Russell dialah orang yang paling berjasa dalam membangun ajaran sesat Saksi Jehova ini. Pada zaman Russell kumpulan mereka belum disebut Saksi Jehova (SJ). Nama ini diperkenalkan pada masa Rutherford. Kemudian ia meninggal 8 Januari 1942 di Kalifornia karena kanker.
Segera sesudah kematian Rutherford mereka memilih Nathan Homer Knorr sebagai presiden dari kelompok ajaran sesat Saksi Jehova ini. Knorr adalah rektor dari Gilead Missionary Training School, di New York. GMTS ini tidak menitik berat pada pembahasan Alkitab secara benar melain sekedar pusat latihan (training) bagi pasukan penjual buku yang mengetuk pintu demi pintu. Mereka tidak menghasilkan theolog yang bisa berpikir melainkan hanya mengandalkan tulisan pemimpin mereka yang telah berupa traktat dan buku. Knorr meninggal bulan Juni 1977 kemudian kepemimpinan di bidat Saksi Jehovah dipegang oleh Frederick W. Franz, seorang yang sudah sangat dikenal di kalangan mereka.
Penyimpangan Pengajaran Mereka
Kita merasa sangat kasihan pada orang-orang yang menyerahkan nasib akhir mereka kepada pengajaran dari hasil penafsiran orang yang tidak pernah sekolah theologi, tidak bisa membaca tulisan bahasa asli Alkitab, yang masa kecilnya pernah mengalami tekanan sehingga tanpa alasan ia menyatakan Neraka itu tidak ada. Tentu bukan maksud saya bahwa orang yang tidak pernah sekolah theologi dan tidak bisa baca tulisan bahasa asli tidak akan bisa menafsirkan Alkitab dengan benar, tetapi jika seseorang berani membuat sebuah kesimpulan yang sangat bertentangan dengan pendapat kebanyakan orang ia harus memiliki dasar yang sangat kuat. Kesimpulannya harus pada bahasa asli Alkitab karena Alkitab terjemahan memiliki resiko perubahan arti kata sehubungan kekayaan bahasa yang berbeda antara satu bahasa dengan yang lain.
Pengajaran SJ ini jelas adalah hasil sebuah kesalahfahaman dari berbagai ayat Alkitab. Ia bagaikan faham komunisme yang diindoktrinasikan oleh pemimpin pemimpin mereka ke bawahan sedemikian intens dan sistematis sehingga terpatri ke dalam hati anggota mereka seperti orang ko munis memegang teguh faham komunisme mereka.
Pertama, dari pemilihan nama Saksi Jehova (SJ) itu sudah awal dari bukti ketidakfahaman mereka terhadap konsep kekristenan yang alkitabiah. Nama Jehova adalah nama yang dipilih oleh Sang Pencipta sebagai nama (simbol) dirinya ketika Ia memperkenalkan diri kepada manusia terutama kepada bangsa Israel. Sejak kejatuhan manusia ke dalam dosa maka manusia tidak bisa hidup bersama Allah yang mahakudus. Dosa harus diselesaikan, dan penyelesaian dosa hanya dengan penghukuman. Allah berjanji mengirim Juruselamat untuk dihukumkan mengganti kan manusia. Sementara Sang Juruselamat belum tiba, Allah perintahkan ibadah simbolik untuk menggambarkan-Nya. Nah, sehubungan dengan kebutuhan ibadah simbolik inilah nama Jehovah diberikan sebagai simbol yang menunjuk kepada Sang Pencipta.
Ketika janji Allah akan pengiriman Juruselamat digenapi, yaitu kedatangan Sang Juruselamat, yang adalah pribadi Allah sendiri, Ia tidak memakai nama Jehova melainkan memakai nama Yesus, yang artinya Juruselamat. Kalau mereka mengerti kebenaran seharusnya mereka menamakan perkumpulan mereka sebagai Saksi Yesus, bukan Jehova. Kalau mereka mau menjadi Saksi Jehova seharusnya mereka lahir di zaman sebelum penggenapan janji Allah.
Kedua, kesalahfahaman tentang pribadi Yesus yang adalah Allah dalam tubuh manusia. Bukan cuma satu-dua ayat melainkan sangat banyak ayat yang langsung maupun tidak langsung menyatakan bahwa Yesus Sang Juruselamat adalah pribadi Sang Pencipta atau Jehova itu sendiri.
Ketika Yohanes Pembaptis ditanya siapakah dia sesungguhnya, ia berkata bahwa ia bukan Mesias tetapi ia adalah "suara yang berseru-seru: Persiapkanlah di padang gurun jalan untuk TUHAN (Bahasa Ibrani dibalik kata TUHAN adalah Jehovah), luruskanlah di padang belantara jalan raya bagi Allah kita!" (Yes.40:3). Siapakah yang dimaksudkan oleh Yesaya dengan Jehovah yang dipersiapkan jalannya oleh Yohanes Pembaptis? Yesus Kristus adalah yang memperkenalkan diri dengan nama Jehovah dalam PL, dan kemudian memperkenalkan diri dengan nama Yesus. Bedanya hanya ketika memperkenal- kan diri sebagai Jehovah dilakukan di tengah badai dan guntur sedangkan ketika memperkenalkan diri sebagai Yesus melalui kelahiran dan pertumbuhan sejak bayi. Yohanes Pembaptis menyatakan bahwa ia datang untuk mempersiapkan jalan bagi Yesus dan mengutip Yesaya 40:3, dengan demikian menyatakan bahwa Yesus adalah Jehova yang datang mengenakan daging.
Kepada siapakah ayat ini dimaksud, "Sebab seorang anak telah lahir untuk kita, seorang putera telah diberikan untuk kita; lambang pemerintahan ada di atas bahunya, dan namanya disebutkan orang: Penasihat Ajaib, Allah yang Perkasa, Bapa yang Kekal, Raja Damai."(Yes.9:6)? Siapakah yang dimaksudkan oleh nabi Yesaya dengan " Penasihat Ajaib, Allah yang Perkasa, Bapa yang Kekal, Raja Damai"?
Dan di dalam kitab PB, I Yohanes 5:20 dengan jelas menyatakan bahwa Yesus adalah Allah (theos), " . . . di dalam Anak-Nya Yesus Kristus. Dia adalah Allah yang benar dan hidup yang kekal. Bagaimanakah mungkin ada seorang yang jujur dan setia kepada ayat-ayat Alkitab yang bisa menyimpulkan bahwa Yesus Kristus bukan Allah yang menjadi manusia (Fil.2:5).
Namun itulah faham yang diciptakan oleh Russell yang katanya berdasarkan Alkitab, padahal pengajarannya hanya berdasarkan beberapa ayat Alkitab yang mengekpos kemanusiaan Kristus, untuk membangun sebuah komunitas pengikut yang kemudian oleh Rutherford disebut Saksi Jehovah. Karena"pasukan"nya selalu mendapat tantangan dari orang-orang yang mengerti Alkitab, dan mereka seringkali kehilangan kata-kata, maka belakangan baik yang di USA maupun yang di Indonesia, mereka menerbitkan Alkitab dengan mengubah kata-kata Alkitab untuk disesuaikan dengan pemahaman mereka.
Seorang pengikut SJ berkata kepada penulis bahwa dia tidak temukan organisasi kekristenanyang lebih rapi dari SJ, maka dia senang dan meyakini bahwa mereka benar. Bukankah komunisme di Rusia di bawah Stalin dan Lenin lebih rapi dan di China di bawah Moa lebih rapi, dan bukankah Katolik di bawah kepausan mereka jauh lebih rapi? Masalahnya tentu bukan pada rapinya melainkan pada kesesuaiannya dengan Alkitab, dan bukan sesuai dengan sebagian ayat Alkitab, melainkan harus sesuai dengan seluruh ayat Alkitab.
Menurut Walter Martin, dalam buku The Kingdom of the Cults, kelompok SJ telah berani sekali menyimpangkan topik-topik utama pengajaran kekristenan, mengajarkan bahwa tidak ada Neraka padahal Tuhan lebih banyak menyebut Neraka daripada Sorga di dalam Alkitab. Karena Tuhan sangat memperi ngatkan orang akan Neraka sehingga Ia berkata, "Maka jika matamu yang kanan menyesatkan engkau, cungkillah dan buanglah itu, karena lebih baik bagimu jika satu dari anggota tubuhmu binasa, dari pada tubuhmu dengan utuh dicampakkan ke dalam neraka. Dan jika tanganmu yang kanan menyesatkan engkau, penggallah dan buanglah itu, karena lebih baik bagimu jika satu dari anggota tubuhmu binasa dari pada tubuhmu dengan utuh masuk neraka"(Mat.5:29-30). Namun kelompok SJ menyangkali keberadaan neraka, kemung kinan agar orang-orang lebih berani menjadi pengikut mereka karena tidak ada resiko akan masuk Neraka.
Pembaca yang kami kasihi, penulis tahu bahwa dengan buletin setipis ini mustahil bisa mengungkap seluruh penyimpangan kelompok Saksi Jehova (SJ). Uraian singkat ini hanya sekedar merangsang pembaca untuk menyelidikilagi kelompok-kelompok yang telahmemberi sinyal yang salah, sehingga kalaudi analogikan dengan sinyal kendaraan, mereka telah dan akan menyebabkan malapetaka kecelakaan yang dahsyat. Kiranya Tuhan memberi hikmat kepada pembaca serta kemampuan untuk mema hami kebenaran dan mengidentifikasi sinyal-sinyal yang menyesatkan. *** (Jurnal Pedang Roh 60 Juli-Sept 2009)


content:
Kekasihku, Dani, selama tiga tahun tidak pernah bisa melupakan mantannya saat kuliah dulu. Kebetulan, mantannya ini sudah menikah dengan seorang pria kaya, mapan, dan punya kedudukan tinggi di perusahaan. Tidak ada lagi tempat untuk Dani.
Mantannya itu, dibandingkan aku, sebetulnya tidak begitu spesial. Latar belakang kami sama, kecantikan 0pentah kenapa ia memiliki sesuatu yang bisa membuat banyak pria bertekuk lutut (pelet? Entahlah).
Aku pernah melihat beberapa blog lama suamiku yang hanya berisi tentang kisah patah hatinya dengan perempuan itu. Ia mencintainya karena..perempuan itu tidak membosankan. Ia punya pergaulan luas. Ia memiliki banyak hal untuk dibicarakan. Dan ia..seringkali terlihat seperti tidak membutuhkan pria.
Aku ingin menjadi seperti perempuan itu, tetapi aku tidak pernah bisa. Aku adalah perempuan yang jika mencinta, akan berlaku baik dan manis kepada seorang pria. Aku sering merasa sakit hati jika mengingat bahwa kekasihku sebetulnya masih menaruh rasa kepada perempuan itu. Namun, rasa sakit itu kukesampingkan karena sebetulnya, kekasihku tidak bermaksud untuk menyakitiku. Ia toh pergi ke psikolog agar bisa melupakan kekasihnya, bukankah itu baik?
****
Namun, terkadang saat suasana hatiku memburuk, aku merasa sangat hina dan terus menerus mengatai diriku sendiri. Apalagi, ketika saat kami mendatangi tempat-tempat yang pernah didatangi Dani dan mantan kekasihnya. Dani akan terlihat melankolis, matanya akan menerawang jauh entah ke mana, yang jelas tidak melihatku. Ketika kudesak ia untuk bercerita, ia akan menyebutkan nama itu lagi : Tita.
Sungguh aku kesal kepada Tita, ingin mendoakan segala yang terburuk kepada perempuan itu karena ia jahat! Ia membuat Dani trauma dan aku yang kini harus ikut menanggungnya.
Terlepas dari segala kesempurnaan yang ada di permukaan, Tita adalah perempuan yang jahat. Ia tidak punya perasaan. Ia bisa memanfaatkan seorang pria dengan membuat pria itu merasa dicintai, kemudian ia tinggalkan tanpa rasa bersalah. Dani merasa sakit hati karena setelah banyak uang dan bantuan tugas kuliah ia berikan, Tita meninggalkannya begitu saja karena terpincut seorang lelaki mapan yang berusia 10 tahun lebih tua daripada dia.
Namun, pria itu tidak dia nikahi. Ia kemudian melabuhkan hati pada seorang pria yang sama mapannya dan punya karier cemerlang. Mereka menikah dan hati Dani hancur, padahal ia sudah bersamaku.
Aku pernah bertanya kepadanya adakah hal yang bisa aku lakukan untuk bisa membuatnya melupakan Tita. Ia menjawab bahwa psikolog pun susah untuk membantunya melupakan trauma.
***
"Kamu bodoh banget deh Fani. Cowok kayak gitu masih dipertahankan.".
Sahabatku, Alya, selalu geram dengan Dani. Menurutnya, apa yang dirasakan Dani sudah tidak bisa ditolerir lagi.
"Tapi dia baik, kok, terlepas dari masalah Tita ini. Dia rajin banget, bertanggung jawab, sopan, nggak pernah jahat sama aku, selalu ingat ulang tahunku.."
"Ya percuma kalau belum bisa ngelupain Tita bahkan suka ngungkit-ngungkit di depanmu.."
"Itu minor kali, Ya…"
"Minor-minor juga kamu sakit hati. Nggak etis tau nggak sok-sok belum move-on di depanmu. Emang nggak niat melupakan aja dia.."
Apakah benar?
Aku selalu kesal dengan pendapat Alya. Pendapatnya tidak bisa mendinginkan kepala dan hatiku. Namun, jauh di dalam lubuk hatiku, aku merasa bahwa apa yang ia katakan itu benar.
***
Suatu hari, aku bertengkar dengan Dani. Aku merasa beban kerjaku begitu berat, ditambah dia tak benar-benar mendengarkan keluh-kesahku dan kembali menghubungkan banyak hal dengan Tita.
"Kayaknya nggak semua hal ada hubungannya sama Tita deh, Dan."
"Kamu kan minta pendapat, ya aku ceritakan sesuai pengalaman."
"Apa pengalamanmu harus ada hubungannya sama Tita? Lagian, kamu kok tahu? Kamu masih kepo dia, ya?"
Ia tidak menjawab.
"Ya udahlah, memang kamu masih cinta, kok."
Ia menggeleng, "Nggak ya Fan. Aku cuma trauma..maksudnya, aku dan dia pacaran lama banget, wajar kan nggak bisa lupa? Lagian aku nggak selingkuh lho."
Aku tertawa kecil dan tidak bicara apa-apa lagi.
***
Kini, aku sampai pada fase di mana aku tidak bisa mencintai Dani dengan tulus dan aku begitu membenci Tita.
Tuhan, kenapa sih tidak adil? Tita, perempuan tukang manfaatin lelaki, diberi segala kesempurnaan di dalam hidup? Kulitnya mulus, semulus kariernya. Ia sudah berada pada level manajer sementara di kantor lain yang tidak sekeren kantornya, aku masih menjabat sebagai staf biasa. Pengikut di Instagramnya mencapai lima belas ribu dan ia kerap mengisi beberapa seminar! Pesta pernikahannya di ibukota digelar begitu indah, di sebuah hotel yang sangat mewah!
Ia juga berteman dengan berbagai selebgram tenar, sementara aku? Pertemananku biasa saja. Pernikahanku? Dani tidak kunjung melamarku, alasannya adalah karier. Namun, aku merasa bahwa ia tidak siap saja menikahiku.
Lagipula, setelah dipikir-pikir lagi, di awal kami pacaran, Dani kerap kali membandingkan aku dengan Tita.
"Dulu, Tita itu nggak suka ngeluh…"
"Aku dan Tita sama-sama suka steak salmon, sih.."
"Kalau Tita, dia mah berani ngomong sama orang…"
Dan sebagainya. Dan sebagainya. Dan sebagainya.
Dani kerap kali mengatakan bahwa ia mencoba jujur denganku. Bahwa ia hanya ingin aku mengetahui apa yang dia inginkan dan bagaimana supaya ia bisa melupakan itu. Namun, tolong beritahu aku : apakah itu adil? Aku tidak tahu. Yang ada di dalam pikiranku hanyalah menjadi lebih baik daripada Tita karena aku tidak bisa meninggalkan Dani! Aku terlalu mencintainya!
***
Pada suatu hari, cintaku tidak kunjung habis kepada Dani. Namun tidak dengan kesabaranku.
Aku tidak berniat untuk memutuskan Dani, karena sekali lagi, aku mencintainya. Aku bermaksud untuk menghubungi Tita lewat akun media sosialnya, mempertanyakan apa yang telah dia lakukan sampai Dani bisa mencintainya begitu lama dan kekal.
Namun, sebelum aku sempat untuk menghubunginya, tiba-tiba saja aku mendengar sesuatu dari temanku. Itu terjadi di sebuah siang yang biasa-biasa saja, yang tidak spesial, bahkan pertanda dari alam pun tidak ada.
"Kamu udah tahu belum, si Tita, iya, Titanya Dani…."
Pesan itu berisi sebuah kabar yang mengejutkan. Bahwa Tita sedang dalam proses perceraian dan video perselingkuhannya dengan atasannya tersebar luas. Ini membuka tabir mengapa selama ini Tita gampang naik jabatan, mengapa selama ini begitu mudah baginya mendapatkan karier yang baik dan kenalan orang-orang keren di mana-mana.
Dani terkejut mendengar kabar tersebut dan ia bilang ia butuh waktu seharian. Aku mendiamkannya karena kupikir, hal tersebut benar-benar tak disangka. Dani bahkan bilang bahwa Tita dulu tidak pernah seperti itu.
Keesokan harinya, Dani menemuiku. Wajahnya lebih cerah daripada biasanya. Daripada tiga tahun yang telah dilewati bersamaku. Katanya begini :
"Aku sudah tidak ada rasa lagi sama Tita."
Seharusnya aku bahagia. Namun, entah kenapa ada yang mengganjal di hatiku. Aku rasa, aku pun tidak ada rasa lagi dengan Dani.