From ecacd3d37e38ec8e3281c6ab9dcc7839bde1ae3f Mon Sep 17 00:00:00 2001 From: Advait Tahilyani Date: Fri, 30 May 2025 14:44:50 -0500 Subject: [PATCH 01/15] Rudimentary steps --- charm4py/charmlib/charmlib_cython.pyx | 22 +++-- charm4py/liveviz.py | 117 ++++++++++++++++++++++++++ 2 files changed, 131 insertions(+), 8 deletions(-) create mode 100644 charm4py/liveviz.py diff --git a/charm4py/charmlib/charmlib_cython.pyx b/charm4py/charmlib/charmlib_cython.pyx index d4d16b6..c6726af 100644 --- a/charm4py/charmlib/charmlib_cython.pyx +++ b/charm4py/charmlib/charmlib_cython.pyx @@ -350,9 +350,17 @@ cdef void recvRemoteMessage(void *msg) noexcept: # turn char arrays into strings handler_name = incomingMsgPtr.handler_name[:handler_length].decode('utf-8') - data = incomingMsgPtr.data[:data_length].decode('utf-8') - - charm.callHandler(handler_name, data) + data_bytes = incomingMsgPtr.data[:data_length] + if handler_name.startswith("lv"): + # For LiveViz handlers, pass binary data directly + charm.callHandler(handler_name, data_bytes) + else: + # For all other handlers that expect text, decode as UTF-8 + try: + data = data_bytes.decode('utf-8') + charm.callHandler(handler_name, data) + except UnicodeDecodeError: + charm.callHandler(handler_name, data_bytes) class CharmLib(object): @@ -909,11 +917,9 @@ class CharmLib(object): def isRemoteRequest(self): return bool(CcsIsRemoteRequest()) - def CcsSendReply(self, str message): - cdef bytes message_bytes = message.encode("utf-8") - cdef const char* replyData = message_bytes - - cdef int replyLen = len(message_bytes) + def CcsSendReply(self, bytes message): + cdef const char* replyData = message + cdef int replyLen = len(message) CcsSendReply(replyLen, replyData) def hapiAddCudaCallback(self, stream, future): diff --git a/charm4py/liveviz.py b/charm4py/liveviz.py new file mode 100644 index 0000000..fedb69e --- /dev/null +++ b/charm4py/liveviz.py @@ -0,0 +1,117 @@ +from .charm import charm, Array +from dataclasses import dataclass, field +import struct + +@dataclass +class Config: + version: int = 1 + isColor: bool = True + isPush: bool = True + is3d: bool = False + min: tuple = field(default_factory=lambda: (0.0, 0.0, 0.0)) + max: tuple = field(default_factory=lambda: (1.0, 1.0, 1.0)) + + def to_binary(self): + # Format binary data compatible with Java's DataInputStream + # Format: int, int, int, int, [double, double, double, double, double, double] + binary_data = struct.pack(">iiii", + self.version, + 1 if self.isColor else 0, + 1 if self.isPush else 0, + 1 if self.is3d else 0) + if self.is3d: + binary_data += struct.pack(">dddddd", + self.min[0], self.min[1], self.min[2], + self.max[0], self.max[1], self.max[2]) + return binary_data + +class Vector3d: + def __init__(self, x=0.0, y=0.0, z=0.0): + self.x = x + self.y = y + self.z = z + + @classmethod + def from_bytes(cls, data, offset=0): + # Read 3 doubles from the data starting at offset + x, y, z = struct.unpack_from(">ddd", data, offset) + return cls(x, y, z), offset + 24 # 24 = 3 * 8 bytes (double) + +class ImageRequest: + def __init__(self, version, request_type, width, height, + x=None, y=None, z=None, o=None, minZ=0.0, maxZ=0.0): + self.version = version + self.request_type = request_type + self.width = width + self.height = height + self.x = x + self.y = y + self.z = z + self.o = o + self.minZ = minZ + self.maxZ = maxZ + + @classmethod + def from_bytes(cls, data): + if len(data) < 16: # At least 4 ints + raise ValueError("Not enough data to decode ImageRequest") + + # Unpack the fixed fields + version, request_type, width, height = struct.unpack_from(">iiii", data, 0) + + # If there's more data, we have the optional fields + if len(data) > 16: + offset = 16 + x, offset = Vector3d.from_bytes(data, offset) + y, offset = Vector3d.from_bytes(data, offset) + z, offset = Vector3d.from_bytes(data, offset) + o, offset = Vector3d.from_bytes(data, offset) + minZ, maxZ = struct.unpack_from(">dd", data, offset) + + return cls(version, request_type, width, height, x, y, z, o, minZ, maxZ) + else: + return cls(version, request_type, width, height) + +class ByteImage: + def __init__(self, data, width, height, is_color=True): + """ + Initialize a byte image + + Args: + data (bytes): Raw image data as bytes + width (int): Image width in pixels + height (int): Image height in pixels + is_color (bool): Whether the image is in color (True) or grayscale (False) + """ + self.data = data + self.width = width + self.height = height + self.is_color = is_color + + def to_binary(self): + # Format: width (int), height (int), isColor (int), followed by raw bytes + header = struct.pack(">iii", + self.width, + self.height, + 1 if self.is_color else 0) + return header + self.data + +class LiveViz: + def __init__(self): + self.cfg = None + self.arr = None + self.callback = None + + def config_handler(self, msg): + charm.CcsSendReply(self.cfg.to_binary()) + + def image_handler(self, msg): + request = ImageRequest.from_bytes(msg) + self.callback(request) + + def init(self, cfg, arr, cb): + self.cfg = cfg + self.arr = arr + self.callback = cb + charm.CcsRegisterHandler("lvConfig", self.config_handler) + charm.CcsRegisterHandler("lvImage", self.image_handler) \ No newline at end of file From 25716cbbd8570a3e067bf7cc31b764efc6b7aaf4 Mon Sep 17 00:00:00 2001 From: Advait Tahilyani Date: Mon, 2 Jun 2025 16:24:08 -0500 Subject: [PATCH 02/15] MVP --- charm4py/charm.py | 6 + charm4py/charmlib/ccharm.pxd | 5 +- charm4py/charmlib/charmlib_cython.pyx | 11 + charm4py/liveviz.py | 306 ++++++++++++++++++-------- examples/ccs/ccs_server.py | 18 +- 5 files changed, 245 insertions(+), 101 deletions(-) diff --git a/charm4py/charm.py b/charm4py/charm.py index 46ae416..c343eb6 100644 --- a/charm4py/charm.py +++ b/charm4py/charm.py @@ -1110,6 +1110,12 @@ def CcsIsRemoteRequest(self): def CcsSendReply(self, message): self.lib.CcsSendReply(message) + def CcsDelayReply(self): + return self.lib.CcsDelayReply() + + def CcsSendDelayedReply(self, d, message): + self.lib.CcsSendDelayedReply(d, message) + def callHandler(self, handlername, data): if handlername in self.ccs_methods: self.ccs_methods[handlername](data) diff --git a/charm4py/charmlib/ccharm.pxd b/charm4py/charmlib/ccharm.pxd index c21a0d3..ab559e2 100644 --- a/charm4py/charmlib/ccharm.pxd +++ b/charm4py/charmlib/ccharm.pxd @@ -105,10 +105,13 @@ cdef extern from "ccs-server.h": ChMessageInt_t len cdef extern from "conv-ccs.h": + ctypedef struct CcsDelayedReply: + CcsImplHeader *hdr; void CcsRegisterHandlerExt(const char *ccs_handlername, void *fn); int CcsIsRemoteRequest(); void CcsSendReply(int replyLen, const void *replyData); - + void CcsSendDelayedReply(CcsDelayedReply d,int replyLen, const void *replyData) + CcsDelayedReply CcsDelayReply() cdef extern from "spanningTree.h": void getPETopoTreeEdges(int pe, int rootPE, int *pes, int numpes, unsigned int bfactor, diff --git a/charm4py/charmlib/charmlib_cython.pyx b/charm4py/charmlib/charmlib_cython.pyx index c6726af..74d9317 100644 --- a/charm4py/charmlib/charmlib_cython.pyx +++ b/charm4py/charmlib/charmlib_cython.pyx @@ -922,6 +922,17 @@ class CharmLib(object): cdef int replyLen = len(message) CcsSendReply(replyLen, replyData) + def CcsDelayReply(self): + cdef CcsDelayedReply* token = malloc(sizeof(CcsDelayedReply)) + token[0] = CcsDelayReply() + return token + + def CcsSendDelayedReply(self, uintptr_t p, bytes msg): + cdef const char* replyData = msg + cdef CcsDelayedReply* token = p + CcsSendDelayedReply(token[0], len(msg), replyData) + free(token) + def hapiAddCudaCallback(self, stream, future): if not HAVE_CUDA_BUILD: raise Charm4PyError("HAPI usage not allowed: Charm++ was not built with CUDA support") diff --git a/charm4py/liveviz.py b/charm4py/liveviz.py index fedb69e..37aef99 100644 --- a/charm4py/liveviz.py +++ b/charm4py/liveviz.py @@ -1,117 +1,239 @@ -from .charm import charm, Array +from .charm import charm, Chare, Group +from .entry_method import coro from dataclasses import dataclass, field import struct +Reducer = charm.reducers + +group = None @dataclass class Config: - version: int = 1 - isColor: bool = True - isPush: bool = True - is3d: bool = False - min: tuple = field(default_factory=lambda: (0.0, 0.0, 0.0)) - max: tuple = field(default_factory=lambda: (1.0, 1.0, 1.0)) - - def to_binary(self): - # Format binary data compatible with Java's DataInputStream - # Format: int, int, int, int, [double, double, double, double, double, double] - binary_data = struct.pack(">iiii", - self.version, - 1 if self.isColor else 0, - 1 if self.isPush else 0, - 1 if self.is3d else 0) - if self.is3d: - binary_data += struct.pack(">dddddd", - self.min[0], self.min[1], self.min[2], - self.max[0], self.max[1], self.max[2]) - return binary_data + version: int = 1 + isColor: bool = True + isPush: bool = True + is3d: bool = False + min: tuple = field(default_factory=lambda: (0.0, 0.0, 0.0)) + max: tuple = field(default_factory=lambda: (1.0, 1.0, 1.0)) + + def to_binary(self): + # Format binary data compatible with Java's DataInputStream + # Format: int, int, int, int, [double, double, double, double, double, double] + binary_data = struct.pack(">iiii", + self.version, + 1 if self.isColor else 0, + 1 if self.isPush else 0, + 1 if self.is3d else 0) + if self.is3d: + binary_data += struct.pack(">dddddd", + self.min[0], self.min[1], self.min[2], + self.max[0], self.max[1], self.max[2]) + return binary_data class Vector3d: - def __init__(self, x=0.0, y=0.0, z=0.0): - self.x = x - self.y = y - self.z = z - - @classmethod - def from_bytes(cls, data, offset=0): - # Read 3 doubles from the data starting at offset - x, y, z = struct.unpack_from(">ddd", data, offset) - return cls(x, y, z), offset + 24 # 24 = 3 * 8 bytes (double) - + def __init__(self, x=0.0, y=0.0, z=0.0): + self.x = x + self.y = y + self.z = z + + @classmethod + def from_bytes(cls, data, offset=0): + # Read 3 doubles from the data starting at offset + x, y, z = struct.unpack_from(">ddd", data, offset) + return cls(x, y, z), offset + 24 # 24 = 3 * 8 bytes (double) + class ImageRequest: - def __init__(self, version, request_type, width, height, - x=None, y=None, z=None, o=None, minZ=0.0, maxZ=0.0): - self.version = version - self.request_type = request_type - self.width = width - self.height = height - self.x = x - self.y = y - self.z = z - self.o = o - self.minZ = minZ - self.maxZ = maxZ - - @classmethod - def from_bytes(cls, data): - if len(data) < 16: # At least 4 ints - raise ValueError("Not enough data to decode ImageRequest") - - # Unpack the fixed fields - version, request_type, width, height = struct.unpack_from(">iiii", data, 0) - - # If there's more data, we have the optional fields - if len(data) > 16: - offset = 16 - x, offset = Vector3d.from_bytes(data, offset) - y, offset = Vector3d.from_bytes(data, offset) - z, offset = Vector3d.from_bytes(data, offset) - o, offset = Vector3d.from_bytes(data, offset) - minZ, maxZ = struct.unpack_from(">dd", data, offset) - - return cls(version, request_type, width, height, x, y, z, o, minZ, maxZ) - else: - return cls(version, request_type, width, height) - + def __init__(self, version, request_type, width, height, + x=None, y=None, z=None, o=None, minZ=0.0, maxZ=0.0): + self.version = version + self.request_type = request_type + self.width = width + self.height = height + self.x = x + self.y = y + self.z = z + self.o = o + self.minZ = minZ + self.maxZ = maxZ + + @classmethod + def from_bytes(cls, data): + if len(data) < 16: # At least 4 ints + raise ValueError("Not enough data to decode ImageRequest") + + # Unpack the fixed fields + version, request_type, width, height = struct.unpack_from(">iiii", data, 0) + + # If there's more data, we have the optional fields + if len(data) > 16: + offset = 16 + x, offset = Vector3d.from_bytes(data, offset) + y, offset = Vector3d.from_bytes(data, offset) + z, offset = Vector3d.from_bytes(data, offset) + o, offset = Vector3d.from_bytes(data, offset) + minZ, maxZ = struct.unpack_from(">dd", data, offset) + + return cls(version, request_type, width, height, x, y, z, o, minZ, maxZ) + else: + return cls(version, request_type, width, height) + +class LiveVizGroup(Chare): + def __init__(self, cb): + self.callback = cb + if self.thisIndex == 0: + charm.CcsRegisterHandler("lvImage", self.image_handler) + def ping(self): + print("ping") + + @coro + def send(self, result): + image = ByteImage.from_contributions(result, LiveViz.cfg.isColor) + output = ByteImage.with_image_in_corner(image, self.wid, self.ht) + charm.CcsSendDelayedReply(self.reply, output.to_binary()) + + def image_handler(self, msg): + request = ImageRequest.from_bytes(msg) + self.ht = request.height + self.wid = request.width + self.callback(request) + self.reply = charm.CcsDelayReply() + class ByteImage: - def __init__(self, data, width, height, is_color=True): + def __init__(self, data=None, width=0, height=0, is_color=True): """ Initialize a byte image Args: - data (bytes): Raw image data as bytes + data (bytes, optional): Raw image data as bytes, or None to create empty image width (int): Image width in pixels height (int): Image height in pixels is_color (bool): Whether the image is in color (True) or grayscale (False) """ - self.data = data self.width = width self.height = height self.is_color = is_color + self.bytes_per_pixel = 3 if is_color else 1 + + if data is not None: + self.data = data + else: + # Create empty image of appropriate size + self.data = bytes(width * height * self.bytes_per_pixel) + + @classmethod + def from_contributions(cls, contribs, is_color=True): + """ + Create a ByteImage from multiple contributions, positioning each + contribution at the right location. + + Args: + contribs (list): List of tuples with format + (bytes_data, startx, starty, local_height, local_width, total_height, total_width) + is_color (bool): Whether the image is in color + + Returns: + ByteImage: A composite image with all contributions in the right positions + """ + # Check if we have any contributions + if not contribs: + return cls(None, 0, 0, is_color) + + # Get total width and height from the first contribution + _, _, _, _, _, total_height, total_width = contribs[0] + bytes_per_pixel = 3 if is_color else 1 + + # Create an empty buffer to hold the result + buffer = bytearray(total_width * total_height * bytes_per_pixel) + + # Fill the buffer with data from each contribution + for data, startx, starty, local_height, local_width, _, _ in contribs: + # Calculate starting position in the buffer + for y in range(local_height): + for x in range(local_width): + # Calculate source and destination positions + src_pos = (y * local_width + x) * bytes_per_pixel + dst_pos = ((starty + y) * total_width + (startx + x)) * bytes_per_pixel + + # Copy pixel data if available + if src_pos + bytes_per_pixel <= len(data): + buffer[dst_pos:dst_pos + bytes_per_pixel] = data[src_pos:src_pos + bytes_per_pixel] + + return cls(bytes(buffer), total_width, total_height, is_color) def to_binary(self): + """ + Convert to binary format for transmission + + Returns: + bytes: Binary representation of the image + """ # Format: width (int), height (int), isColor (int), followed by raw bytes - header = struct.pack(">iii", - self.width, - self.height, - 1 if self.is_color else 0) - return header + self.data + return self.data + + @classmethod + def with_image_in_corner(cls, src_image, new_width, new_height): + """ + Create a new image with specified dimensions and place the source image + in the top left corner. + + Args: + src_image (ByteImage): Source image to place in the corner + new_width (int): Width of the new image + new_height (int): Height of the new image + + Returns: + ByteImage: A new image with the source image in the top left corner + """ + # Create a new ByteImage with the specified dimensions + dest_image = cls(None, new_width, new_height, src_image.is_color) + bytes_per_pixel = dest_image.bytes_per_pixel + + # Create a mutable buffer for our data + buffer = bytearray(new_width * new_height * bytes_per_pixel) + + # Calculate dimensions to copy + copy_width = min(new_width, src_image.width) + copy_height = min(new_height, src_image.height) + + # Copy pixel by pixel from source to destination + for y in range(copy_height): + for x in range(copy_width): + # Calculate source position + src_pos = (y * src_image.width + x) * bytes_per_pixel + + # Calculate destination position + dst_pos = (y * new_width + x) * bytes_per_pixel + + # Copy pixel data if available + if src_pos + bytes_per_pixel <= len(src_image.data): + buffer[dst_pos:dst_pos + bytes_per_pixel] += src_image.data[src_pos:src_pos + bytes_per_pixel] + + # Create the final image + return cls(bytes(buffer), new_width, new_height, src_image.is_color) class LiveViz: - def __init__(self): - self.cfg = None - self.arr = None - self.callback = None - - def config_handler(self, msg): - charm.CcsSendReply(self.cfg.to_binary()) - - def image_handler(self, msg): - request = ImageRequest.from_bytes(msg) - self.callback(request) - - def init(self, cfg, arr, cb): - self.cfg = cfg - self.arr = arr - self.callback = cb - charm.CcsRegisterHandler("lvConfig", self.config_handler) - charm.CcsRegisterHandler("lvImage", self.image_handler) \ No newline at end of file + # Class variables instead of instance variables + cfg = None + arr = None + callback = None + wid = None + ht = None + + @classmethod + def config_handler(cls, msg): + charm.CcsSendReply(cls.cfg.to_binary()) + + @classmethod + def deposit(cls, buffer, elem, x, y, ht, wid, g_ht, g_wid): + cls.ht = ht + cls.wid = wid + elem.reduce(group[0].send, data=(buffer,x,y,ht,wid,g_ht,g_wid), reducer=Reducer.gather) + + @classmethod + def init(cls, cfg, arr, cb): + global group + cls.cfg = cfg + cls.arr = arr + cls.callback = cb + grp = Group(LiveVizGroup, args=[cb]) + charm.thisProxy.updateGlobals({'group': grp}, awaitable=True, module_name='charm4py.liveviz').get() + charm.CcsRegisterHandler("lvConfig", cls.config_handler) diff --git a/examples/ccs/ccs_server.py b/examples/ccs/ccs_server.py index 7144c54..4092d2b 100644 --- a/examples/ccs/ccs_server.py +++ b/examples/ccs/ccs_server.py @@ -1,4 +1,4 @@ -from charm4py import charm, Chare, Array, Future, Reducer, Group +from charm4py import charm, Chare, Array, Future, Reducer, Group, liveviz, coro def handler(msg): print("CCS Ping handler called on " + str(charm.myPe())) @@ -10,19 +10,21 @@ def handler(msg): class RegisterPerChare(Chare): - def register(self, return_future, handler): - charm.CcsRegisterHandler("ping2", handler) - charm.CcsRegisterHandler("ping", handler) - self.reduce(return_future, Reducer.nop) + def register(self, request): + data = bytearray(25 * 25 * 3) + for i in range(25*25): + data[i*3 + self.thisIndex%3] = 200 # Red + liveviz.LiveViz.deposit(data, self, self.thisIndex*25, 0, 25, 25, 25, 100) + def main(args): # No need to initialize converse, because charm.start does this # just register the handler reg_wait = Future() registers = Group(RegisterPerChare) - registers.register(reg_wait, handler) - reg_wait.get() + config = liveviz.Config() + liveviz.LiveViz.init(config, registers, registers.register) print("CCS Handlers registered . Waiting for net requests...") -charm.start(main) \ No newline at end of file +charm.start(main, modules=['charm4py.liveviz']) \ No newline at end of file From b885bd0ef25ed8be62c3587e9d7809bfec709cb0 Mon Sep 17 00:00:00 2001 From: Advait Tahilyani Date: Mon, 2 Jun 2025 17:12:07 -0500 Subject: [PATCH 03/15] Polished code --- charm4py/liveviz.py | 282 +++++++++++++++++++------------------------- 1 file changed, 124 insertions(+), 158 deletions(-) diff --git a/charm4py/liveviz.py b/charm4py/liveviz.py index 37aef99..b5173f6 100644 --- a/charm4py/liveviz.py +++ b/charm4py/liveviz.py @@ -6,6 +6,11 @@ group = None +def viz_gather(contribs): + return contribs + +Reducer.addReducer(viz_gather) + @dataclass class Config: version: int = 1 @@ -16,17 +21,16 @@ class Config: max: tuple = field(default_factory=lambda: (1.0, 1.0, 1.0)) def to_binary(self): - # Format binary data compatible with Java's DataInputStream # Format: int, int, int, int, [double, double, double, double, double, double] binary_data = struct.pack(">iiii", - self.version, - 1 if self.isColor else 0, - 1 if self.isPush else 0, - 1 if self.is3d else 0) + self.version, + 1 if self.isColor else 0, + 1 if self.isPush else 0, + 1 if self.is3d else 0) if self.is3d: binary_data += struct.pack(">dddddd", - self.min[0], self.min[1], self.min[2], - self.max[0], self.max[1], self.max[2]) + self.min[0], self.min[1], self.min[2], + self.max[0], self.max[1], self.max[2]) return binary_data class Vector3d: @@ -43,7 +47,7 @@ def from_bytes(cls, data, offset=0): class ImageRequest: def __init__(self, version, request_type, width, height, - x=None, y=None, z=None, o=None, minZ=0.0, maxZ=0.0): + x=None, y=None, z=None, o=None, minZ=0.0, maxZ=0.0): self.version = version self.request_type = request_type self.width = width @@ -60,7 +64,6 @@ def from_bytes(cls, data): if len(data) < 16: # At least 4 ints raise ValueError("Not enough data to decode ImageRequest") - # Unpack the fixed fields version, request_type, width, height = struct.unpack_from(">iiii", data, 0) # If there's more data, we have the optional fields @@ -77,163 +80,126 @@ def from_bytes(cls, data): return cls(version, request_type, width, height) class LiveVizGroup(Chare): - def __init__(self, cb): - self.callback = cb - if self.thisIndex == 0: - charm.CcsRegisterHandler("lvImage", self.image_handler) - def ping(self): - print("ping") + + def __init__(self, cb): + self.callback = cb + charm.CcsRegisterHandler("lvImage", self.image_handler) - @coro - def send(self, result): - image = ByteImage.from_contributions(result, LiveViz.cfg.isColor) - output = ByteImage.with_image_in_corner(image, self.wid, self.ht) - charm.CcsSendDelayedReply(self.reply, output.to_binary()) + def send(self, result): + image = ByteImage.from_contributions(result, LiveViz.cfg.isColor) + output = ByteImage.with_image_in_corner(image, self.wid, self.ht) + charm.CcsSendDelayedReply(self.reply, output.to_binary()) - def image_handler(self, msg): - request = ImageRequest.from_bytes(msg) - self.ht = request.height - self.wid = request.width - self.callback(request) - self.reply = charm.CcsDelayReply() - + def image_handler(self, msg): + request = ImageRequest.from_bytes(msg) + self.ht = request.height + self.wid = request.width + self.callback(request) + self.reply = charm.CcsDelayReply() + class ByteImage: - def __init__(self, data=None, width=0, height=0, is_color=True): - """ - Initialize a byte image - - Args: - data (bytes, optional): Raw image data as bytes, or None to create empty image - width (int): Image width in pixels - height (int): Image height in pixels - is_color (bool): Whether the image is in color (True) or grayscale (False) - """ - self.width = width - self.height = height - self.is_color = is_color - self.bytes_per_pixel = 3 if is_color else 1 - - if data is not None: - self.data = data - else: - # Create empty image of appropriate size - self.data = bytes(width * height * self.bytes_per_pixel) + def __init__(self, data=None, width=0, height=0, is_color=True): + """ + Initialize a byte image - @classmethod - def from_contributions(cls, contribs, is_color=True): - """ - Create a ByteImage from multiple contributions, positioning each - contribution at the right location. - - Args: - contribs (list): List of tuples with format - (bytes_data, startx, starty, local_height, local_width, total_height, total_width) - is_color (bool): Whether the image is in color - - Returns: - ByteImage: A composite image with all contributions in the right positions - """ - # Check if we have any contributions - if not contribs: - return cls(None, 0, 0, is_color) - - # Get total width and height from the first contribution - _, _, _, _, _, total_height, total_width = contribs[0] - bytes_per_pixel = 3 if is_color else 1 - - # Create an empty buffer to hold the result - buffer = bytearray(total_width * total_height * bytes_per_pixel) - - # Fill the buffer with data from each contribution - for data, startx, starty, local_height, local_width, _, _ in contribs: - # Calculate starting position in the buffer - for y in range(local_height): - for x in range(local_width): - # Calculate source and destination positions - src_pos = (y * local_width + x) * bytes_per_pixel - dst_pos = ((starty + y) * total_width + (startx + x)) * bytes_per_pixel - - # Copy pixel data if available - if src_pos + bytes_per_pixel <= len(data): - buffer[dst_pos:dst_pos + bytes_per_pixel] = data[src_pos:src_pos + bytes_per_pixel] - - return cls(bytes(buffer), total_width, total_height, is_color) + Args: + data (bytes, optional): Raw image data as bytes, or None to create empty image + width (int): Image width in pixels + height (int): Image height in pixels + is_color (bool): Whether the image is in color (True) or grayscale (False) + """ + self.width = width + self.height = height + self.is_color = is_color + self.bytes_per_pixel = 3 if is_color else 1 - def to_binary(self): - """ - Convert to binary format for transmission - - Returns: - bytes: Binary representation of the image - """ - # Format: width (int), height (int), isColor (int), followed by raw bytes - return self.data + if data is not None: + self.data = data + else: + self.data = bytes(width * height * self.bytes_per_pixel) + + @classmethod + def from_contributions(cls, contribs, is_color=True): + """ + Create a ByteImage from multiple contributions, positioning each + contribution at the right location. + + Args: + contribs (list): List of tuples with format + (bytes_data, startx, starty, local_height, local_width, total_height, total_width) + is_color (bool): Whether the image is in color + + Returns: + ByteImage: A composite image with all contributions in the right positions + """ + _, _, _, _, _, total_height, total_width = contribs[0] + bytes_per_pixel = 3 if is_color else 1 + + buffer = bytearray(total_width * total_height * bytes_per_pixel) + + for data, startx, starty, local_height, local_width, _, _ in contribs: + for y in range(local_height): + for x in range(local_width): + src_pos = (y * local_width + x) * bytes_per_pixel + dst_pos = ((starty + y) * total_width + (startx + x)) * bytes_per_pixel + + if src_pos + bytes_per_pixel <= len(data): + buffer[dst_pos:dst_pos + bytes_per_pixel] = data[src_pos:src_pos + bytes_per_pixel] + + return cls(bytes(buffer), total_width, total_height, is_color) + + def to_binary(self): + return self.data - @classmethod - def with_image_in_corner(cls, src_image, new_width, new_height): - """ - Create a new image with specified dimensions and place the source image - in the top left corner. - - Args: - src_image (ByteImage): Source image to place in the corner - new_width (int): Width of the new image - new_height (int): Height of the new image - - Returns: - ByteImage: A new image with the source image in the top left corner - """ - # Create a new ByteImage with the specified dimensions - dest_image = cls(None, new_width, new_height, src_image.is_color) - bytes_per_pixel = dest_image.bytes_per_pixel - - # Create a mutable buffer for our data - buffer = bytearray(new_width * new_height * bytes_per_pixel) + @classmethod + def with_image_in_corner(cls, src_image, new_width, new_height): + """ + Create a new image with specified dimensions and place the source image + in the top left corner. + + Args: + src_image (ByteImage): Source image to place in the corner + new_width (int): Width of the new image + new_height (int): Height of the new image - # Calculate dimensions to copy - copy_width = min(new_width, src_image.width) - copy_height = min(new_height, src_image.height) + Returns: + ByteImage: A new image with the source image in the top left corner + """ + dest_image = cls(None, new_width, new_height, src_image.is_color) + bytes_per_pixel = dest_image.bytes_per_pixel + + buffer = bytearray(new_width * new_height * bytes_per_pixel) + + # Calculate dimensions to copy + copy_width = min(new_width, src_image.width) + copy_height = min(new_height, src_image.height) + + for y in range(copy_height): + for x in range(copy_width): + src_pos = (y * src_image.width + x) * bytes_per_pixel - # Copy pixel by pixel from source to destination - for y in range(copy_height): - for x in range(copy_width): - # Calculate source position - src_pos = (y * src_image.width + x) * bytes_per_pixel - - # Calculate destination position - dst_pos = (y * new_width + x) * bytes_per_pixel - - # Copy pixel data if available - if src_pos + bytes_per_pixel <= len(src_image.data): - buffer[dst_pos:dst_pos + bytes_per_pixel] += src_image.data[src_pos:src_pos + bytes_per_pixel] + dst_pos = (y * new_width + x) * bytes_per_pixel - # Create the final image - return cls(bytes(buffer), new_width, new_height, src_image.is_color) + if src_pos + bytes_per_pixel <= len(src_image.data): + buffer[dst_pos:dst_pos + bytes_per_pixel] = src_image.data[src_pos:src_pos + bytes_per_pixel] + + return cls(bytes(buffer), new_width, new_height, src_image.is_color) class LiveViz: - # Class variables instead of instance variables - cfg = None - arr = None - callback = None - wid = None - ht = None - - @classmethod - def config_handler(cls, msg): - charm.CcsSendReply(cls.cfg.to_binary()) - - @classmethod - def deposit(cls, buffer, elem, x, y, ht, wid, g_ht, g_wid): - cls.ht = ht - cls.wid = wid - elem.reduce(group[0].send, data=(buffer,x,y,ht,wid,g_ht,g_wid), reducer=Reducer.gather) - - @classmethod - def init(cls, cfg, arr, cb): - global group - cls.cfg = cfg - cls.arr = arr - cls.callback = cb - grp = Group(LiveVizGroup, args=[cb]) - charm.thisProxy.updateGlobals({'group': grp}, awaitable=True, module_name='charm4py.liveviz').get() - charm.CcsRegisterHandler("lvConfig", cls.config_handler) + cfg = None + + @classmethod + def config_handler(cls, msg): + charm.CcsSendReply(cls.cfg.to_binary()) + + @classmethod + def deposit(cls, buffer, elem, x, y, ht, wid, g_ht, g_wid): + elem.reduce(group.send, data=(buffer,x,y,ht,wid,g_ht,g_wid), reducer=Reducer.viz_gather) + + @classmethod + def init(cls, cfg, arr, cb): + global group + cls.cfg = cfg + grp = Chare(LiveVizGroup, args=[cb], onPE=0) + charm.thisProxy.updateGlobals({'group': grp}, awaitable=True, module_name='charm4py.liveviz').get() + charm.CcsRegisterHandler("lvConfig", cls.config_handler) From c4611e43c77c8f974db949b0471243229ed3df3e Mon Sep 17 00:00:00 2001 From: Advait Tahilyani Date: Mon, 2 Jun 2025 17:38:31 -0500 Subject: [PATCH 04/15] Fixed Reduction --- charm4py/liveviz.py | 13 ++++++--- examples/ccs/ccs_server.py | 54 ++++++++++++++++++++++++-------------- 2 files changed, 44 insertions(+), 23 deletions(-) diff --git a/charm4py/liveviz.py b/charm4py/liveviz.py index b5173f6..379baa2 100644 --- a/charm4py/liveviz.py +++ b/charm4py/liveviz.py @@ -1,15 +1,20 @@ -from .charm import charm, Chare, Group -from .entry_method import coro +from .charm import charm, Chare from dataclasses import dataclass, field import struct +from itertools import chain Reducer = charm.reducers group = None def viz_gather(contribs): - return contribs + # Simply flatten without any sorting + return list(chain(*contribs)) -Reducer.addReducer(viz_gather) +def viz_gather_preprocess(data, contributor): + # Don't add index information + return [data] + +Reducer.addReducer(viz_gather, pre=viz_gather_preprocess) @dataclass class Config: diff --git a/examples/ccs/ccs_server.py b/examples/ccs/ccs_server.py index 4092d2b..5060158 100644 --- a/examples/ccs/ccs_server.py +++ b/examples/ccs/ccs_server.py @@ -1,30 +1,46 @@ from charm4py import charm, Chare, Array, Future, Reducer, Group, liveviz, coro +import random -def handler(msg): - print("CCS Ping handler called on " + str(charm.myPe())) - - msg = msg.rstrip('\x00') #removes null characters from the end - answer = "Hello to sender " + str(msg) + " from PE " + str(charm.myPe()) + ".\n" - # send the answer back to the client - charm.CcsSendReply(answer) - -class RegisterPerChare(Chare): - - def register(self, request): - data = bytearray(25 * 25 * 3) - for i in range(25*25): - data[i*3 + self.thisIndex%3] = 200 # Red - liveviz.LiveViz.deposit(data, self, self.thisIndex*25, 0, 25, 25, 25, 100) - +class Unit(Chare): + + def __init__(self): + # Just initialize an empty list - particles will be generated on request + self.colors = [(200, 0, 0), (0, 200, 0), (0, 0, 200)] + + def reqImg(self, request): + # Generate 300 new random particles each time + self.particles = [] + + for _ in range(300): + # Random position within 50x50 box + x = random.randint(0, 49) + y = random.randint(0, 49) + + # Random color from the three options + color = random.choice(self.colors) + + # Store particle as (position_x, position_y, color_tuple) + self.particles.append((x, y, color)) + + # Create and fill the image data + data = bytearray(50 * 50 * 3) + + for x, y, (r, g, b) in self.particles: + # Check if particle is in this chare's section + pixel_index = (y * 50 + x) * 3 + data[pixel_index] = r + data[pixel_index + 1] = g + data[pixel_index + 2] = b + + liveviz.LiveViz.deposit(data, self, self.thisIndex[0]*50, self.thisIndex[1]*50, 50, 50, 800, 800) def main(args): # No need to initialize converse, because charm.start does this # just register the handler reg_wait = Future() - registers = Group(RegisterPerChare) + units = Array(Unit, dims=(16,16)) config = liveviz.Config() - liveviz.LiveViz.init(config, registers, registers.register) + liveviz.LiveViz.init(config, units, units.reqImg) print("CCS Handlers registered . Waiting for net requests...") - charm.start(main, modules=['charm4py.liveviz']) \ No newline at end of file From 67e3f6cd9c9338a6906caf60582c7b7f24f31d3e Mon Sep 17 00:00:00 2001 From: Advait Tahilyani Date: Mon, 2 Jun 2025 17:44:46 -0500 Subject: [PATCH 05/15] Clean up --- examples/ccs/ccs_server.py | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/examples/ccs/ccs_server.py b/examples/ccs/ccs_server.py index 5060158..af38f05 100644 --- a/examples/ccs/ccs_server.py +++ b/examples/ccs/ccs_server.py @@ -4,29 +4,22 @@ class Unit(Chare): def __init__(self): - # Just initialize an empty list - particles will be generated on request self.colors = [(200, 0, 0), (0, 200, 0), (0, 0, 200)] def reqImg(self, request): - # Generate 300 new random particles each time self.particles = [] for _ in range(300): - # Random position within 50x50 box x = random.randint(0, 49) y = random.randint(0, 49) - # Random color from the three options color = random.choice(self.colors) - # Store particle as (position_x, position_y, color_tuple) self.particles.append((x, y, color)) - # Create and fill the image data data = bytearray(50 * 50 * 3) for x, y, (r, g, b) in self.particles: - # Check if particle is in this chare's section pixel_index = (y * 50 + x) * 3 data[pixel_index] = r data[pixel_index + 1] = g @@ -35,9 +28,6 @@ def reqImg(self, request): liveviz.LiveViz.deposit(data, self, self.thisIndex[0]*50, self.thisIndex[1]*50, 50, 50, 800, 800) def main(args): - # No need to initialize converse, because charm.start does this - # just register the handler - reg_wait = Future() units = Array(Unit, dims=(16,16)) config = liveviz.Config() liveviz.LiveViz.init(config, units, units.reqImg) From c3715aea146a8f4f7310f5f07dee990ef65b02b4 Mon Sep 17 00:00:00 2001 From: Advait Tahilyani Date: Mon, 2 Jun 2025 17:45:18 -0500 Subject: [PATCH 06/15] More clean-up --- charm4py/liveviz.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/charm4py/liveviz.py b/charm4py/liveviz.py index 379baa2..a066ab7 100644 --- a/charm4py/liveviz.py +++ b/charm4py/liveviz.py @@ -7,11 +7,9 @@ group = None def viz_gather(contribs): - # Simply flatten without any sorting return list(chain(*contribs)) def viz_gather_preprocess(data, contributor): - # Don't add index information return [data] Reducer.addReducer(viz_gather, pre=viz_gather_preprocess) From 61f44cf7304b5292af4662b4ed0d221e0ec628b0 Mon Sep 17 00:00:00 2001 From: Zane Fink Date: Tue, 3 Jun 2025 11:39:22 -0500 Subject: [PATCH 07/15] register liveviz automatically --- charm4py/liveviz.py | 3 ++- examples/ccs/ccs_server.py | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/charm4py/liveviz.py b/charm4py/liveviz.py index a066ab7..e232393 100644 --- a/charm4py/liveviz.py +++ b/charm4py/liveviz.py @@ -1,4 +1,4 @@ -from .charm import charm, Chare +from .charm import charm, Chare, register from dataclasses import dataclass, field import struct from itertools import chain @@ -82,6 +82,7 @@ def from_bytes(cls, data): else: return cls(version, request_type, width, height) +@register class LiveVizGroup(Chare): def __init__(self, cb): diff --git a/examples/ccs/ccs_server.py b/examples/ccs/ccs_server.py index af38f05..4b7dc13 100644 --- a/examples/ccs/ccs_server.py +++ b/examples/ccs/ccs_server.py @@ -33,4 +33,4 @@ def main(args): liveviz.LiveViz.init(config, units, units.reqImg) print("CCS Handlers registered . Waiting for net requests...") -charm.start(main, modules=['charm4py.liveviz']) \ No newline at end of file +charm.start(main) From 4be6532b2a6093ae8d9674a1c5c854065931aa8f Mon Sep 17 00:00:00 2001 From: Advait Tahilyani Date: Tue, 3 Jun 2025 12:10:47 -0500 Subject: [PATCH 08/15] Poll Mode --- charm4py/liveviz.py | 39 +++++++++++++++++++++++++++--------- examples/ccs/ccs_server.py | 41 ++++++++++++++++++++------------------ 2 files changed, 52 insertions(+), 28 deletions(-) diff --git a/charm4py/liveviz.py b/charm4py/liveviz.py index a066ab7..bc737fa 100644 --- a/charm4py/liveviz.py +++ b/charm4py/liveviz.py @@ -1,5 +1,6 @@ from .charm import charm, Chare from dataclasses import dataclass, field +from collections import deque import struct from itertools import chain Reducer = charm.reducers @@ -84,21 +85,41 @@ def from_bytes(cls, data): class LiveVizGroup(Chare): - def __init__(self, cb): + def __init__(self, cb, poll): self.callback = cb + self.poll = poll charm.CcsRegisterHandler("lvImage", self.image_handler) + if poll: + self.requests = deque() + self.images = deque() def send(self, result): image = ByteImage.from_contributions(result, LiveViz.cfg.isColor) - output = ByteImage.with_image_in_corner(image, self.wid, self.ht) - charm.CcsSendDelayedReply(self.reply, output.to_binary()) + if self.poll: + if len(self.requests) > 0: + req, delayed = self.requests.popleft() + output = ByteImage.with_image_in_corner(image, req.width, req.height) + charm.CcsSendDelayedReply(delayed, output.to_binary()) + else: + print("sent") + self.images.append(image) + else: + output = ByteImage.with_image_in_corner(image, self.wid, self.ht) + charm.CcsSendDelayedReply(self.reply, output.to_binary()) def image_handler(self, msg): request = ImageRequest.from_bytes(msg) - self.ht = request.height - self.wid = request.width - self.callback(request) - self.reply = charm.CcsDelayReply() + if self.poll: + if len(self.images) > 0: + output = ByteImage.with_image_in_corner(self.images.popleft(), request.width, request.height) + charm.CcsSendReply(output.to_binary()) + else: + self.requests.append((request, charm.CcsDelayReply())) + else: + self.ht = request.height + self.wid = request.width + self.callback(request) + self.reply = charm.CcsDelayReply() class ByteImage: def __init__(self, data=None, width=0, height=0, is_color=True): @@ -200,9 +221,9 @@ def deposit(cls, buffer, elem, x, y, ht, wid, g_ht, g_wid): elem.reduce(group.send, data=(buffer,x,y,ht,wid,g_ht,g_wid), reducer=Reducer.viz_gather) @classmethod - def init(cls, cfg, arr, cb): + def init(cls, cfg, arr, cb, poll=False): global group cls.cfg = cfg - grp = Chare(LiveVizGroup, args=[cb], onPE=0) + grp = Chare(LiveVizGroup, args=[cb, poll], onPE=0) charm.thisProxy.updateGlobals({'group': grp}, awaitable=True, module_name='charm4py.liveviz').get() charm.CcsRegisterHandler("lvConfig", cls.config_handler) diff --git a/examples/ccs/ccs_server.py b/examples/ccs/ccs_server.py index af38f05..464e373 100644 --- a/examples/ccs/ccs_server.py +++ b/examples/ccs/ccs_server.py @@ -1,4 +1,5 @@ from charm4py import charm, Chare, Array, Future, Reducer, Group, liveviz, coro +import time import random class Unit(Chare): @@ -6,31 +7,33 @@ class Unit(Chare): def __init__(self): self.colors = [(200, 0, 0), (0, 200, 0), (0, 0, 200)] - def reqImg(self, request): - self.particles = [] - - for _ in range(300): - x = random.randint(0, 49) - y = random.randint(0, 49) + def reqImg(self): + for i in range(50): + self.particles = [] - color = random.choice(self.colors) + for _ in range(300): + x = random.randint(0, 49) + y = random.randint(0, 49) + + color = random.choice(self.colors) + + self.particles.append((x, y, color)) - self.particles.append((x, y, color)) - - data = bytearray(50 * 50 * 3) - - for x, y, (r, g, b) in self.particles: - pixel_index = (y * 50 + x) * 3 - data[pixel_index] = r - data[pixel_index + 1] = g - data[pixel_index + 2] = b - - liveviz.LiveViz.deposit(data, self, self.thisIndex[0]*50, self.thisIndex[1]*50, 50, 50, 800, 800) + data = bytearray(50 * 50 * 3) + + for x, y, (r, g, b) in self.particles: + pixel_index = (y * 50 + x) * 3 + data[pixel_index] = r + data[pixel_index + 1] = g + data[pixel_index + 2] = b + + liveviz.LiveViz.deposit(data, self, self.thisIndex[0]*50, self.thisIndex[1]*50, 50, 50, 800, 800) def main(args): units = Array(Unit, dims=(16,16)) config = liveviz.Config() - liveviz.LiveViz.init(config, units, units.reqImg) + liveviz.LiveViz.init(config, units, units.reqImg, poll=True) + units.reqImg() print("CCS Handlers registered . Waiting for net requests...") charm.start(main, modules=['charm4py.liveviz']) \ No newline at end of file From 149f75107575f4a852f164a4c00bb676c2685bfb Mon Sep 17 00:00:00 2001 From: Advait Tahilyani Date: Tue, 3 Jun 2025 14:26:11 -0500 Subject: [PATCH 09/15] Examples --- examples/ccs/ccs_server.py | 57 +++++++++++++------------------- examples/liveviz/liveviz.py | 36 ++++++++++++++++++++ examples/liveviz/liveviz_poll.py | 39 ++++++++++++++++++++++ 3 files changed, 98 insertions(+), 34 deletions(-) create mode 100644 examples/liveviz/liveviz.py create mode 100644 examples/liveviz/liveviz_poll.py diff --git a/examples/ccs/ccs_server.py b/examples/ccs/ccs_server.py index 19a8ae8..7144c54 100644 --- a/examples/ccs/ccs_server.py +++ b/examples/ccs/ccs_server.py @@ -1,39 +1,28 @@ -from charm4py import charm, Chare, Array, Future, Reducer, Group, liveviz, coro -import time -import random +from charm4py import charm, Chare, Array, Future, Reducer, Group -class Unit(Chare): - - def __init__(self): - self.colors = [(200, 0, 0), (0, 200, 0), (0, 0, 200)] - - def reqImg(self): - for i in range(50): - self.particles = [] - - for _ in range(300): - x = random.randint(0, 49) - y = random.randint(0, 49) - - color = random.choice(self.colors) - - self.particles.append((x, y, color)) - - data = bytearray(50 * 50 * 3) - - for x, y, (r, g, b) in self.particles: - pixel_index = (y * 50 + x) * 3 - data[pixel_index] = r - data[pixel_index + 1] = g - data[pixel_index + 2] = b - - liveviz.LiveViz.deposit(data, self, self.thisIndex[0]*50, self.thisIndex[1]*50, 50, 50, 800, 800) +def handler(msg): + print("CCS Ping handler called on " + str(charm.myPe())) + + msg = msg.rstrip('\x00') #removes null characters from the end + answer = "Hello to sender " + str(msg) + " from PE " + str(charm.myPe()) + ".\n" + # send the answer back to the client + charm.CcsSendReply(answer) + +class RegisterPerChare(Chare): + + def register(self, return_future, handler): + charm.CcsRegisterHandler("ping2", handler) + charm.CcsRegisterHandler("ping", handler) + self.reduce(return_future, Reducer.nop) def main(args): - units = Array(Unit, dims=(16,16)) - config = liveviz.Config() - liveviz.LiveViz.init(config, units, units.reqImg, poll=True) - units.reqImg() + # No need to initialize converse, because charm.start does this + # just register the handler + reg_wait = Future() + registers = Group(RegisterPerChare) + registers.register(reg_wait, handler) + reg_wait.get() print("CCS Handlers registered . Waiting for net requests...") -charm.start(main) + +charm.start(main) \ No newline at end of file diff --git a/examples/liveviz/liveviz.py b/examples/liveviz/liveviz.py new file mode 100644 index 0000000..a5242d0 --- /dev/null +++ b/examples/liveviz/liveviz.py @@ -0,0 +1,36 @@ +from charm4py import charm, Chare, Array, Future, Reducer, Group, liveviz, coro +import random + +class Unit(Chare): + + def __init__(self): + self.colors = [(200, 0, 0), (0, 200, 0), (0, 0, 200)] + + def reqImg(self, request): + self.particles = [] + + for _ in range(300): + x = random.randint(0, 49) + y = random.randint(0, 49) + + color = random.choice(self.colors) + + self.particles.append((x, y, color)) + + data = bytearray(50 * 50 * 3) + + for x, y, (r, g, b) in self.particles: + pixel_index = (y * 50 + x) * 3 + data[pixel_index] = r + data[pixel_index + 1] = g + data[pixel_index + 2] = b + + liveviz.LiveViz.deposit(data, self, self.thisIndex[0]*50, self.thisIndex[1]*50, 50, 50, 800, 800) + +def main(args): + units = Array(Unit, dims=(16,16)) + config = liveviz.Config() + liveviz.LiveViz.init(config, units, units.reqImg) + print("CCS Handlers registered . Waiting for net requests...") + +charm.start(main) \ No newline at end of file diff --git a/examples/liveviz/liveviz_poll.py b/examples/liveviz/liveviz_poll.py new file mode 100644 index 0000000..19a8ae8 --- /dev/null +++ b/examples/liveviz/liveviz_poll.py @@ -0,0 +1,39 @@ +from charm4py import charm, Chare, Array, Future, Reducer, Group, liveviz, coro +import time +import random + +class Unit(Chare): + + def __init__(self): + self.colors = [(200, 0, 0), (0, 200, 0), (0, 0, 200)] + + def reqImg(self): + for i in range(50): + self.particles = [] + + for _ in range(300): + x = random.randint(0, 49) + y = random.randint(0, 49) + + color = random.choice(self.colors) + + self.particles.append((x, y, color)) + + data = bytearray(50 * 50 * 3) + + for x, y, (r, g, b) in self.particles: + pixel_index = (y * 50 + x) * 3 + data[pixel_index] = r + data[pixel_index + 1] = g + data[pixel_index + 2] = b + + liveviz.LiveViz.deposit(data, self, self.thisIndex[0]*50, self.thisIndex[1]*50, 50, 50, 800, 800) + +def main(args): + units = Array(Unit, dims=(16,16)) + config = liveviz.Config() + liveviz.LiveViz.init(config, units, units.reqImg, poll=True) + units.reqImg() + print("CCS Handlers registered . Waiting for net requests...") + +charm.start(main) From 8b80e2b86324fb6fbd43de4b7774bf5c3fdef42b Mon Sep 17 00:00:00 2001 From: Advait Tahilyani Date: Tue, 3 Jun 2025 15:08:21 -0500 Subject: [PATCH 10/15] README --- examples/liveviz/README.md | 43 +++++++++++++++++++++++++++++++++++ examples/liveviz/image-1.png | Bin 0 -> 255901 bytes 2 files changed, 43 insertions(+) create mode 100644 examples/liveviz/README.md create mode 100644 examples/liveviz/image-1.png diff --git a/examples/liveviz/README.md b/examples/liveviz/README.md new file mode 100644 index 0000000..5e7f722 --- /dev/null +++ b/examples/liveviz/README.md @@ -0,0 +1,43 @@ +## Instructions for Running the LiveViz Example + +### Step 1: Set Up Python Environment + +Activate your Python virtual environment if you're using one + +### Step 2: Launch LiveViz Server + +Start the server with the following command, replacing `` with the number of processors and `` with your desired port: + +```bash +python -m charmrun.start +p ++server ++local liveviz.py ++server-port +``` + +### Step 3: Capture Server Details + +After running the command above, note down the displayed **Server IP** and **Server Port** (the port will match the one specified earlier if you used `++server-port`). + +### Step 4: Clone and Build CCS Tools + +Clone the `ccs_tools` repository: + +```bash +git clone https://github.com/UIUC-PPL/ccs_tools.git +cd ccs_tools/charm/liveViz +make +``` + +### Step 5: Run the LiveViz Client + +Launch the client application using the captured server details: + +```bash +./liveViz +``` + +### Step 6: Verify Visualization + +The LiveViz client will connect to the server and display a live visualization of the transmitted data, similar to the image below: + +![Visualization Example](image-1.png) + +Ensure your setup matches the displayed output. diff --git a/examples/liveviz/image-1.png b/examples/liveviz/image-1.png new file mode 100644 index 0000000000000000000000000000000000000000..da872e56f43609a90b9ce7550f752a4f00838209 GIT binary patch literal 255901 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 KqG$nK9Ln{S!sJ8+#@UkBxYH#2UYw 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

E%z=01E+kTd1*gT` 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 literal 0 HcmV?d00001 From 323b4d5f61fdfd3de751cd6ffa268ba6bf470510 Mon Sep 17 00:00:00 2001 From: Advait Tahilyani Date: Tue, 3 Jun 2025 16:56:38 -0500 Subject: [PATCH 11/15] Docs --- charm4py/liveviz.py | 2 +- docs/index.rst | 1 + docs/liveviz.rst | 125 +++++++++++++++++++++++++++++++ examples/liveviz/README.md | 4 +- examples/liveviz/liveviz.py | 2 +- examples/liveviz/liveviz_poll.py | 2 +- 6 files changed, 131 insertions(+), 5 deletions(-) create mode 100644 docs/liveviz.rst diff --git a/charm4py/liveviz.py b/charm4py/liveviz.py index b80aad8..b02633d 100644 --- a/charm4py/liveviz.py +++ b/charm4py/liveviz.py @@ -222,7 +222,7 @@ def deposit(cls, buffer, elem, x, y, ht, wid, g_ht, g_wid): elem.reduce(group.send, data=(buffer,x,y,ht,wid,g_ht,g_wid), reducer=Reducer.viz_gather) @classmethod - def init(cls, cfg, arr, cb, poll=False): + def init(cls, cfg, cb, poll=False): global group cls.cfg = cfg grp = Chare(LiveVizGroup, args=[cb, poll], onPE=0) diff --git a/docs/index.rst b/docs/index.rst index 328b02c..1dd10d5 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -40,6 +40,7 @@ to the largest supercomputers. channels sections pool + liveviz rules gpus diff --git a/docs/liveviz.rst b/docs/liveviz.rst new file mode 100644 index 0000000..d17e7d8 --- /dev/null +++ b/docs/liveviz.rst @@ -0,0 +1,125 @@ +=================== +liveViz +=================== + +Introduction +----- + +If array elements compute a small piece of a large 2D image, then these +image chunks can be combined across processors to form one large image +using the liveViz library. In other words, liveViz provides a way to +reduce 2D-image data, which combines small chunks of images deposited by +chares into one large image. + +This visualization library follows the client server model. The server, +a parallel Charm4py program, does all image assembly, and opens a network +(CCS) socket which clients use to request and download images. The +client is a small Java program. A typical use of this is: + +.. code-block:: bash + + cd charm4py/examples/liveviz + python -m charmrun.start +p4 ++server ++local liveviz.py ++server-port 1234 + ~/ccs_tools/bin/liveViz localhost 1234 + +Use git to obtain a copy of ccs_tools (prior to using liveViz) and build +it by: + +.. code-block:: bash + + cd ccs_tools; + ant; + +How to use liveViz with Charm4py program +--------------------------------------- +A typical program provides a chare array with one entry method with the +following prototype: + +.. code-block:: Python + + def functionName(self, request) + +This entry method is supposed to deposit its (array element’s) chunk of +the image. This entry method has following structure: + +.. code-block:: Python + + def functionName(self, request): + #prepare image chunk + + liveviz.LiveViz.deposit(data, self, start_x, start_y, local_height, local_width, global_height, global_width) + +Here, “local_width” and “local_height” are the size, in pixels, of this array +element’s portion of the image, contributed in data (described +below). This will show up on the client’s assembled image at 0-based +pixel (start_x,start_y). LiveViz combines image chunks by doing a saturating sum of +overlapping pixel values. + +Format of deposit image +----------------------- + +“data” is run of bytes representing a rectangular portion of the +image. This buffer represents image using a row-major format, so 0-based +pixel (x,y) (x increasing to the right, y increasing downward in typical +graphics fashion) is stored at array offset “x+y*width”. + +If the image is gray-scale (as determined by liveVizConfig, below), each +pixel is represented by one byte. If the image is color, each pixel is +represented by 3 consecutive bytes representing red, green, and blue +intensity. + +liveViz Initialization +---------------------- + +liveViz library needs to be initialized before it can be used for +visualization. For initialization follow the following steps from your +main chare: + +#. Create your chare array (array proxy object ’a’) with the entry + method ’functionName’ (described above). + +#. Create a Config object (’cfg’). Config takes a number + of parameters, as described below. + +#. Call liveviz.LiveViz.init(cfg, a.functionName). + +The liveviz.Config parameters are: + +- isColor, where “False” means a greyscale image (1 + byte per pixel) and “True” means a color image (3 RGB + bytes per pixel). This defaults to True. + +- The second parameter is the flag "isPush", which is passed to the + client application. If set to True, the client will repeatedly + request for images. When set to False the client will only request + for images when its window is resized and needs to be updated. This also defaults to True. + +Poll Mode +--------- + +In some cases you may want a server to deposit images only when it is +ready to do so. For this case the server will not register a callback +function that triggers image generation, but rather the server will +deposit an image at its convenience. For example a server may want to +create a movie or series of images corresponding to some timesteps in a +simulation. The server will have a timestep loop in which an array +computes some data for a timestep. At the end of each iteration the +server will deposit the image. The use of LiveViz’s Poll Mode supports +this type of server generation of images. To use poll mode, simply set +poll = True during initialization. + +.. code-block:: Python + + liveviz.LiveViz.init(cfg, a.functionName, poll=True) + +To deposit an image, the server just calls liveVizDeposit. The +server must take care not to generate too many images, before a client +requests them. Each server generated image is buffered until the client +can get the image. The buffered images will be stored in memory on +processor 0. + +Sample liveViz and liveVizPoll servers are available at: + +.. code-block:: none + + .../charm4py/examples/liveviz \ No newline at end of file diff --git a/examples/liveviz/README.md b/examples/liveviz/README.md index 5e7f722..af9f0b8 100644 --- a/examples/liveviz/README.md +++ b/examples/liveviz/README.md @@ -22,8 +22,8 @@ Clone the `ccs_tools` repository: ```bash git clone https://github.com/UIUC-PPL/ccs_tools.git -cd ccs_tools/charm/liveViz -make +cd ccs_tools +ant ``` ### Step 5: Run the LiveViz Client diff --git a/examples/liveviz/liveviz.py b/examples/liveviz/liveviz.py index a5242d0..237b1df 100644 --- a/examples/liveviz/liveviz.py +++ b/examples/liveviz/liveviz.py @@ -30,7 +30,7 @@ def reqImg(self, request): def main(args): units = Array(Unit, dims=(16,16)) config = liveviz.Config() - liveviz.LiveViz.init(config, units, units.reqImg) + liveviz.LiveViz.init(config, units.reqImg) print("CCS Handlers registered . Waiting for net requests...") charm.start(main) \ No newline at end of file diff --git a/examples/liveviz/liveviz_poll.py b/examples/liveviz/liveviz_poll.py index 19a8ae8..ed1ea87 100644 --- a/examples/liveviz/liveviz_poll.py +++ b/examples/liveviz/liveviz_poll.py @@ -32,7 +32,7 @@ def reqImg(self): def main(args): units = Array(Unit, dims=(16,16)) config = liveviz.Config() - liveviz.LiveViz.init(config, units, units.reqImg, poll=True) + liveviz.LiveViz.init(config, units.reqImg, poll=True) units.reqImg() print("CCS Handlers registered . Waiting for net requests...") From 72388805e4d262f05b59d29eefa6ebe1a1db529c Mon Sep 17 00:00:00 2001 From: Advait Tahilyani Date: Tue, 3 Jun 2025 17:08:20 -0500 Subject: [PATCH 12/15] Updated ccs_server --- charm4py/charmlib/charmlib_cython.pyx | 11 +---------- examples/ccs/ccs_server.py | 8 ++++---- 2 files changed, 5 insertions(+), 14 deletions(-) diff --git a/charm4py/charmlib/charmlib_cython.pyx b/charm4py/charmlib/charmlib_cython.pyx index 74d9317..8b2f37d 100644 --- a/charm4py/charmlib/charmlib_cython.pyx +++ b/charm4py/charmlib/charmlib_cython.pyx @@ -351,16 +351,7 @@ cdef void recvRemoteMessage(void *msg) noexcept: handler_name = incomingMsgPtr.handler_name[:handler_length].decode('utf-8') data_bytes = incomingMsgPtr.data[:data_length] - if handler_name.startswith("lv"): - # For LiveViz handlers, pass binary data directly - charm.callHandler(handler_name, data_bytes) - else: - # For all other handlers that expect text, decode as UTF-8 - try: - data = data_bytes.decode('utf-8') - charm.callHandler(handler_name, data) - except UnicodeDecodeError: - charm.callHandler(handler_name, data_bytes) + charm.callHandler(handler_name, data_bytes) class CharmLib(object): diff --git a/examples/ccs/ccs_server.py b/examples/ccs/ccs_server.py index 7144c54..5739949 100644 --- a/examples/ccs/ccs_server.py +++ b/examples/ccs/ccs_server.py @@ -2,11 +2,11 @@ def handler(msg): print("CCS Ping handler called on " + str(charm.myPe())) - - msg = msg.rstrip('\x00') #removes null characters from the end + msg = msg.decode('utf-8') + msg = msg.rstrip('\x00') answer = "Hello to sender " + str(msg) + " from PE " + str(charm.myPe()) + ".\n" - # send the answer back to the client - charm.CcsSendReply(answer) + answer_bytes = answer.encode('utf-8') + charm.CcsSendReply(answer_bytes) class RegisterPerChare(Chare): From 04348c4f375d106758f84b41c84ed2a18fdbd6fb Mon Sep 17 00:00:00 2001 From: Advait Tahilyani Date: Tue, 3 Jun 2025 17:12:17 -0500 Subject: [PATCH 13/15] Saturating Sum Added --- charm4py/liveviz.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/charm4py/liveviz.py b/charm4py/liveviz.py index b02633d..0ebe7c1 100644 --- a/charm4py/liveviz.py +++ b/charm4py/liveviz.py @@ -169,7 +169,7 @@ def from_contributions(cls, contribs, is_color=True): dst_pos = ((starty + y) * total_width + (startx + x)) * bytes_per_pixel if src_pos + bytes_per_pixel <= len(data): - buffer[dst_pos:dst_pos + bytes_per_pixel] = data[src_pos:src_pos + bytes_per_pixel] + buffer[dst_pos:dst_pos + bytes_per_pixel] = (buffer[dst_pos:dst_pos + bytes_per_pixel] + data[src_pos:src_pos + bytes_per_pixel]) % 256 return cls(bytes(buffer), total_width, total_height, is_color) From d85064e1df9d12f66f653459c7fe677fc49519a4 Mon Sep 17 00:00:00 2001 From: Ritvik Rao Date: Wed, 4 Jun 2025 10:53:34 -0400 Subject: [PATCH 14/15] add endline --- examples/liveviz/liveviz.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/liveviz/liveviz.py b/examples/liveviz/liveviz.py index 237b1df..c1538f0 100644 --- a/examples/liveviz/liveviz.py +++ b/examples/liveviz/liveviz.py @@ -33,4 +33,4 @@ def main(args): liveviz.LiveViz.init(config, units.reqImg) print("CCS Handlers registered . Waiting for net requests...") -charm.start(main) \ No newline at end of file +charm.start(main) From b3d8d3398fa132c3ef301a283d4a8574964d6239 Mon Sep 17 00:00:00 2001 From: Advait Tahilyani Date: Wed, 4 Jun 2025 11:51:55 -0500 Subject: [PATCH 15/15] Version Number --- docs/conf.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/docs/conf.py b/docs/conf.py index 31798d1..a9fe20a 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -56,11 +56,10 @@ # |version| and |release|, also used in various other places throughout the # built documents. -from charm4py import charm4py_version # The short X.Y version. -version = charm4py_version +version = '1.1' # The full version, including alpha/beta/rc tags. -release = charm4py_version +release = '1.1' # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages.