First attempt at GPU weaving

Spent sometime writing kernel code. The primary task at hand was to convert the partition list from the doubly linked list representation. I’ve attempted to rewrite this as an array. The code is obviously untested at the moment. I haven’t even checked for compile errors as certain functions haven’t been defined. Basically, I assumed some […]

Partition size

While writing weaving kernel code I realized that list of partitions actually grows dynamically, so does list of unique segments in pt_seglist (went through my proposal just now, and this is in fact mentioned there). I took a piece of paper and doodled around a bit. Turns out 2*(number of segs) could be an upper […]

A quick one today. As I mentioned yesterday, I started work on the GPU boolean weaving. First thing I started was the kernel code for weaving. A number of sanity checks and print statements needed to be removed. I stopped at the point of creating a function to add new partition. At this point, it […]

Start Parallel Weave

Well there’s not much else I can do, to successfully call ANSI C boolean functions. Still stumped about the fact that boolean evaluation doesn’t work as expected. So for now, I’ll go ahead and start implementing boolweave in OpenCL. I’ll define the partition structure on the GPU. Memory allocation for this is something I need […]

Yup, it was definitely the parallel processing that resulted in the noise. I was told that -o option no longer disabled parallel processing. What I was supposed to do instead was use -P1 to tell rt to use just 1 processor. Anyway, that generated all the required pgm files. Inspecting them provided further proof to […]

PGM Files

Tried another approach to figure out what’s wrong. We decided to generate PGM P2 files for both CPU and GPU segments (and partitions). PGM or Portable GreyMap file was introduced in the¬†Netpbm¬†project and is useful to compare sata pixel by pixel. Number of segments/partitions per pixel can be compared. The results were rather surprising. The […]


Vasco suggested a few tiny changes and I implemented them. But that didn’t change things much. I thought I figured out what the issue was. Currently we copy the soltab corresponding to the first segment in the partition’s pt_seglist field. Here’s the code – for (BU_PTBL_FOR(segpp, (struct seg **), &cpu_part->pt_seglist)) if ((*segpp)->seg_stp == stp) { […]