VLOADN(3clc)

πŸ“¦
version 1.0~svn33624 Β· 3 versions
, in ubuntu jammy, ubuntu noble

🌸 VLOADN 🌸

okay bestie, come sit with me, we're doing vloadn from the OpenCL Manual, section 3clc, and honestly? it's giving vector vibes πŸ’…


✨ NAME ✨

vloadn β€” read vectors from a pointer to memory 🫢

gentypen vloadn(size_t offset, const __global gentype *p);
gentypen vloadn(size_t offset, const __local gentype *p);
gentypen vloadn(size_t offset, const __constant gentype *p);
gentypen vloadn(size_t offset, const __private gentype *p);

πŸ’– DESCRIPTION πŸ’–

so basically it returns sizeof (gentypen) bytes of data, read straight from the address (p + (offset * n)). iconic, no notes ✨

and listen, the address you compute as (p + (offset * n)) has to be aligned, and the alignment depends on your gentype, so pay attention bestie:

  • 8-bit aligned if gentype is char or uchar
  • 16-bit aligned if gentype is short or ushort
  • 32-bit aligned if gentype is int, uint, or float
  • 64-bit aligned if gentype is long or ulong

and if the half extension is enabled, the address computed as (p + (offset * n)) must be 16-bit aligned 🌸


πŸŽ€ NOTES πŸŽ€

the Vector Data Load and Store Functions let you read and write vector types from a pointer to memory. that's the whole gig, and they ate πŸ’…

the generic type gentype is there to stand in for the built-in data types: char, uchar, short, ushort, int, uint, long, ulong, float, or double.

the generic type name gentypen means n-element vectors of gentype elements. that suffix n also shows up in the function names (like vloadn, vstoren, etc.), where n = 2, 3, 4, 8, or 16.

🚨 undefined behaviour alert, fr fr β€” the results of vector data load and store functions are undefined if the address being read from or written to is not correctly aligned. don't do it. just don't 😭

the pointer argument p can be a pointer to global(3clc), local(3clc), or private(3clc) memory for store functions. and for load functions, the pointer argument p can be a pointer to __global, __local, constant(3clc), or __private memory.

when it's extended by the cl_khr_fp16(3clc) extension, the generic type gentypen gets extended to include half, half2, half3, half4, half8, and half16. slay 🌈

and one more thing, iykyk: vload3 and vload_half3 read the x, y, z components from address (p + (offset * 3)) into a 3-component vector. three components, three vibes, periodt πŸ‘‘


⭐ SPECIFICATION ⭐

OpenCL Specification[1]


πŸ’œ SEE ALSO πŸ’œ


πŸ‘‘ AUTHORS πŸ‘‘

The Khronos Group


Copyright Β© 2007-2011 The Khronos Group Inc.

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and/or associated documentation files (the "Materials"), to deal in the Materials without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Materials, and to permit persons to whom the Materials are furnished to do so, subject to the following condition: the copyright notice and this permission notice shall be included in all copies or substantial portions of the Materials.


πŸ“ NOTES πŸ“ (yes there's another one, the manual said so)

  1. OpenCL Specification β€” page 267, section 6.12.7 - Vector Data Load and Store Functions

okay that's the whole page, you're officially fluent in vloadn now, main character energy achieved πŸ’–βœ¨

this lil manual moment was brought to you by The Khronos Group, from the OpenCL Manual, dated 01/14/2021 β€” mwah, take care of her 🫢

πŸ“¦ where this page comes from