cuda.bindings._v2.driver.kernel_set_attribute#
- cuda.bindings._v2.driver.kernel_set_attribute(int attrib, int val, intptr_t kernel, int dev)#
Sets information about a kernel.
This call sets the value of a specified attribute
attribon the kernelkernelfor the requested devicedevto an integer value specified byval. This function returns CUDA_SUCCESS if the new value of the attribute could be successfully set. If the set fails, this call will return an error. Not all attributes can have values set. Attempting to set a value on a read- only attribute will result in an error (CUDA_ERROR_INVALID_VALUE). Note that attributes set usingfunc_set_attribute()will override the attribute set by this API irrespective of whether the call tofunc_set_attribute()is made before or after this API call. However,kernel_get_attribute()will always return the attribute value set by this API. Supported attributes are:.CU_FUNC_ATTRIBUTE_MAX_DYNAMIC_SHARED_SIZE_BYTES: This is the maximum size in bytes of dynamically-allocated shared memory. The value should contain the requested maximum size of dynamically-allocated shared memory. The sum of this value and the function attributeCU_FUNC_ATTRIBUTE_SHARED_SIZE_BYTEScannot exceed the device attributeCU_DEVICE_ATTRIBUTE_MAX_SHARED_MEMORY_PER_BLOCK_OPTIN. The maximal size of requestable dynamic shared memory may differ by GPU architecture.CU_FUNC_ATTRIBUTE_PREFERRED_SHARED_MEMORY_CARVEOUT: On devices where the L1 cache and shared memory use the same hardware resources, this sets the shared memory carveout preference, in percent of the total shared memory. SeeCU_DEVICE_ATTRIBUTE_MAX_SHARED_MEMORY_PER_MULTIPROCESSORThis is only a hint, and the driver can choose a different ratio if required to execute the function.CU_FUNC_ATTRIBUTE_REQUIRED_CLUSTER_WIDTH: The required cluster width in blocks. The width, height, and depth values must either all be 0 or all be positive. The validity of the cluster dimensions is checked at launch time. If the value is set during compile time, it cannot be set at runtime. Setting it at runtime will return CUDA_ERROR_NOT_PERMITTED.CU_FUNC_ATTRIBUTE_REQUIRED_CLUSTER_HEIGHT: The required cluster height in blocks. The width, height, and depth values must either all be 0 or all be positive. The validity of the cluster dimensions is checked at launch time. If the value is set during compile time, it cannot be set at runtime. Setting it at runtime will return CUDA_ERROR_NOT_PERMITTED.CU_FUNC_ATTRIBUTE_REQUIRED_CLUSTER_DEPTH: The required cluster depth in blocks. The width, height, and depth values must either all be 0 or all be positive. The validity of the cluster dimensions is checked at launch time. If the value is set during compile time, it cannot be set at runtime. Setting it at runtime will return CUDA_ERROR_NOT_PERMITTED.CU_FUNC_ATTRIBUTE_NON_PORTABLE_CLUSTER_SIZE_ALLOWED: Indicates whether the function can be launched with non-portable cluster size. 1 is allowed, 0 is disallowed.CU_FUNC_ATTRIBUTE_CLUSTER_SCHEDULING_POLICY_PREFERENCE: The block scheduling policy of a function. The value type isCUclusterSchedulingPolicy.CU_FUNC_ATTRIBUTE_SHARED_MEMORY_MODE: The shared memory mode of a function. The value type isCUsharedMemoryMode/ cudaSharedMemoryMode.
- Parameters:
attrib (FunctionAttribute) – Attribute requested.
val (int) – Value to set.
kernel (intptr_t) – Kernel to set attribute of.
dev (int) – Device to set attribute of.
Note
The API has stricter locking requirements in comparison to its legacy counterpart
func_set_attribute()due to device-wide semantics. If multiple threads are trying to set the same attribute on the same device simultaneously, the attribute setting will depend on the interleavings chosen by the OS scheduler and memory consistency.See also
cuKernelSetAttribute