// API callback
related_results_labels_thumbs({"version":"1.0","encoding":"UTF-8","feed":{"xmlns":"http://www.w3.org/2005/Atom","xmlns$openSearch":"http://a9.com/-/spec/opensearchrss/1.0/","xmlns$blogger":"http://schemas.google.com/blogger/2008","xmlns$georss":"http://www.georss.org/georss","xmlns$gd":"http://schemas.google.com/g/2005","xmlns$thr":"http://purl.org/syndication/thread/1.0","id":{"$t":"tag:blogger.com,1999:blog-913600556879440043"},"updated":{"$t":"2024-01-01T15:38:08.302+05:30"},"category":[{"term":"Java"},{"term":"General"},{"term":"C Plus Plus Programming"},{"term":"Selenium Automation Testing"},{"term":"High Performance Computing"},{"term":"PPL"},{"term":"Parallel Computing"},{"term":"My Vlogs"},{"term":"Blogging Tips"},{"term":"Skill Development Lab"},{"term":"Compiler"},{"term":"Website Designing"},{"term":"Data Structures"},{"term":"Android"},{"term":"Database"},{"term":"CUDA"},{"term":"OPENMP"},{"term":"YouTube Tips"},{"term":"Youtube"},{"term":"C Programming"},{"term":"How To Write Blog"},{"term":"Android App Development"},{"term":"Salesforce"},{"term":"Multithreading"},{"term":"Networking"},{"term":"Swing"},{"term":"LEX \u0026 YACC"},{"term":"Linux"},{"term":"Ubuntu"},{"term":"Mysql"},{"term":"Nanded City Pune"},{"term":"GATE"},{"term":"Cloud Computing"},{"term":"MS Excel Formulas \u0026 Functions"},{"term":"Applet"},{"term":"Computer Networks"},{"term":"Google Forms"},{"term":"SQL"},{"term":"MPI"},{"term":"OpenMPI"},{"term":"Socket Programming"},{"term":"Thread Pool"},{"term":"Amazon Links Summary"},{"term":"Fedora"},{"term":"Guest Blogging"},{"term":"Python"},{"term":"SDL"},{"term":"Wine"},{"term":"Abbreviations in Computer Science"},{"term":"Amazon Affiliate Program"},{"term":"Dia Software"},{"term":"Lisp"},{"term":"Mathematics"},{"term":"OPENCL"},{"term":"Udemy Courses"},{"term":"Unboxing \u0026 Review"},{"term":"Vedic Mathematics"},{"term":"Vocabulary"}],"title":{"type":"text","$t":"Computer Revolution (www.comrevo.com)"},"subtitle":{"type":"html","$t":""},"link":[{"rel":"http://schemas.google.com/g/2005#feed","type":"application/atom+xml","href":"https:\/\/www.comrevo.com\/feeds\/posts\/default"},{"rel":"self","type":"application/atom+xml","href":"https:\/\/www.blogger.com\/feeds\/913600556879440043\/posts\/default\/-\/OPENCL?alt=json-in-script\u0026max-results=6"},{"rel":"alternate","type":"text/html","href":"https:\/\/www.comrevo.com\/search\/label\/OPENCL"},{"rel":"hub","href":"http://pubsubhubbub.appspot.com/"}],"author":[{"name":{"$t":"Parag Jambhulkar"},"uri":{"$t":"http:\/\/www.blogger.com\/profile\/13991750622483538113"},"email":{"$t":"noreply@blogger.com"},"gd$image":{"rel":"http://schemas.google.com/g/2005#thumbnail","width":"16","height":"16","src":"https:\/\/img1.blogblog.com\/img\/b16-rounded.gif"}}],"generator":{"version":"7.00","uri":"http://www.blogger.com","$t":"Blogger"},"openSearch$totalResults":{"$t":"1"},"openSearch$startIndex":{"$t":"1"},"openSearch$itemsPerPage":{"$t":"6"},"entry":[{"id":{"$t":"tag:blogger.com,1999:blog-913600556879440043.post-455554984900573235"},"published":{"$t":"2017-03-09T12:01:00.000+05:30"},"updated":{"$t":"2017-08-31T09:09:50.153+05:30"},"category":[{"scheme":"http://www.blogger.com/atom/ns#","term":"CUDA"},{"scheme":"http://www.blogger.com/atom/ns#","term":"OPENCL"}],"title":{"type":"text","$t":"OpenCL Program for Vector \/ Array Addition"},"content":{"type":"html","$t":"\u003Cdiv dir=\"ltr\" style=\"text-align: left;\" trbidi=\"on\"\u003E\n\u003Cspan style=\"font-size: large;\"\u003E\u0026nbsp; \u0026nbsp; \u0026nbsp; \u0026nbsp; \u0026nbsp; To learn Parallel Computing with OpenCL, you should start with example of Array Addition as it illustrates the proper use of multi-threading paradigm.\u003C\/span\u003E\u003Cbr \/\u003E\n\u003Cspan style=\"font-size: large;\"\u003E\u0026nbsp; \u0026nbsp; \u0026nbsp; \u0026nbsp; \u0026nbsp; \u0026nbsp;In this post, we will see OpenCL program for Array \/ Vector Addition. \u0026nbsp; \u0026nbsp; \u0026nbsp; \u0026nbsp; \u0026nbsp; \u0026nbsp; \u0026nbsp; \u0026nbsp; \u0026nbsp; \u0026nbsp; \u0026nbsp; \u0026nbsp;\u003C\/span\u003E\u003Cbr \/\u003E\n\u003Cbr \/\u003E\n\u003Ca name='more'\u003E\u003C\/a\u003E\u003Cspan style=\"font-size: large;\"\u003E\u0026nbsp; \u0026nbsp; \u0026nbsp; \u0026nbsp; \u0026nbsp; \u0026nbsp;In OpenCL, we have to follow the following steps:\u003C\/span\u003E\u003Cbr \/\u003E\n\u003Cspan style=\"font-size: large;\"\u003E\u003Cbr \/\u003E\u003C\/span\u003E\n\u003Cspan style=\"font-size: large;\"\u003E1. Get a list of platforms available on your system. (i.e. OpenCL installations on your system).\u003C\/span\u003E\u003Cbr \/\u003E\n\u003Cspan style=\"font-size: large;\"\u003E2. Get a list of devices(cpu or gpu) supported for available OpenCL platforms.\u003C\/span\u003E\u003Cbr \/\u003E\n\u003Cspan style=\"font-size: large;\"\u003E3. Get context properties list.\u003C\/span\u003E\u003Cbr \/\u003E\n\u003Cspan style=\"font-size: large;\"\u003E4. Create a context (collection of GPU and CPU).\u003C\/span\u003E\u003Cbr \/\u003E\n\u003Cspan style=\"font-size: large;\"\u003E5. Create command queue for the context and device.\u003C\/span\u003E\u003Cbr \/\u003E\n\u003Cspan style=\"font-size: large;\"\u003E6. Create a program object for all kernels.\u003C\/span\u003E\u003Cbr \/\u003E\n\u003Cspan style=\"font-size: large;\"\u003E7. Build\/Compile the program.\u003C\/span\u003E\u003Cbr \/\u003E\n\u003Cspan style=\"font-size: large;\"\u003E8. Create kernel object for the specific kernel which you want to execute.\u003C\/span\u003E\u003Cbr \/\u003E\n\u003Cspan style=\"font-size: large;\"\u003E9. Load data into the input buffer.\u003C\/span\u003E\u003Cbr \/\u003E\n\u003Cspan style=\"font-size: large;\"\u003E10. Set the arguments for the kernel.\u003C\/span\u003E\u003Cbr \/\u003E\n\u003Cspan style=\"font-size: large;\"\u003E11. Enqueue the kernel for execution.\u003C\/span\u003E\u003Cbr \/\u003E\n\u003Cspan style=\"font-size: large;\"\u003E12. Copy the results from Output buffer to Host(CPU) variable.\u003C\/span\u003E\u003Cbr \/\u003E\n\u003Cspan style=\"font-size: large;\"\u003E13. Print the results.\u003C\/span\u003E\u003Cbr \/\u003E\n\u003Cspan style=\"font-size: large;\"\u003E14. Free OpenCL resources.\u003C\/span\u003E\u003Cbr \/\u003E\n\u003Cbr \/\u003E\n\u003Cspan style=\"font-size: large;\"\u003E\u0026nbsp; \u0026nbsp; \u0026nbsp; \u0026nbsp; \u0026nbsp; \u0026nbsp; Following program is run on a system which has NVIDIA gpu and CUDA installed on it.\u003C\/span\u003E\u003Cbr \/\u003E\n\u003Cspan style=\"font-size: large;\"\u003E\u0026nbsp; \u0026nbsp; \u0026nbsp; \u0026nbsp; \u0026nbsp; \u0026nbsp;\u0026nbsp;\u003C\/span\u003E\u003Cbr \/\u003E\n\u003Cspan style=\"font-size: large;\"\u003E\u0026nbsp; \u0026nbsp; \u0026nbsp; \u0026nbsp; \u0026nbsp; \u0026nbsp; Program code and its output is as follows:\u003C\/span\u003E\u003Cbr \/\u003E\n\u003Cspan style=\"font-size: large;\"\u003E\u0026nbsp; \u0026nbsp; \u0026nbsp; \u0026nbsp;\u0026nbsp;\u003C\/span\u003E\u003Cbr \/\u003E\n\u003Cspan style=\"font-size: large;\"\u003E\u0026nbsp;\u003Cb\u003EProgram: (openclprogram.c)\u003C\/b\u003E\u003C\/span\u003E\u003Cbr \/\u003E\n\u003Cdiv style=\"background-color: lightgreen;\"\u003E\n\u003Cspan style=\"font-size: large;\"\u003E#include \u0026lt;stdio.h\u0026gt;\u003Cbr \/\u003E#include \u0026lt;stdlib.h\u0026gt;\u003Cbr \/\u003E#include \u0026lt;CL\/cl.h\u0026gt;\u003Cbr \/\u003E\u0026nbsp;\u0026nbsp; \u003Cbr \/\u003E\/* Kernel (function to be run on device) *\/\u0026nbsp;\u0026nbsp;\u0026nbsp; \u003Cbr \/\u003Econst char *code =\u003Cbr \/\u003E\u0026nbsp;\"__kernel void arrayadd(__global int *x, __global int *y, __global int *z)\\n\"\u003Cbr \/\u003E\u0026nbsp;\u0026nbsp;\u0026nbsp; \"{\\n\"\u003Cbr \/\u003E\u0026nbsp;\u0026nbsp;\u0026nbsp; \"\u0026nbsp; size_t id = get_global_id(0);\\n\"\u003Cbr \/\u003E\u0026nbsp;\u0026nbsp;\u0026nbsp; \"\u0026nbsp; z[id] = x[id] + y[id];\\n\"\u003Cbr \/\u003E\u0026nbsp;\u0026nbsp;\u0026nbsp; \"}\\n\";\u003Cbr \/\u003E\u003Cbr \/\u003Eint main()\u003Cbr \/\u003E{\u003Cbr \/\u003E\u0026nbsp; cl_context context;\u003Cbr \/\u003E\u0026nbsp; cl_context_properties properties[3];\u003Cbr \/\u003E\u0026nbsp; cl_kernel kernel;\u003Cbr \/\u003E\u0026nbsp; cl_command_queue commandqueue;\u003Cbr \/\u003E\u0026nbsp; cl_program program;\u003Cbr \/\u003E\u0026nbsp; cl_int err;\u003Cbr \/\u003E\u0026nbsp; cl_uint num_of_platforms;\u003Cbr \/\u003E\u0026nbsp; cl_platform_id platform_id;\u003Cbr \/\u003E\u0026nbsp; cl_device_id device_id;\u003Cbr \/\u003E\u0026nbsp; cl_uint num_of_devices;\u003Cbr \/\u003E\u0026nbsp; cl_mem buffer1, buffer2, outputbuffer;\u003Cbr \/\u003E\u003Cbr \/\u003E\u0026nbsp; size_t global;\u003Cbr \/\u003E\u0026nbsp; int arraysize;\u003Cbr \/\u003E\u0026nbsp; int a[20];\u003Cbr \/\u003E\u0026nbsp; int b[20];\u003Cbr \/\u003E\u0026nbsp; int results[20];\u003Cbr \/\u003E\u0026nbsp; int i;\u003Cbr \/\u003E\u003Cbr \/\u003E\u0026nbsp; printf(\"Enter the size of arrays\\n\");\u003Cbr \/\u003E\u0026nbsp; scanf(\"%d\",\u0026amp;arraysize);\u003Cbr \/\u003E\u003Cbr \/\u003E\u0026nbsp; printf(\"Enter %d elements of First Array\\n\",arraysize);\u003Cbr \/\u003E\u0026nbsp; for(i=0;i\u0026lt;arraysize;i++)\u003Cbr \/\u003E\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; scanf(\"%d\",\u0026amp;a[i]);\u003Cbr \/\u003E\u003Cbr \/\u003E\u0026nbsp; printf(\"Enter %d elements of Second Array\\n\",arraysize);\u003Cbr \/\u003E\u0026nbsp; for(i=0;i\u0026lt;arraysize;i++)\u003Cbr \/\u003E\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; scanf(\"%d\",\u0026amp;b[i]);\u003Cbr \/\u003E\u003Cbr \/\u003E\u0026nbsp; \/* Get a list of platforms available on your system. (i.e. OpenCL installations on your system).*\/\u003Cbr \/\u003E\u0026nbsp; if (clGetPlatformIDs(1, \u0026amp;platform_id, \u0026amp;num_of_platforms)!= CL_SUCCESS)\u003Cbr \/\u003E\u0026nbsp;\u0026nbsp; {\u003Cbr \/\u003E\u0026nbsp;\u0026nbsp;\u0026nbsp; printf(\"Not getting Platform id\\n\");\u003Cbr \/\u003E\u0026nbsp;\u0026nbsp;\u0026nbsp; return 1;\u003Cbr \/\u003E\u0026nbsp;\u0026nbsp; }\u003Cbr \/\u003E\u0026nbsp; \u003Cbr \/\u003E\u0026nbsp; \/* Get a list of devices(cpu or gpu) supported for available OpenCL platforms.*\/\u003Cbr \/\u003E\u0026nbsp; if (clGetDeviceIDs(platform_id, CL_DEVICE_TYPE_ALL, 1, \u0026amp;device_id, \u0026amp;num_of_devices) != CL_SUCCESS)\u003Cbr \/\u003E\u0026nbsp;\u0026nbsp; {\u003Cbr \/\u003E\u0026nbsp;\u0026nbsp;\u0026nbsp; printf(\"Not getting Device id\\n\");\u003Cbr \/\u003E\u0026nbsp;\u0026nbsp;\u0026nbsp; return 1;\u003Cbr \/\u003E\u0026nbsp;\u0026nbsp; }\u003Cbr \/\u003E\u0026nbsp;\u0026nbsp; \u003Cbr \/\u003E\u0026nbsp;\u0026nbsp; \/* Get context properties list.*\/\u003Cbr \/\u003E\u0026nbsp; properties[0]= CL_CONTEXT_PLATFORM;\u003Cbr \/\u003E\u0026nbsp; properties[1]= (cl_context_properties) platform_id;\u003Cbr \/\u003E\u0026nbsp; properties[2]= 0;\u003Cbr \/\u003E\u003Cbr \/\u003E\u0026nbsp; \/* Create a context (i.e. collection of GPU and CPU).*\/\u003Cbr \/\u003E\u0026nbsp; context = clCreateContext(properties,1,\u0026amp;device_id,NULL,NULL,\u0026amp;err);\u003Cbr \/\u003E\u0026nbsp; \u003Cbr \/\u003E\u0026nbsp; \/* Create command queue for the context and device.*\/\u003Cbr \/\u003E\u0026nbsp; commandqueue = clCreateCommandQueue(context, device_id, 0, \u0026amp;err);\u003Cbr \/\u003E\u0026nbsp;\u0026nbsp; \u003Cbr \/\u003E\u0026nbsp;\u0026nbsp; \/* Create a program object for all kernels.*\/\u003Cbr \/\u003E\u0026nbsp;\u0026nbsp; program = clCreateProgramWithSource(context,1,(const char **) \u0026amp;code, NULL, \u0026amp;err);\u003Cbr \/\u003E\u0026nbsp;\u0026nbsp;\u0026nbsp; \u003Cbr \/\u003E\u0026nbsp; \/* Build\/Compile the program.*\/\u003Cbr \/\u003E\u0026nbsp; if (clBuildProgram(program, 0, NULL, NULL, NULL, NULL) != CL_SUCCESS)\u003Cbr \/\u003E\u0026nbsp;\u0026nbsp; {\u003Cbr \/\u003E\u0026nbsp;\u0026nbsp;\u0026nbsp; printf(\"Error during building program\\n\");\u003Cbr \/\u003E\u0026nbsp;\u0026nbsp;\u0026nbsp; return 1;\u003Cbr \/\u003E\u0026nbsp;\u0026nbsp; }\u003Cbr \/\u003E\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; \u003Cbr \/\u003E\u0026nbsp; \/* Create kernel object for the specific kernel which you want to execute.*\/\u003Cbr \/\u003E\u0026nbsp; kernel = clCreateKernel(program, \"arrayadd\", \u0026amp;err);\u003Cbr \/\u003E\u003Cbr \/\u003E\u003Cbr \/\u003E\u0026nbsp; buffer1 = clCreateBuffer(context, CL_MEM_READ_ONLY, sizeof(int) * arraysize, NULL, NULL);\u003Cbr \/\u003E\u0026nbsp; buffer2 = clCreateBuffer(context, CL_MEM_READ_ONLY, sizeof(int) * arraysize, NULL, NULL);\u003Cbr \/\u003E\u0026nbsp; outputbuffer = clCreateBuffer(context, CL_MEM_WRITE_ONLY, sizeof(int) * arraysize, NULL, NULL);\u0026nbsp;\u0026nbsp; \u003Cbr \/\u003E\u003Cbr \/\u003E\u0026nbsp; \/* Load data into the input buffer.*\/\u003Cbr \/\u003E\u0026nbsp; clEnqueueWriteBuffer(commandqueue, buffer1, CL_TRUE, 0, sizeof(int) * arraysize, a, 0, NULL, NULL);\u003Cbr \/\u003E\u0026nbsp; clEnqueueWriteBuffer(commandqueue, buffer2, CL_TRUE, 0, sizeof(int) * arraysize, b, 0, NULL, NULL);\u003Cbr \/\u003E\u0026nbsp; \u003Cbr \/\u003E\u0026nbsp; \/* Set the arguments for the kernel.*\/\u003Cbr \/\u003E\u0026nbsp; clSetKernelArg(kernel, 0, sizeof(cl_mem), \u0026amp;buffer1);\u003Cbr \/\u003E\u0026nbsp; clSetKernelArg(kernel, 1, sizeof(cl_mem), \u0026amp;buffer2);\u003Cbr \/\u003E\u0026nbsp; clSetKernelArg(kernel, 2, sizeof(cl_mem), \u0026amp;outputbuffer);\u003Cbr \/\u003E\u0026nbsp;\u0026nbsp; \u003Cbr \/\u003E\u0026nbsp; global=arraysize;\u003Cbr \/\u003E\u0026nbsp;\u0026nbsp;\u0026nbsp; \u003Cbr \/\u003E\u0026nbsp; \/* Enqueue the kernel for execution. *\/\u003Cbr \/\u003E\u0026nbsp; clEnqueueNDRangeKernel(commandqueue, kernel, 1, NULL, \u0026amp;global, NULL, 0, NULL, NULL);\u003Cbr \/\u003E\u0026nbsp; clFinish(commandqueue);\u003Cbr \/\u003E\u003Cbr \/\u003E\u0026nbsp; \/* Copy the results from Output buffer to Host(CPU) variable. *\/\u003Cbr \/\u003E\u0026nbsp; clEnqueueReadBuffer(commandqueue, outputbuffer, CL_TRUE, 0, sizeof(int) *arraysize, results, 0, NULL, NULL);\u003Cbr \/\u003E\u003Cbr \/\u003E\u0026nbsp; \/* Print the results. *\/\u003Cbr \/\u003E\u0026nbsp; printf(\"Addition of Two Arrays is as follows: \\n\");\u003Cbr \/\u003E\u0026nbsp; \u003Cbr \/\u003E\u0026nbsp; for(i=0;i\u0026lt;arraysize; i++)\u003Cbr \/\u003E\u0026nbsp;\u0026nbsp; {\u003Cbr \/\u003E\u0026nbsp;\u0026nbsp;\u0026nbsp; printf(\"%d\\n\",results[i]);\u003Cbr \/\u003E\u0026nbsp;\u0026nbsp; }\u003Cbr \/\u003E\u0026nbsp;\u0026nbsp; \u003Cbr \/\u003E\u0026nbsp;\/* Free OpenCL resources. *\/\u003Cbr \/\u003E\u0026nbsp; clReleaseMemObject(buffer1);\u003Cbr \/\u003E\u0026nbsp; clReleaseMemObject(buffer2);\u003Cbr \/\u003E\u0026nbsp; clReleaseMemObject(outputbuffer);\u003Cbr \/\u003E\u0026nbsp; clReleaseProgram(program);\u003Cbr \/\u003E\u0026nbsp; clReleaseKernel(kernel);\u003Cbr \/\u003E\u0026nbsp; clReleaseCommandQueue(commandqueue);\u003Cbr \/\u003E\u0026nbsp; clReleaseContext(context);\u003Cbr \/\u003E\u0026nbsp;\u0026nbsp;\u0026nbsp; \u003Cbr \/\u003E\u0026nbsp; return 0;\u003Cbr \/\u003E}\u003C\/span\u003E\u003C\/div\u003E\n\u003Cdiv\u003E\n\u003Cbr \/\u003E\n\u003Cspan style=\"font-size: large;\"\u003E\u003Cb\u003EOutput:\u003C\/b\u003E\u003C\/span\u003E\u003Cbr \/\u003E\n\u003Cspan style=\"font-size: large;\"\u003E\n\n\u003C\/span\u003E\u003C\/div\u003E\n\u003Cdiv style=\"background-color: lightgreen;\"\u003E\n\u003Cspan style=\"font-size: large;\"\u003E\u0026gt;\u0026gt;\u0026gt; gcc openclprogram.c -I \/usr\/local\/cuda\/include\/ -L \/usr\/local\/cuda\/lib64\/ -lOpenCL\u003Cbr \/\u003E\u0026gt;\u0026gt;\u0026gt; .\/a.out\u003Cbr \/\u003EEnter the size of arrays\u003Cbr \/\u003E5\u003Cbr \/\u003EEnter 5 elements of First Array\u003Cbr \/\u003E4 2 7 3 8\u003Cbr \/\u003EEnter 5 elements of Second Array\u003Cbr \/\u003E9 10 22 3 6\u003Cbr \/\u003EAddition of Two Arrays is as follows: \u003Cbr \/\u003E13\u003Cbr \/\u003E12\u003Cbr \/\u003E29\u003Cbr \/\u003E6\u003Cbr \/\u003E14\u003C\/span\u003E\u003Cbr \/\u003E\n\u003Cbr \/\u003E\u003C\/div\u003E\n\u003Cbr \/\u003E\n\u003Cbr \/\u003E\n\u003Cbr \/\u003E\n\u003Cbr \/\u003E\n\u003Cspan style=\"font-size: large;\"\u003E\u003Cbr \/\u003E\u003C\/span\u003E\n\u003Cspan style=\"font-size: large;\"\u003E\u003Cbr \/\u003E\u003C\/span\u003E\u003C\/div\u003E\n"},"link":[{"rel":"replies","type":"application/atom+xml","href":"https:\/\/www.comrevo.com\/feeds\/455554984900573235\/comments\/default","title":"Post Comments"},{"rel":"replies","type":"text/html","href":"https:\/\/www.comrevo.com\/2017\/03\/opencl-program-for-array-addition.html#comment-form","title":"0 Comments"},{"rel":"edit","type":"application/atom+xml","href":"https:\/\/www.blogger.com\/feeds\/913600556879440043\/posts\/default\/455554984900573235"},{"rel":"self","type":"application/atom+xml","href":"https:\/\/www.blogger.com\/feeds\/913600556879440043\/posts\/default\/455554984900573235"},{"rel":"alternate","type":"text/html","href":"https:\/\/www.comrevo.com\/2017\/03\/opencl-program-for-array-addition.html","title":"OpenCL Program for Vector \/ Array Addition"}],"author":[{"name":{"$t":"Parag Jambhulkar"},"uri":{"$t":"http:\/\/www.blogger.com\/profile\/13991750622483538113"},"email":{"$t":"noreply@blogger.com"},"gd$image":{"rel":"http://schemas.google.com/g/2005#thumbnail","width":"16","height":"16","src":"https:\/\/img1.blogblog.com\/img\/b16-rounded.gif"}}],"thr$total":{"$t":"0"}}]}});