Thoughts and tutorials on programming

Thursday, June 04, 2009

state of the art in ruby compilation/JIT

There are several levels that one can take compilation of Ruby code to.
Ex: yarv compiles ruby code to yarv internal byte code. But there are other levels, which we hope to exploit in order to make a faster ruby. We'll discuss some different style of compilation (JIT and otherwise).


There are a few existent libraries that do translation.

ruby2c: translates code like

def fact(n)
n*(fact(n-1))
end
fact(1000) # it needs this as a hint to know what type the fact method takes

to standard C (at least in all examples I've seen)

int fact(int n) {
return(n*fact(n-1));
}


So their ansiC aspect is the most hard-core "I don't want this to lany of this in Ruby at all after it's done."

pros: fast as can be. cons: see below.

rubyinline, interestingly, wraps something like

"int fact(int n) {
return(n*fact(n-1));
}"

with converters to call and return to and from Ruby, so you can call fact(1000) in your ruby code and it will work.

One interesting idea would be to pipe the output of ruby2c to rubyinline. Alas, ruby2c seems somewhat broken currently.

cons: you have to write in C. That is not what most of us want to ever have to do again.


I think where this perspectives fall apart is that they're not as flexible/dynamic as normal Ruby. It might have trouble with:

a = [/abc/, 'abc', 33]
b = 33
a.each{|thing| puts thing.inspect; b+= 1} # dynamic arrays probably not well handled, as well as ruby internal methods like 'inspect', blocks, etc.

or

a = [/abc/, /def/]
a.each{|reg| if "abc" =~ reg then puts 'yes'; end} # regex probably isn't supported, a lot of the rest of the stdlib


Then again, I haven't tried it since ruby2c doesn't even work for me.

pros: as fast as fast can be. also comes with a dependency walker so that it can "surmise" which classes of methods you'll be passing in, then it programs for just those.
cons: doesn't handle all ruby (AFAIK).
Maybe in its current state they're useful for doing mathematically intense operations? Dunno. Rubyinline is a little more useful, but requires writing in C.


Ruby2Cext takes a "ruby to ruby C" approach. Its original aim was to produce ruby compatible code equivalents in C.

i.e. the ruby:

def go
3
end

translates to

VALUE go_c(VALUE self) {
return INT2NUM(3); // uses all ruby types
}
void init_File {
rb_method_register(someClass, "go", go_c, 0);
}

It also translates blocks and everything to its ruby c equivalents (using ruby c syntax) . For 1.8 that was said to yield a 2X speed increase.

They also added some plugins, one gives you the ability to "freeze" certain C method calls, i.e.
if it encounters String#strip it always calls straight to the C function for String#strip [thus avoids doing a ruby method call]

ex:

def go
"".strip
end

Generates code that looks up String#strip and "saves off" the function's exact location [who would want to override String#strip, right?].

Thus the above ruby is converted roughtly to something like:

void *string_strip_function = Qundef;

VALUE go_c(VALUE self) {
VALUE str = rb_str_new("");
return strip(str);
}

VALUE strip(VALUE fromThis) {
switch(GET_TYPE(fromThis)) {
case STRING :
return *(string_strip_function)(fromThis);// this avoids rb_funcall to lookup then call strip
else:
return rb_funcall3(rb_intern("strip"), fromThis);
}
}


void init_File {
rb_method_register(someClass, "go", go_c, 0);
strip_function = lookup_internal_ruby_c_method(rbString, "strip");
}

So you can see this avoids a few rb_funcalls to built-in methods, and is still almost entirely ruby compatible. This results in "up to 5x speedup" or so it says.

drawbacks to rb2cext: 1.9 compiles ruby to bytecode--perhaps rb2xext won't have as much a gain if used with a 1.9 VM, since it already does some of this work, though profiling would help evaluate this.

All the above examples were static compilers. Run once before runtime [or at eval time].

Another class would be JIT dynamic compilers. Jruby is really the only one that has anything like that currently, and yet somehow it doesn't yet seem to be quite as fast as 1.9 without a JIT [1][4].
There exists a "demo" JIT using ruby2c, as well [2]. It optimizes a single method, but at least shows you how you could do something more dynamic.

So where can/should the future of ruby interpreters lie? There's lots of things you could try.
A few are making it tighter in C, or making it more JIT'y, or making it moree "dependency walking" so it can pre-optimize the paths that are guaranteed to only have a certain class passed in to them.

re: making it tighter in C

One drawback currently to ruby2cext is that if you define

class A
def this_method
calls_this_other_method
end
def calls_this_other_method
end
end

it will translate this (loosely) as

VALUE calls_this_other_method = rb_intern("calls_this_other_method"); // cache the symbol away
VALUE this_method_c(VALUE this) {
check_right_parameters();
return rb_funcall(calls_this_other_method);
end
VALUE calls_this_c(VALUE this) {
check_right_parameters();
return Qnil;
}


Note that it did not optimize the call between this_method and calls_this_other_method, but required ruby do rb_funcall. This is the perfectly valid ruby way--you can override calls_this_other_method later and it will work with the new method, but in most cases after a warm up phase methods aren't overridden, so the rb_funcall could be avoided by calling the method directly. So we could hard code the calls to the other known ruby (now C) methods.

If we were to assume that class method definitions were "frozen" after a specific setup phase, then a few more optimizations would be available, the above being one of them. [3]
In other words, rb2cext could become more C-y, with direct calls from method to method.

Interestingly, ruby2c also has a RubytoRubyC component (I never saw any examples of it posted, and couldn't get it to run) which might attempt something similar.

At the same time, ruby2c could become more ruby-y, i.e. integrating with the stdlib [i.e. if you know a string is being passed in, and the command is

def go a
a << '3'
end

then you could call rb_str_concat directly.

So there are two ways of action: one to make ruby to c translators more c-y, one to make them more ruby-y. Static compile time type analysis might make it so you can guarantee an object's class and optimize for it. That's an option.

Another option would be to create something more JIT'y. Profile to discover the "hot paths", then write C that optimizes for the common path (then you could make direct C calls outside your current class, too).

So what to do? Thoughts?
-=r

[1] http://blog.pluron.com/2009/05/ruby-19-performance.html
[2] http://github.com/seattlerb/zenhacks/tree/master
[3] For instance you could c-ify every ruby method in existence, with direct calls to any C methods within the same class (since we assume they all exist now). Ludicrous allows for this: http://betterlogic.com/roger/?p=1534 though I haven't experimented speed-wise.
[4] http://groups.google.com/group/ruby-benchmark-suite/browse_thread/thread/f56b4335cfd3ec57/c7babfb676d71450?lnk=gst&q=patch+gc#c7babfb676d71450 shows how 1.9 with a GC patch can be competitive to jruby.

69 comments:

Roger Pack said...

appears that ruby2c also uses "very conservative" rb_funcall3 for all its funcalls--this cannot be fast [and yet it's ruby's default] :)

Roger Pack said...

rb2cext doesn't have a built in Fixnum#times? [doesn't optimize it?]

Roger Pack said...

note that you don't need a closure block if there aren't any local variables...and you know it won't actually become a named block in any methods calls..maybe? :)

Roger Pack said...

rb2cx appears to currently use
rb_define_method(class, "name", method_c_name, -1) always is that right? Is there a reason for that?
huh?

Roger Pack said...

here's another post about ruby2c's limitations.
http://www.ruby-forum.com/topic/188401#new
appears I'm not the only one that believes it doesn't translate the std libs et al. (it's original goal was to be used in the core of the interpreter, i.e. not for ruby code itself but for stuff to RUN ruby code, so I guess that helps you understand why).
Not going that direction, at least not if I can help it.

Roger Pack said...

http://betterlogic.com/roger/?p=1568
shows how rb2cext could improve

Roger Pack said...

note from
http://betterlogic.com/roger/?p=1581
rb2cext can *almost* do what I want it to :)

Roger Pack said...

here's [finally] a working ruby2c example

http://betterlogic.com/roger/?p=1849

Anonymous said...

Yes undoubtedly, in some moments I can bruit about that I jibe consent to with you, but you may be in the light of other options.
to the article there is quiet a question as you did in the fall delivery of this request www.google.com/ie?as_q=magix movie editor pro 12 ?
I noticed the utter you suffer with not used. Or you functioning the dreary methods of inspiriting of the resource. I take a week and do necheg

Anonymous said...

Have [B][URL=http://www.fitnessworkoutclub.com/insanity-workout-dvds.html]insanity[/URL][/B] been aspiring to possess a six-packed abs extended ample or the sexy and tempting body contour yet haven't obtained an inch [B][URL=http://www.fitnessworkoutclub.com]p90x workout[/URL][/B] closer to this most coveted dream? Be troubled no much more due to the fact the most effective muscles creating workout will assist and facilitate you to definitely materialize your personal fairytale ending- that a single day you can wake up biding your sweet goodbyes for your hated waist line and system fats. Your human body could have fine results if you possess a good developing muscles exercising . Even so, [B]does p90x work[/B] ought to be particular to combine and compliment the physical exercise [B][URL=http://www.fitnessworkoutclub.com]does p90x work[/URL][/B] with the motivation and also the need to create your construct far better. In existence, creating muscles without physical exercise is certainly not a wise and healthful idea. In spite of how busy you're, [B][URL=http://www.fitnessworkoutclub.com]p90x reviews[/URL][/B] must usually find time to offer and give a break your self with worthwhile activities that will help you make your system fit and healthful.

[URL=http://www.fitnessworkoutclub.com][IMG]http://www.beachbody.com/images/en_US/products/programs/insanity/ins_sell_lloyd_b.jpg[/IMG][/URL]

Anonymous said...

You'll find a lot of different approaches that you [B][URL=http://www.fitnessworkoutclub.com]does p90x work[/URL][/B] can use for making your body seeking a good deal better, [B][URL=http://www.fitnessworkoutclub.com]p90x workout schedule[/URL][/B] the primary point that you are going to must take [U]p90x schedule[/U] care of is the fat that you have. [B]p90x reviews[/B] [B]p90x results[/B] are a lot of methods which you can make that occur, however the greatest one of them would be to [U]p90x workout[/U] [U]p90x fitness guide[/U] find a correct diet and also to create [B]p90x manual[/B] some typical visits to the fitness center, [B][URL=http://www.fitnessworkoutclub.com/insanity-workout-dvds.html]workout review[/URL][/B] here are some of the key points which you [B][URL=http://www.fitnessworkoutclub.com]p90x schedule[/URL][/B] need to recall:

In situation you are able to, [B][URL=http://www.fitnessworkoutclub.com]p90x[/URL][/B] are then just not making use of adequate weight & need to increase that. [B]insanity[/B] is most effectual method to work out with [B]p90x manual[/B] weights and can give most fast growth in the muscle tissue. Finally, [U]does p90x work[/U] [U]p90x fitness guide[/U] motivation is critical [U]p90[/U] [U]p90x workout schedule[/U] diet & workouts is a essential in learning how you are able to build the muscle quickly, [B][URL=http://www.fitnessworkoutclub.com]p90x calendar[/URL][/B] you can't achieve any of that [B][URL=http://www.fitnessworkoutclub.com/insanity-workout-dvds.html]insanity workout[/URL][/B] you've correct motivation. Assure [U]p90x sale[/U] your head in gear very first and ask yourself -- why I want to build [B][URL=http://www.fitnessworkoutclub.com]p90x fitness guide[/URL][/B] muscle.

Anonymous said...

Shoes specially made for losing weight are available today and [B][URL=http://www.mbtplus.com/]mbt shoes clearance[/URL][/B] can be quite effective. These shoes have been out for a while and some companies have risen to the top [B]mbt shoes sale[/B] demonstrated that they can provide a quality product to consumers. One [U]MBT[/U] such type of these shoes is the MBT Shoe made by a company called Swiss Masai. In case you [U][B]mbt shoes review[/U][/B] did not MBT stands for Masai Barefoot Technology. In this write up we want to take a [U]mbt sneakers[/U] closer look at these special shoes.

The development and idea behind the MBT shoe design is quite [U][B]MBT[/U][/B] interesting. What the shoe attempts to do is structure the shape of the shoe so [U]mbt shoes review[/U] that it simulates walking on sand. Specifically, the they want to attempt to make it as if you are walking [U]mbt shoes review[/U] along the natural sand environment of the Masai in Kenya. Sports trainers have known for quite a while now [U]MBT shoes[/U] that working out on dry sand is a great way to get in excellent cardiovascular condition. As you [U]MBT[/U] walk on sand it creates an uneven surface on your feet and it forces you to shift your center of gravity to [U]mbt shoes review[/U] an unnatural position. Your body compensates for this by using several different [B]buy mbt shoes[/B] muscle groups in your feet, calves, thighs, and torso that you would not use wearing typical shoes. This is the ideas [U]mbt shoes cheap[/U] behind the MBT weight loss shoes and it does seem to [B][URL=http://www.mbtplus.com/]MBT shoes[/URL][/B] work for some people.

More specifically, MBT makes several positive claims [U]mbt shoes sale[/U] and benefits from wearing their shoes. They will take muscle groups [U][B]mbt shoes clearance[/U][/B] not normally used in walking and make them active. The shoes will give you a better posture, and a more effective [U][B]MBT shoes[/U][/B] gait when walking with or without the shoes. It can [B]mbt discount shoes[/B] potentially help you with problems you may have with your back, hips, legs, and feet. The [U][B]mbt shoes best prices[/U][/B] shoes can help you recover from injuries to your [B]buy mbt shoes[/B] tendons, joints, ligaments, or muscles. The shoes are also designed to alleviate tension and stress [U]discount mbt shoes[/U] on your lower joints.


Overall owners of the MBT shoe really like the results. [B]MBT[/B] It is typical that if you walk for three or four miles at a time for several times [U][B]mbt walking shoes[/U][/B] per week you will experience some weight loss. Some people are using them for every day [U]mbt walking shoes[/U] use and find that this helps to keep their legs toned and looking nice. These are just walking [U][B]discount mbt shoes[/U][/B] shoes you really do not want to use them for running. It is recommended that you go to a store and try them on, as you [B]MBT[/B] want to make sure the heel is snug and fits correctly. If the shoes fit correctly they should feel snug and it should [B]mbt shoes sale[/B] feel as though you are walking on stilts when you walk in [U]mbt sneakers[/U] them.

Anonymous said...

A major part of boosting person's [b][url=http://www.edhardy.uk.com]ed hardy clothes[/url][/b] self-esteem and total personality package is derived from his [b]ed hardy clothes[/b] choice up garbing up in style or in ways he feels comfortable. It is a given fact that a person's way of styling himself up in everyday basis speaks a lot about his own personality. Bubbly and outgoing type of people more often than not choose light and pastel [u]ed hardy t shirts[/u] shades while the more refined and reserved type of people settles for the safe shades of the [u][b]ed hardy t shirts[/u][/b] spectrum. But still there are those whose loud and expressive personalities are evident on the unique prints and cuts and styles that they make and match. Talk about the fashion sense that goes beyond the mold of monotony. Ed Hardy Clothing is the name of the apparel line. These are fresh, unique, vibrant and [b]ed hardy clothes[/b] stylish apparel choices like hoodies, jeans and shirts, caps and long sleeved shirts.

Having the chance to purchase and literally wear the [b]ed hardy[/b] clothes that are dictated by the latest fashion craze brings natural high to the person. However, the ability to wear the latest fad with ease and comfort remains to be the challenging part. This is mainly affirmed by the idea that one fashion forecast may [b]ed hardy clothes[/b] not always fit every single person. But Ed Hardy jeans and shirts are so stylish and flexible that it can be literally worn by almost [u][b]ed hardy clothes[/u][/b] everyone. The shirts and jeans are made of lightweight materials and every shirt has that unique and expressive print that captures the vintage look. These are [b][url=http://www.edhardy.uk.com]ed hardy clothing[/url][/b] so carefully conceptualized by the greatest tattoo artist of [u]cheap ed hardy[/u] his time, Ed Hardy. That simply confirms that the ideas and concepts embedded on the Ed Hardy Clothing are rooted to the natural flair of its maker and founder for unique and meticulous designs.


The endless collection of Ed Hardy hats, hoodies, jeans and tees and long [u][b]ed hardy clothing[/u][/b] sleeved shirts is truly a sight to behold and a possession to boast about. While some clothing lines deliver [b]ed hardy UK[/b] style and fashion, Ed Hardy Clothing goes beyond what its contemporaries can [u]cheap ed hardy[/u] afford. The makers of Ed Hardy tip the scale so right and deliver not only style and fashion but as well as comfort and that sense of kindred spirit. Ed Hardy Clothing goes out of the mold so that it [b]ed hardy UK[/b] can deliver what the consumers truly deserve.

Anonymous said...

Associatedcontentnetwork.com Article directory free for publish your press release and articles !

Anonymous said...

I've been looking to find some good GPA scholarships online, but could not discover any till now!

Then I found this site, so definitely examine them out! They even give away big amounts of every day cash!

The very best[url=http://www.gpascholarships.org] Gpa Scholarships[/url] on your schooling right now!

Anonymous said...

Bu sohbet sitesi tek kelimeyle Muhtes. Sohbet Etmek ve Arkadas, Olmak için Arad? Seçmenin Faydalar?

Anonymous said...

[url=http://buyviagraonlinest.com/]viagra buy[/url] - viagra online without prescription overnight

[url=http://buycheapviagrast.com/#cheap]buy viagra cheap[/url] - cheap viagra 50 mg

[url=http://buygenericviagrast.com/]generic viagra[/url] - generic viagra dangers

[url=http://orderviagraonlinest.com/]viagra online order[/url] - viagra ordering

[url=http://viagradiscountonlinest.com/]viagra discount[/url] - viagra discount coupon

[url=http://viagraonlinepharmacyst.com/]viagra from canadian pharmacy[/url] - viagra pharmacy online

[url=http://buyviagrawithoutprescriptionst.com/]buy viagra without prescription[/url] - can you buy viagra online without a prescription

[url=http://viagralowestpricest.com/]viagra lowest price[/url] - viagra 50mg price

Anonymous said...

[b][url=http://www.uggsbootsoutletmall.co.uk/]ugg boots[/url][/b] It's an exceptionally important and critically critical listening to to suit your needs. I don't believe adequate lawyers take it considerable ample granted the fact that the consequence within a pendente lite hearing can quite often identify how you negotiate and settle a case. So, in our business, we think that you just just take a court docket reporter to you personally each time you've a pendente lite hearing, along with the court reporter will then take down any testimony that occurs for the duration of the hearing..

[b][url=http://www.uggsclearancemall.co.uk/]ugg clearance[/url][/b] Initially factors very first. You should give you the option to demonstrate your company's means and willingness to repay a mortgage. Your ability to repay primarily suggests that your enterprise is building sufficient positive hard cash circulation to pay the regular monthly charge in addition to deal with your basic working fees.

[b][url=http://www.uggsonsalewebsite.co.uk/]ugg boots outlet[/url][/b] Which is in which the capabilities of your middle team, the Bridgers, are incredibly crucial as the Bridgers usually takes the wild concepts from the innovators and alter them a little in order that they more acceptable for the adapters. The Bridgers are the natural negotiators or diplomats. They appreciate the need for new concepts and may existing them in a extra suitable way as opposed to innovators, who can get so caught up with their enthusiasm they don't notice should the audience has turned off!.

[b][url=http://www.louisvuittonpursesmarket.com/]www.louisvuittonpursesmarket.com[/url][/b] The agreement should outline specifically the contracted client fee and each partner's expected share of that fee. It should note whether a finder's fee will be paid, how much and to whom. It also should note whether each partners' expenses will be reimbursed and by whom..

[b][url=http://www.cheapuggbootswebsite.com/]uggs boots[/url][/b] Firstly, decide the location to have got a great reproduction synthetic Designer Mulberry Purses. The most beneficial and maybe safest approach to invest in a replica handbag is on-line. Entrepreneurs by across the globe sector replica companies purses on the internet, defining the net since the ideal place potential buyers go while browsing need of an cost-effective deal..

Anonymous said...

Online Payday Loans http://www.2applyforcash.com/ RadyHanny payday loans advimihuh [url=http://2applyforcash.com]Payday Loans Online No Faxing[/url] Payday Loan Lenders There are many great affiliate networks that have cost video determining a(n) ideal investment.I also target business or marketing survival itself is a struggle for most of us.

Anonymous said...

generic viagra viagra online risks - cheap viagra paypal payment

Anonymous said...

buy soma soma muscle relaxant drug - soma san diego tumblr

Anonymous said...

buy soma online soma other drug interactions - soma panties sale

Anonymous said...

buy soma soma san diego myspace - soma muscle relaxer and alcohol

Anonymous said...

soma medication soma san diego photography - order soma cheap

Anonymous said...

cheap generic soma buy soma 350 mg - soma bra sale

Anonymous said...

buy soma soma pills cost - buy soma in us with

Anonymous said...

buy soma buy aura soma - buy soma online cod

Anonymous said...

[url=http://casodex-bicalutamide.webs.com/]Androblock
[/url] buy Casodex online
Bicusan
buy Casodex

Anonymous said...

[url=http://amoxicilline.webs.com/]Trimox en ligne
[/url][url=http://acheter-amoxicilline.webs.com/]amoxicilline quand prendre
[/url] amoxicilline metronidazole
acheter Trimox
Fluidixine en ligne

Anonymous said...

buy cialis no prescription cialis lowest price - order cialis australia

Anonymous said...

buy tramadol online with mastercard tramadol hcl er dosage - tramadol reviews

Anonymous said...

It Foesnt have [url=http://www.germanylovelv.com/]Louis Vuitton Outlet[/url]
be a topic that youre Familiar with, just something that interests you. IF youre websites topic is something you know nothing about, Fo some research! Write an article sharing what you learneF with other reaFer[url=http://www.germanylovelv.com/]louis vuitton knolckoffs[/url]
You can start as simply as I FiFnt know this, anF you may not either..
Let's First look at the Fact that most Folks tenF [url=http://www.germanylovelv.com/]louis vuitton knolckoffs[/url]
come [url=http://www.germanylovelv.com/]louis vuitton knolckoffs[/url]
the internet with a lot[url=http://www.germanylovelv.com/]louis vuitton knolckoffs[/url]
mentality hoping http://www.germanylovelv.com/
make big money Fast. They believe the hype. They tenF [url=http://www.germanylovelv.com/]Louis Vuitton Outlet/[/url]
pogo stick From one money making option http://www.germanylovelv.com/
another in hopes oF FinFing the golF anF yet Fail http://www.germanylovelv.com/
Fo the easy stuFF that really Foes create that liFestyle they Fesire [url=http://www.germanylovelv.com/]louis vuitton knolckoffs[/url]
achieve..
|

Anonymous said...

generic xanax buy xanax online with paypal - xanax dosage weight

Anonymous said...

generic xanax dose of xanax for anxiety - buy xanax online australia no prescription

Anonymous said...

generic xanax xanax bars feeling - xanax pills street price

Anonymous said...

cheapest xanax what are xanax pills for - can buy xanax online us

Anonymous said...

Hello. And Bye. Thank you very much.

Anonymous said...

Hello. And Bye. Thank you very much.

Anonymous said...

Hello. And Bye. Thank you very much.

Anonymous said...

Hello. And Bye. Thank you very much.

Anonymous said...

buy carisoprodol carisoprodol how long does it last - side effects of soma carisoprodol tablets

Anonymous said...

Νeхt tіmе I гead a blog, I hope that іt won't disappoint me just as much as this one. I mean, Yes, it was my choice to read through, but I really thought you'ԁ have somеthіng helpful tο talk
about. All I heаг iѕ a bunch оf complаining abοut something
you coulԁ fix if уou ωeren't too busy looking for attention.

my weblog ... http://balkon.ws/

Anonymous said...

I usеd to be able to find good information from your
content.

mу web-site - ma huang ephedra
Also see my webpage :: where to buy ephedrine locally

Anonymous said...

I blοg quite oftеn аnd I genuіnelу aρprеcіate your information.
The article haѕ гeally pеakеd
mу іnterest. I will take a note of уοur
sitе anԁ keеp сhecκing
for neω information аbout оnсe a wеek.

I ѕubscrіbeԁ to уouг Feed as well.


My web sitе - is Ephedra legal

Anonymous said...

cialis online cialis daily blood pressure - once daily cialis reviews

Anonymous said...

cialis online order cialis no prescription online - reviews for generic cialis

Anonymous said...

http://landvoicelearning.com/#38471 can you buy tramadol over counter usa - tramadol 50 mg headache

Anonymous said...

learn how to buy tramdadol tramadol tylenol high - how to buy tramadol online

Anonymous said...

tramadol online xymel 50mg tramadol hydrochloride - tramadol for dogs price

Anonymous said...

klonopin online pharmacy difference generic klonopin - 3 mg klonopin and alcohol

Anonymous said...

buy tramadol online tramadol addiction side effects - tramadol 50 mg how often

Anonymous said...

buy klonopin online klonopin insufflation - price of generic klonopin

Anonymous said...

buy generic klonopin alternatives to klonopin for anxiety - klonopin pills overdose

Anonymous said...

christian louboutin outlet 908471 cheap christian louboutin shoes 558924 cheap christian louboutin 711094 http://guccihandbagsforcheap.cabanova.com/

Anonymous said...

buy ativan ativan 50mg - ativan 1 mg high

Anonymous said...

Chanel Outlet 161638 Discount Louis Vuitton Bags 457336 Hermes Birkin 284566 http://hermesbagsoutletsale.cabanova.com/

Anonymous said...

discount christian louboutin 576090 Burberry Bags clearance 955221 Chanel Outlet 383993 http://cloutlets.webs.com/

Anonymous said...

Burberry Bags clearance 497053 Cheap Gucci Bags 371333 Chanel Outlet 686902 http://cloutlets.webs.com/

Anonymous said...

christian louboutin outlet online 424071 Chanel Outlet 752975 Cheap Louis Vuitton Bags 71476 http://hermesbagsoutletsale.cabanova.com/

Anonymous said...

cheap christian louboutin 421750 christian louboutin outlet store 54616 Louis Vuitton Bags store 382395 http://pinterest.com/louboutioutlet/

Anonymous said...

Discount Louis Vuitton Bags 75452 Gucci Outlet 605495 christian louboutin outlet 93310 http://chaneloutletonline.cabanova.com/

Anonymous said...

Louis Vuitton Outlet 250753 discount christian louboutin 847639 Gucci Outlet 217582 http://tophermeshandbags.blogbaker.com/

Anonymous said...

Cheap Chanel Handbags 700218 Cheap Gucci Bags 132938 cheap christian louboutin 657954 http://cheaplouboutinshoes.cabanova.com/

Anonymous said...

An intriguing discussion is definitely worth
comment. I do believe that you need to publish more about this issue, it might not be
a taboo matter but typically people don't discuss such subjects. To the next! Best wishes!!

Feel free to visit my site: ロレックスコピー時計

Anonymous said...

http://louisvuittonbelt.naturallynails.com referee louis vuitton store national farmhouse fallible retail exemplary hearten leather handbags men demonstrable http://louisvuittonshoes.naturallynails.com

Anonymous said...

http://hermesoutlet.citationguide.net hermes bags authentic hermes birkin bag 35cm

Anonymous said...

Thank you a bunch for sharing this with all of us you actually recognize what you're talking approximately! Bookmarked. Please additionally discuss with my site =). We will have a hyperlink trade contract between us

My weblog; Psn code generator

Anonymous said...

Thanks for the marvelous posting! I genuinely enjoyed reading it, you will be
a great author. I will remember to bookmark your blog and will come back someday.
I want to encourage you to ultimately continue your
great posts, have a nice evening!

My blog ... Dragon City Hack

Anonymous said...

This is my first time pay a visit at here and i
am really happy to read all at one place.

Also visit my blog post: Microsoft Office Gratuit

Contributors

Followers