Tuesday, February 14, 2017

Stingray Renderer Walkthrough #4: Sorting

Stingray Renderer Walkthrough #4: Sorting

Introduction

This post will focus on ordering of the commands in the RenderContexts. I briefly touched on this subject in the last post and if you’ve implemented a rendering engine before you’re probably not new to this problem. Basically we need a way to make sure our RenderJobPackages (draw calls) end up on the screen in the correct order, both from a visual point of view as well as from a performance point of view. Some concrete examples,

  1. Make sure g-buffers and shadow maps are rendered before any lighting happens.
  2. Make sure opaque geometry is rendered front to back to reduce overdraw.
  3. Make sure transparent geometry is rendered back to front for alpha blending to generate correct results.
  4. Make sure the sky dome is rendered after all opaque geometry but before any transparent geometry.
  5. All of the above but also strive to reduce state switches as much as possible.
  6. All of the above but depending on GPU architecture maybe shift some work around to better utilize the hardware.

There are many ways of tackling this problem and it’s not uncommon that engines uses multiple sorting systems and spend quite a lot of frame time getting this right.

Personally I’m a big fan of explicit ordering with a single stable sort. What I mean by explicit ordering is that every command that gets recorded to a RenderContext already has the knowledge of when it will be executed relative to other commands. For us this knowledge is in the form of a 64 bit sort_key, in the case where we get two commands with the exact same sort_key we rely on the sort being stable to not introduce any kind of temporal instabilities in the final output.

The reasons I like this approach are many,

  1. It’s trivial to implement compared to various bucketing schemes and sorting of those buckets.
  2. We only need to visit renderable objects once per view (when calling their render() function), no additional pre-visits for sorting are needed.
  3. The sort is typically fast, and cost is isolated and easy to profile.
  4. Parallel rendering works out of the box, we can just take all the Command arrays of all the RenderContexts and merge them before sorting.

To make this work each command needs to know its absolute sort_key. Let’s breakdown the sort_key we use when working with our data-driven rendering pipe in Stingray. (Note: if the user doesn’t care about playing nicely together with our system for data-driven rendering it is fine to completely ignore the bit allocation patterns described below and roll their own.)

sort_key breakdown

Most significant bit on the left, here are our bit ranges:

MSB [ 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 ] LSB
      ^ ^       ^  ^                                   ^^                 ^
      | |       |  |                                   ||                 |- 3 bits - Shader System (Pass Immediate)
      | |       |  |                                   ||- 16 bits - Depth
      | |       |  |                                   |- 1 bit - Instance bit
      | |       |  |- 32 bits - User defined
      | |       |- 3 bits - Shader System (Pass Deferred)
      | - 7 bits - Layer System
      |- 2 bits - Unused

2 bits - Unused

Nothing to see here, moving on… (Not really sure why these 2 bits are unused, I guess they weren’t at some point but for the moment they are always zero) :)

7 bits - Layer System

This 7-bits range is managed by the “Layer system”. The Layer system is responsible for controlling the overall scheduling of a frame and is set up in the render_config file. It’s a central part of the data-driven rendering architecture in Stingray. It allows you to configure what layers to expose to the shader system and in which order these layers should be drawn. We will look closer at the implementation of the layer system in a later post but in the interest of clarifying how it interops with the sort_key here’s a small example:


default = [
  // sort_key = [ 00000000 10000000 00000000 00000000 00000000 00000000 00000000 00000000 ]
  { name="gbuffer" render_targets=["gbuffer0", "gbuffer1", "gbuffer2", "gbuffer3"]
     depth_stencil_target="depth_stencil_buffer" sort="FRONT_BACK" profiling_scope="gbuffer" }

  // sort_key = [ 00000001 00000000 00000000 00000000 00000000 00000000 00000000 00000000 ]
  { name="decals" render_targets=["gbuffer0" "gbuffer1"] depth_stencil_target="depth_stencil_buffer"
     profiling_scope="decal" sort="EXPLICIT" }

  // sort_key = [ 00000001 10000000 00000000 00000000 00000000 00000000 00000000 00000000 ]
  { resource_generator="lighting" profiling_scope="lighting" }

  // sort_key = [ 00000010 00000000 00000000 00000000 00000000 00000000 00000000 00000000 ] LSB
  { name="emissive" render_targets=["hdr0"] depth_stencil_target="depth_stencil_buffer"
    sort="FRONT_BACK" profiling_scope="emissive" }
]

Above we have three layers exposed to the shader system and one kick of a resource_generator called lighting (more about resource_generators in a later post). The layers are rendered in the order they are declared, this is handled by letting each new layer increment the 7 bits range belonging to the Layer System with 1 (as can be seen in the sort_key comments above).

The shader author dictates into which layer(s) it wants to render. When a RenderJobPackage is recorded to the RenderContext (as described in the last post) the correct layer sort_keys are looked up from the layer system and the result is bitwise ORed together with the sort_key value piped as argument to RenderContext::render().

3 bits - Shader System (Pass Deferred)

The next 3 bits are controlled by the Shader System. These three bits encode the shader pass index within a layer. When I say shader in this context I refer to our ShaderTemplate::Context which is basically a wrapper around multiple linked shaders rendering into one or many layers. (Nathan Reed recently blogged about “The Many Meanings of “Shader””, in his analogy our ShaderTemplate is the same as an “Effect”)

Since we can have a multi-pass shader rendering into the same layer we need to encode the pass index into the sort_key, that is what this 3 bit range is used for.

32 bits - User defined

We then have 32 user defined bits, these bits are primarily used by our “Resource Generator” system (I will be covering this system in the post about render_config & data-driven rendering later), but the user is free to use them anyway they like and still maintain compatibility with the data-driven rendering system.

1 bit - Instance bit

This single bit also comes from the Shader System and is set if the shader implements support for “Instance Merging”. I will be covering this in a bit more detail in my next post about the RenderDevice but essentially this bit allows us to scan through all commands and find ranges of commands that potentially can be merged together to fewer draw calls.

16 bits - Depth

One of the arguments piped to RenderContext::render() is an unsigned normalized depth value (0.0-1.0). This value gets quantized into these 16 bits and is what drives the front-to-back vs back-to-front sorting of RenderJobPackages. If the sorting criteria for the layer (see layer example above) is set to back-to-front we simply flip the bits in this range.

3 bits - Shader System (Pass Immediate)

A shader can be configured to run in “Immediate Mode” instead of “Deferred Mode” (default). This forces passes in a multi-pass shader to run immediately after each other and is achieved by moving the pass index bits into the least significant bits of the sort_key. The concept is probably easiest to explain with an artificial example and some pseudo code:

Take a simple scene with a few instances of the same mesh, each mesh recording one RenderJobPackages to one or many RenderContexts and all RenderJobPackages are being rendered with the same multi-pass shader.

In “Deferred Mode” (i.e pass indices encoded in the “Shader System (Pass Deferred)” range) you would get something like this:

foreach (pass in multi-pass-shader)
  foreach (render-job in render-job-packages)
    render (render-job)
  end
end

If shader is configured to run in “Immediate Mode” you would instead get something like this:

foreach (render-job in render-job-packages)
  foreach (pass in multi-pass-shader)
    render (render-job)
  end
end

As you probably can imagine the latter results in more shader / state switches but can sometimes be necessary to guarantee correctly rendered results. A typical example is when using multi-pass shaders that does alpha blending.

Wrap up

The actual sort is implemented using a standard stable radix sort and happens immediately after the user has called RenderDevice::dispatch() handing over n-number of RenderContexts to the RenderDevice for translation into graphics API calls.

Next post will cover this and give an overview of what a typical rendering back-end (RenderDevice) looks like in Stingray. Stay tuned.

449 comments:

  1. I feel really happy to have seen your webpage and look forward to so many more entertaining times reading here. Thanks once more for all the details.


    Data Science Training in Bangalore

    ReplyDelete
  2. I think this is a great site to post and I have read most of contents and I found it useful for my Career .Thanks for the useful information. For any information or Queries Comment like and share it.

    PMP Training Abu Dhabi

    GDPR Training in Hyderabad

    Digital Marketing Training in Hyderabad


    six sigma Training Pune

    ReplyDelete
  3. Very nice post here and thanks for it .I always like and such a super contents of these post.Excellent and very cool idea and great content of different kinds of the valuable information's.
    Good discussion. Thank you.
    Anexas
    Six Sigma Training in Abu Dhabi
    Six Sigma Training in Dammam
    Six Sigma Training in Riyadh

    ReplyDelete
  4. Amazing article. Your blog helped me to improve myself in many ways thanks for sharing this kind of wonderful informative blogs in live. I have bookmarked more article from this website. Such a nice blog you are providing ! Kindly Visit Us @ Best Travels in Madurai | Tours and Travels in Madurai | Madurai Travels

    ReplyDelete
  5. I think this is the best article today about the future technology. Thanks for taking your own time to discuss this topic, I feel happy about that curiosity has increased to learn more about this topic. Artificial Intelligence Training in Bangalore. Keep sharing your information regularly for my future reference.

    ReplyDelete
  6. This is the exact information I am been searching for, Thanks for sharing the required infos with the clear update and required points.
    samsung service centres in chennai
    samsung mobile service center in velachery

    ReplyDelete
  7. This comment has been removed by the author.

    ReplyDelete
  8. many peoples want to join random whatsapp groups . as per your demand we are ready to serve you whatsapp group links . On this website you can join unlimited groups . click and get unlimited whatsapp group links

    ReplyDelete
  9. Nice Article…
    Really appreciate your work
    Bike Status

    ReplyDelete
  10. Very useful post, very great introduction posted. thanks for sharing

    ExcelR Data Science Course Bangalore

    ReplyDelete



  11. It is perfect time to make some plans for the future and it is time to be happy. I've read this post and if I could I desire to suggest you some interesting things or suggestions. Perhaps you could write next articles referring to this article. I want to read more things about it!

    DATA SCIENCE COURSE MALAYSIA

    ReplyDelete
  12. I just got to this amazing site not long ago. I was actually captured with the piece of resources you have got here. Big thumbs up for making such wonderful blog page!data science course in dubai

    ReplyDelete
  13. i am for the first time here. I found this board and I in finding It truly helpful & it helped me out a lot. I hope to present something back and help others such as you helped me.
    data analytics course malaysia

    ReplyDelete
  14. Top banks in the world
    A Bank is a monetary establishment which is engaged with getting and loaning cash. Banks take client stores as an end-result of paying clients a yearly premium installment. The bank at that point utilize most of these stores to loan to different clients for an assortment of advances.
    Visit for more :-M&T Bank Phone Number

    ReplyDelete
  15. Google Chrome is the most powerful, fastest and most popular web browser in the world. Google Chrome is not opensource browser itself, but it is based on Chromium browser which available in default Ubuntu repositories. It is a secure and easy to use browser. In this tutorial we are going to learn how to install Google Chrome on Ubuntu 18.04. By using these instructions you can also install Google Chrome on any Debian based system like Linux Mint, Elementary OS or Debian itself.

    Prerequisites
    Before you start to install Google Chrome on Ubuntu 18.04. You must have the credentials of user with sudo privileges.

    ReplyDelete
  16. I am really enjoying reading your well written articles. It looks like you spend a lot of effort and time on your blog. I have bookmarked it and I am looking forward to reading new articles. Keep up the good work.
    data science course malaysia

    ReplyDelete
  17. Pretty good post. I just stumbled upon your blog and wanted to say that I have really enjoyed reading your blog posts. Any way I’ll be subscribing to your feed and I hope you post again soon.
    Data Science Courses

    ReplyDelete
  18. kajal-raghwani-biography

    very good post...
    great information....
    I love your blog post...

    ReplyDelete
  19. food ordering apps india

    very good post...

    I like it...
    you are always providing great content...

    ReplyDelete
  20. Great post thanks for the share,
    You may like Telegram Group Links

    ReplyDelete
  21. Really great information shared through this post. TamilMV 2019 New Links are available now. Must visit FMovies Latest Links

    ReplyDelete
  22. Making this type of website is not easy. You can contact Digi Instiller SEO Company for all types of Digital Marketing Services like SEO, SMM, PPC Ads, etc.

    ReplyDelete
  23. Making this type of website is not easy. You can contact Digi Instiller SEO Company for all types of Digital Marketing Services like SEO, SMM, PPC Ads, etc.

    ReplyDelete
  24. I love your article so much. Good job
    Participants who complete the assignments and projects will get the eligibility to take the online exam. Thorough preparation is required by the participants to crack the exam. ExcelR's faculty will do the necessary handholding. Mock papers and practice tests will be provided to the eligible participants which help them to successfully clear the examination.

    Excelr Solutions

    ReplyDelete
  25. Thank You for sharing the article on sorting. You can also visit Best Sacred games 2 Memes

    ReplyDelete
  26. I Got Job in my dream company with decent 12 Lacks Per Annum Salary, I have learned this world most demanding course out there in the current IT Market from the big data Training in bangalore Providers who helped me a lot to achieve my dreams comes true. Really worth trying.

    ReplyDelete


  27. Thank you so much for sharing this useful information, Keep sharing this kind of information.

    Regards,
    architectural rendering

    ReplyDelete
  28. PUBG Mobile Lite need minimum 2GB of RAM is claimed as per the official requirements

    ReplyDelete
  29. This comment has been removed by the author.

    ReplyDelete
  30. Nice article
    Thanks for sharing the information
    Please visit leadmirror to know your blog SEO report

    ReplyDelete
  31. Thanks for sharing such an awesome Information with us

    I Got Job in my dream company with decent 12 Lacks Per Annum salary, I have learned this world most demanding course out there in the current IT Market from the Data Science Training in btm experts who helped me a lot to achieve my dreams comes true. Really worth trying

    ReplyDelete
  32. Cool post .. amazing blog. I really appreciate your effort. Thanks for sharing. Please Check Sai Baba Images and Life Quotes in Hindi

    ReplyDelete
  33. amazing post written ... It shows your effort and dedication. Thanks for share such a nice post.
    Life Quotes in Hindi and funny wifi names reddit

    ReplyDelete
  34. This comment has been removed by the author.

    ReplyDelete
  35. Really amazing article thanks for this article.
    C++ while loop

    ReplyDelete
  36. Today Launch in india New Jawa Bike is Jawa Anniversary Edition Price at 1.73 lakh (ex-showroom), to mark the 90th year of the brand.

    ReplyDelete
  37. Thank you so much for this useful article. Visit OGEN Infosystem for Web Designing and SEO Services in Delhi, India.
    Best Website Designing Company in India

    ReplyDelete
  38. I found your article on Google when I was surfing, it is written very nicely and is optimized .Thank you I visit your website regularly.
    the hindu pdf

    ReplyDelete
  39. Thank you for sharing such valuable information.Good job.keep it up.Keep writing.
    machine learning institute in btm layout

    ReplyDelete
  40. This comment has been removed by the author.

    ReplyDelete
  41. Thank you for such a nice article keep posting, I am a Regular Visitor of your website.
    bag trends 7 bags every girl should have

    ReplyDelete
  42. Great content shared. I also want to say that Starting a YouTube Channel in 2020 is very important to grow yourself.

    ReplyDelete
  43. Are You Suffereing From Plantar Fasciitis check out this article

    best shoes for nurses(s)

    ReplyDelete
  44. Awesome post. Really you are shared very informative concept... Thank you for sharing.

    Latest Assam Job

    ReplyDelete
  45. Thank you for such a nice article keep posting, Arundhati gold

    ReplyDelete
  46. it is written very nicely and is optimized

    biography

    ReplyDelete
  47. Very impressive and nice blog, Thanks for sharing your valuable information.
    Data Science Training in Hyderabad

    ReplyDelete
  48. I Check your site your site is very good site thank you so much share amazing article 먹튀검증

    ReplyDelete
  49. Good information posting .It is very useful post.
    Thanks for posting
    Data Science Training in Hyderabad

    ReplyDelete
  50. Very good post, keep sending us such informative articles I visit your website on a regular basis.
    school fee management software

    ReplyDelete
  51. What is Tajweed? It means to read Quran beautifully. Moreover, it means that to vocalize each letter carefully with all its standards. Almighty Allah Says in the Holy Book that “Read the Holy Qur’an without hurrying and generating the letters clear.” So, Learn Quran Online by joining Aiman Online Quran Academy.
    Learn Online Quran
    Learning Quran With Tajweed






    ReplyDelete




  52. Very Good Information...

    Data science Course in Pune


    Thank You Very Much For Sharing These Nice Tips..

    ReplyDelete
  53. This comment has been removed by the author.

    ReplyDelete
  54. We as a team of real-time industrial experience with a lot of knowledge in developing applications in python programming (7+ years) will ensure that we will deliver our best in python training in vijayawada. , and we believe that no one matches us in this context.

    ReplyDelete
  55. an other Great Post wow You are the Best but here also the an other Site where you can check these Details which are Mention in the Site Link and All the Details are by the Heading title.
    Muqeem
    Muqeem VISA Validity
    VISA Validity
    HFAV
    RTA FINES
    أبشر-الجوازات
    تاريخ-انتهاء-الاقامة
    المخالفات-المرورية
    iqama expiry

    ReplyDelete
  56. thanx for sharing the quality post.
    All About GTA 5 Roleplay
    read about Legacy India Roleplay
    read about GTA V Roleplay

    ReplyDelete
  57. nic I Like It
    Today I am telling about make money online how from home and Best Earning apps or Best Way to make money online. Here you can Learn Every day Real Earning Apps or Mobile to earn money online using whatsapp.

    Visit - online earn money and Make Money Online Using Mobile

    ReplyDelete
  58. We as a team of real-time industrial experience with a lot of knowledge in developing applications in python programming (7+ years) will ensure that we will deliver our best in python training in vijayawada. , and we believe that no one matches us in this context.

    ReplyDelete
  59. We as a team of real-time industrial experience with a lot of knowledge in developing applications in python programming (7+ years) will ensure that we will deliver our best in python training in vijayawada. , and we believe that no one matches us in this context.

    ReplyDelete
  60. Structured Cabling Service in Dubai - Techsquad

    We have structured cabling service provider company in Dubai, we provide services like fiber optics installation across Dubai ,our engineers have 10 plus year of experience,
    We provide services for IP Telephony PABX Solutions ,Telephone wiring, Data Networking/Switching Solutions
    We provide free estimate and free site visit across dubai, our engineers have multiple projects experience,
    We also provide lan
    cable installation across Dubai for small,medium, and large enterprises,


    ReplyDelete
  61. Shraddha who conducts zumba classes in Sector 50, says, "The inquiries started after Happy Streets.

    The quantity of children matured 10-16 expanded in zumba classes.

    Many, who were prior going for move structures like jazz, decided on zumba.

    To make it intriguing for kids, we show them zumba strategies from various nations." Instructors going for new groups and studiosInstructors state that they have needed to begin extra

    bunches or find greater studios to lead zumba classes.

    Tanvi Gambhir, a city-based zumba teacher, says, "Because of the expanded questions from Noida, I am currently beginning a bunch here one month from now.

    Prior to this, Noida hadn't indicated a lot of guarantee for an end of the week zumba class and I held classes just in

    The way that it is being held in Noida mirrors the requirement for more zumba educators here.

    It is a consequence of expanded mindfulness and request among individuals." Young working ladies generally energetic about zumbaTrainers state that the vast majority of the new zumba fans from the city

    Men have demonstrated intrigue as well, however their investment stays low.

    They likewise give old style move school in noida

    Visit Zumba classes in noida today

    zumba classes in Noida

    ReplyDelete
  62. Really nice and interesting post. I was looking for this kind of information and enjoyed reading this one. Keep posting. Thanks for sharing.how to download ccc admit card without registration number

    ReplyDelete

  63. I finally found great post here.I will get back here. I just added your blog to my bookmark sites. thanks.Quality posts is the crucial to invite the visitors to visit the web page, that's what this web page is providing.
    data analytics courses
    ExcelR Data Science training in Mumbai
    data science interview questions
    ExcelR Business Analytics courses in Mumbai

    ReplyDelete
  64. Very Nice article. Your blog helped me to improve myself in many ways thanks for sharing this kind of wonderful informative article in live. I have bookmarked more article from this website. Such a nice blog you are providing! Kindly Visit Us 우리카지노

    ReplyDelete
  65. Hey,

    Uselessly I am not Commenting on to the post But when I Saw your post It was Amazing. It any News you want to know National New Today

    The TrendyFeed
    Latest New Today
    Technology New Today

    Thanks,
    The TrendyFeed

    ReplyDelete
  66. Thank you for sharing valuable information. Thanks for providing a great informatic blog, really nice required information & the things I never imagined. Thanks you once again Boom Beach Apk

    ReplyDelete
  67. Usually I never comment on blogs but your article is so convincing that I never stop myself to say something about it. You’re doing a great job Man, Keep it up. Strange VPN Host

    ReplyDelete
  68. Enjoyed reading this article throughout.Nice post! Digital Marketing is the trendy course right now and is going to be in
    a great demand in near future as jobs for this domain will be sky rocketted.To be on par with the current trend we have to
    gain complete knowledge about the subject. For the complete course online
    360Digitmg Digital Marketing Course

    ReplyDelete
  69. Mind Q Systems provides AWS training in Hyderabad & Bangalore.AWS training designed for students and professionals. Mind Q Provides 100% placement assistance with AWS training.

    Mind Q Systems is a Software Training Institute in Hyderabad and Bangalore offering courses on Testing tools, selenium, java, oracle, Manual Testing, Angular, Python, SAP, Devops etc.to Job Seekers, Professionals, Business Owners, and Students. We have highly qualified trainers with years of real-time experience.
    AWS

    ReplyDelete
  70. Really awesome blog!!! I finally found great post here.I really enjoyed reading this article. Nice article on data science . Thanks for sharing your innovative ideas to our vision. your writing style is simply awesome with useful information. Very informative, Excellent work! I will get back here.
    Data Science Course
    Data Science Course in Marathahalli
    Data Science Course Training in Bangalore

    ReplyDelete
  71. HI
    Are you Looking For Digital Marketing In Noida. We have Team of expert for Digital marketing internship with 100% placementBest Digital marketing Agnecy In Noida

    ReplyDelete
  72. Better Site Rankings Through Search Engine Optimization

    If you want to rise above your competition, you will have to do search engine optimization. Doing this requires that you learn the techniques to become an SEO whiz. This article will show you ways to make yourself visible, it will also tell you things you should stay away from.

    Be sure that your site is properly coded when you try to utilize SEO on your website to grow traffic. For instance, if you have JavaScript and the code isn't done well, spiders can't index your site. If you have Flash content without coding, they will not index it at all.

    When optimizing your search engine results be sure to use any variation of the word possible, including misspellings. The search engine algorithms will pick up on these tags and show your site when people search for these keywords. An example of this is a site for eyeglasses: include words like "glasses" as well as "glases."

    For a good affiliate marketing strategy set up pay-per-click advertising. Though the amount paid per each click is low, it's one of the easiest options to offer affiliates and can generate acceptable earnings over time.

    When deciding on a domain name, make sure to pick a keyword rich URL. Your website should be easy for visitors to find when they do a web search. Not all clicks to your website will come from your marketing efforts. Some people will stumble on your site while searching for similar products.

    You need to get more visitors to your website and keep them there to increase your page rank. There is more and more evidence available suggesting that how long a visitor stays on a site affects their PageRank, according to Quantcast scores 구글상위업체. Optimizing your search engine results is the best way to improve your online visibility. Using discussion boards and forums is an effective way to keep traffic on your website for quite a while.

    Putting your website in a prime place to be found is what search engine optimization is all about. The article you have just read gave you multiple tips on how to make this happen for you. Applying these simple tricks will get your website noticed in no time, so increase your traffic today!

    ReplyDelete
  73. I am happy for sharing on this blog its awesome blog I really impressed. thanks for sharing. Great efforts.

    Looking for Big Data Hadoop Training Institute in Bangalore, India. Prwatech is the best one to offers computer training courses including IT software course in Bangalore, India.

    Also it provides placement assistance service in Bangalore for IT. Best Data Science Certification Course in Bangalore.

    Some training courses we offered are:

    Big Data Training In Bangalore
    big data training institute in btm
    hadoop training in btm layout
    Best Python Training in BTM Layout
    Data science training in btm
    R Programming Training Institute in Bangalore

    ReplyDelete
  74. Hot Shapers Belt in Pakistan are normal fitness attire which have been intended with Neotex smart textile skill helps your body to be slim and  smart.

    ReplyDelete
  75. Thank you for sharing valuable information. Thanks for providing a great informatic blog 구글상위노출,

    ReplyDelete
  76. Thank you for sharing valuable information. Thanks for providing a great informatic blog 구글상위노출,

    ReplyDelete
  77. Hello
    Today I am glad to discover your site.
    I think it's better because we can share your information and leave a comment.
    I run a community in Vietnam, and I think your web page will help.
    I'm going to tag it, so it's okay to come see it. Bye Bye. 하노이 마사지

    ReplyDelete
  78. Watch Latest Our Pinoy TV, Pinoy TV Replay,, Pinoy Lambingan, Pinoy Teleserye, Pinoy TV Replay, Wow Pinoy And Pinoy Channel Pinoy Tambayan.

    ReplyDelete
  79. Mortgage in Brampton
    motrgage in Toronto
    We work with Canada's premium financial institutions to offer you the best mortgages in the market and the lowest interest rates. Names such as Royal Bank, Scotia Bank, Bank of Montreal, TD Canada Trust, CIBC, National Bank, and more, guarantee the best service and highest savings for you.

    ReplyDelete
  80. Your Website is very good, Your Website impressed us a lot, We have liked your website very much.
    We have also created a website of Android App that you can see it.
    http://damodapk.com/
    http://seniorjacket.com/

    ReplyDelete
  81. Your Website is very good, Your Website impressed us a lot, We have liked your website very much.
    We have also created a website of Android App that you can see it.
    http://damodapk.com/
    http://damodapk.com/

    ReplyDelete
  82. Excellent Blog! I would like to thank for the efforts you have made in writing this post. I am hoping the same best work from you in the future as well. I wanted to thank you for this websites! Thanks for sharing. Great websites!
    360 digitmg Data-science training in chennai

    ReplyDelete
  83. From: Aptoide Apk Download
    Aptoide Apk Download
    Thank you for sharing valuable information. Thanks for providing a great informatic blog

    ReplyDelete

  84. I read your blog and i found it very interesting and useful blog for me. I hope you will post more like this, i am very thankful to you for these type of post.
    Visit : https://pythontraining.dzone.co.in/training/data-science-training.html
    Thank you.

    ReplyDelete
  85. thanks for ur valuable information,keep going touch with us
    파워볼 메이저 사이트

    ReplyDelete

  86. Great post i must say and thanks for the information. Education is definitely a sticky subject. However, is still among the leading topics of our time. I appreciate your post and look forward to more.

    digital marketing courses mumbai

    ReplyDelete
  87. This comment has been removed by the author.

    ReplyDelete
  88. Wow What a Nice and Great Article, Thank You So Much for Giving Us Such a Nice & Helpful Information, please keep writing and publishing these types of helpful articles, I visit your website regularly.
    a mirror of common errors pdf

    ReplyDelete
  89. I just stumbled upon your blog and wanted to say that I have really enjoyed reading your blog posts. ExcelR Data Analytics Courses Any way I’ll be subscribing to your feed and I hope you post again soon. Big thanks for the use

    ReplyDelete
  90. Really impressed! Everything is very open and very clear clarification of issues. It contains truly facts. Your website is very valuable. Thanks for sharing.
    data science certification
    360DigiTMG

    ReplyDelete
  91. I will really appreciate the writer's choice for choosing this excellent article appropriate to my matter.Here is deep description about the article matter which helped me more.
    data science course in malaysia
    data science certification
    data science course
    data science bootcamp malaysia

    ReplyDelete
  92. I like how this article is written. Your points are sound, original, fresh and interesting. This information has been made so clear there's no way to misunderstand it. Thank you.

    SEO services in kolkata
    Best SEO services in kolkata
    SEO company in kolkata
    Best SEO company in kolkata
    Top SEO company in kolkata
    Top SEO services in kolkata
    SEO services in India
    SEO copmany in India

    ReplyDelete
  93. Good information. Thank you for providing information. Study here how you can get rich. 먹튀

    ReplyDelete
  94. Very good post, keep sending us such informative articles I visit your website on a regular basis.
    hindi vyakaran pdf

    ReplyDelete
  95. It was centered.Even if he accepts that he won 16 consecutive games as a masterpiece, especially as a player's news, the chairman and G70 also said, "The hand came out. Perhaps it will work in 2017? Last month, Ryu Seung-bum, who will agree to the aftermath of the 10.6 million won discount coupon without buses, sent out a complete victory in June in the heart of the competition and the recovery of the ultra-high tension parent company in Asia and Texas. He asked back Kim Gu-ra that he actually had a lot of posters. I saw it. 비트코인 마진거래

    ReplyDelete
  96. This is the first time I am reading this article and I wish I found this earlier. Love the way you have aligned the thoughts with sinhala wela katha and wal katha in sinhala really made it wonderful.

    ReplyDelete
  97. Thanks a lot for the tips. I will definitely do that for my business and I am absolutely sure I will have the best possible results with this guide.


    SEO services in kolkata
    Best SEO services in kolkata
    SEO company in kolkata

    ReplyDelete

  98. You are in point of fact a just right webmaster. The website loading speed is amazing. It kind of feels that you're doing any distinctive trick. Moreover, The contents are masterpiece. you have done a fantastic activity on this subject!
    Business Analytics Training in Hyderabad | Business Analytics Course in Hyderabad

    ReplyDelete
  99. Hi to everybody, here everyone is sharing such knowledge, so it’s fastidious to see this site, and I used to visit this blog daily
    Data Science Training in Bangalore

    ReplyDelete
  100. Took me time to read all the comments, but I really enjoyed the article. It proved to be Very helpful to me and I am sure to all the commenters here! It’s always nice when you can not only be informed, but also entertained!
    Data Science Training in Bangalore

    ReplyDelete
  101. I’m excited to uncover this page. I need to to thank you for ones time for this particularly fantastic read!! I definitely really liked every part of it and i also have you saved to look at new information in your site.
    Learn best training course:
    Business Analytics Course in Hyderabad | Business Analytics Training in Hyderabad

    ReplyDelete
  102. I would also motivate just about every person to save this web page for any favorite assistance to assist posted the appearance.
    data science certification

    ReplyDelete
  103. I have to search sites with relevant information ,This is a
    wonderful blog,These type of blog keeps the users interest in
    the website, i am impressed. thank you.
    Data Science Course in Bangalore | Data Science Training in Bangalore

    ReplyDelete
  104. Assam TET Notification 2019


    I am a web Designer and Social worker. I have created a lot of websites. My website is All Job Assam and News in Assam. If you want to see my website please click my website name.


    ReplyDelete
  105. I recently came across your article and have been reading along. I want to express my admiration of your writing skill and ability to make readers read from the beginning to the end. I would like to read newer posts and to share my thoughts with you.

    SAP SD Online Training

    SAP SD Classes Online

    SAP SD Training Online

    Online SAP SD Course

    SAP SD Course Online

    ReplyDelete
  106. interesting post! i usually i don't read complete post but when i started reading this article! it kept me reading because the way its written i think any one would found it to be interesting and informative Seoliquido

    ReplyDelete
  107. Very interesting blog Thank you for sharing such a nice and interesting blog and really very helpful article.

    Salesforce CRM Training in Bangalore

    Best Salesforce CRM Training Institutes in Bangalore

    ReplyDelete
  108. Such a very useful article. Very interesting to read this article.I would like to thank you for the efforts you had made for writing this awesome article.

    Hadoop Admin Online Training

    Hadoop Admin Classes Online

    Hadoop Admin Training Online

    Online Hadoop Admin Course

    Hadoop Admin Course Online

    ReplyDelete
  109. Our QuickBooks Support Phone Number Texas 1-833-325-0220, for further queries and get them addressed simultaneously. Our technicians are available by 24*7, round-the-clock. So, Why Delay? Call right now!! Read More: https://tinyurl.com/y7tgywml

    ReplyDelete
  110. I am sure that this is going to help a lot of individuals. Keep up the good work. It is highly convincing and I enjoyed going through the entire blog.
    Data Science Course in Bangalore

    ReplyDelete
  111. Truly, this article is really one of the very best in the history of articles. I am a antique ’Article’ collector and I sometimes read some new articles if I find them interesting. And I found this one pretty fascinating and it should go into my collection. Very good work!
    data science course hyderabad

    ReplyDelete
  112. https://blog.minibloq.org/2014/05/using-minibloq-as-ide.html?showComment=1597040025478#c233870058071495235

    ReplyDelete
  113. Nice post found to be very impressive while going through this post being more unique with it's content. Thanks for sharing and keep posting such an informative content.

    Data Science Course in Raipur

    ReplyDelete
  114. Nice post found to be very impressive to come across such an awesome content. Lots of appreciation to the blogger who took an initiative to write this particular blog. Thanks for sharing and keep posting such an informative content.

    360DigiTMG Cyber Security Course

    ReplyDelete
  115. https://www.evernote.com/shard/s741/sh/9443ff0f-0f58-4b19-9899-b49e853176d6/23a3df9476a9278a9c74d5927fe1b880
    https://all4webs.com/sotad79921/guestpostingsite.htm?40812=29639
    https://uberant.com/article/873890-7-great-benefits-of-guest-posting/
    https://zenwriting.net/yecqtuuff8
    https://articlescad.com/article/show/178581
    https://www.article.org.in/article.php?id=502117
    http://www.articles.howto-tips.com/How-To-do-things-in-2020/7-awesome-benefits-guest-posting
    https://www.knowpia.com/s/blog_3e7a8bc7c9837b97
    http://toparticlesubmissionsites.com/7-great-benefits-of-guest-posting/
    http://www.24article.com/7-amazing-benefits-of-guest-posting-2.html

    ReplyDelete
  116. This site is astounding data and realities it's truly fantastic
    https://360digitmg.com/course/certification-program-in-data-science

    ReplyDelete
  117. This is a great post I saw thanks to sharing. I really want to hope that you will continue to share great posts in the future.
    data science course in delhi

    ReplyDelete
  118. Stunning! Such an astonishing and supportive post this is. I incredibly love it. It's so acceptable thus wonderful. I am simply astounded.
    data science courses in noida

    ReplyDelete
  119. I personally think your article is fascinating, interesting and amazing. I share some of your same beliefs on this topic. I like your writing style and will revisit your site.


    GDPR Consulting Services in UK

    ReplyDelete
  120. Really nice and interesting post. I was looking for this kind of information and enjoyed reading this one. Keep posting. Thanks for sharing.
    data science course in hyderabad

    ReplyDelete
  121. Free logo maker tool to generate custom design logos in minutes. Choose free fonts and icons to design your own logo. PhotoADKing is The easiest way to create a logo.

    ReplyDelete
  122. Make stunning designs with PhotoADKing's invitation maker. You'll be amazed at what you can create — no design skills required. Try this powerful tool for free.

    ReplyDelete
  123. incredible article!! sharing these kind of articles is the decent one and I trust you will share an article on information science.By giving an organization like 360DigiTMG.it is one the best foundation for doing guaranteed courses
    data science course in delhi

    ReplyDelete
  124. very well explained. I would like to thank you for the efforts you had made for writing this awesome article. This article inspired me to read more. keep it up.
    Logistic Regression explained
    Correlation vs Covariance
    Simple Linear Regression
    data science interview questions
    KNN Algorithm
    Bag of Words Python

    ReplyDelete
  125. Very awesome!!! When I seek for this I found this website at the top of all blogs in search engine.
    Best Digital Marketing Institute in Hyderabad

    ReplyDelete
  126. I wanted to leave a little comment to support you and wish you a good continuation. Wishing you the best of luck for all your blogging efforts.
    Best Institute for Data Science in Hyderabad

    ReplyDelete
  127. First You got a great blog .I will be interested in more similar topics. i see you got really very useful topics, i will be always checking your blog thanks.
    Best Digital Marketing Courses in Hyderabad

    ReplyDelete
  128. I am overwhelmed by your post with such a nice topic. Usually I visit your blogs and get updated through the information you include but today’s blog would be the most appreciable. Well done!
    business analytics course

    ReplyDelete
  129. keep up the good work. this is an Ossam post. This is to helpful, i have read here all post. i am impressed. thank you. this is our site please visit to know more information
    data science courses

    ReplyDelete
  130. ExcelR provides Data Science course . It is a great platform for those who want to learn and become a data scientist. Students are tutored by professionals who have a degree in a particular topic. It is a great opportunity to learn and grow.

    Data Science Course
    Data science courses
    Data scientist certification
    Data scientist courses


    ReplyDelete
  131. I've read this post and if I could I desire to suggest you some interesting things or suggestions. Perhaps you could write next articles referring to this article. I want to read more things about it!
    data science training

    ReplyDelete
  132. It was good experience to read about dangerous punctuation. Informative for everyone looking on the subject.
    business analytics course

    ReplyDelete
  133. Suggest good information in this message, click here.
    pebblecreekgolfpar3
    aysefiridin

    ReplyDelete
  134. Excellent post for the people who really need information for this technology.data science courses

    ReplyDelete
  135. Hope this article is fvrr I like it and very much r your best img.
    Click here

    ReplyDelete
  136. Excellence blog! Thanks For Sharing, The information provided by you is really a worthy. I read this blog and I got the more information about
    data scientist certification

    ReplyDelete