The distributed memory access toggle in Cycles preferences would show up when a user has two GPUs that can access each other's memory, but only one of them is supported by Cycles. For example the AMD RX 5700XT and AMD Vega 64 can access each other's memory, but only the 5700XT is supported by Cycles. Pull Request: https://projects.blender.org/blender/blender/pulls/140521
64 lines
1.5 KiB
C++
64 lines
1.5 KiB
C++
/* SPDX-FileCopyrightText: 2011-2022 Blender Foundation
|
|
*
|
|
* SPDX-License-Identifier: Apache-2.0 */
|
|
|
|
#pragma once
|
|
|
|
#ifdef WITH_CUDA
|
|
|
|
# ifdef WITH_CUDA_DYNLOAD
|
|
# include <cuew.h>
|
|
# else
|
|
# include <cuda.h>
|
|
# endif
|
|
|
|
CCL_NAMESPACE_BEGIN
|
|
|
|
class CUDADevice;
|
|
|
|
/* Utility to push/pop CUDA context. */
|
|
class CUDAContextScope {
|
|
public:
|
|
CUDAContextScope(CUDADevice *device);
|
|
~CUDAContextScope();
|
|
|
|
private:
|
|
CUDADevice *device;
|
|
};
|
|
|
|
/* Utility for checking return values of CUDA function calls. */
|
|
# define cuda_device_assert(cuda_device, stmt) \
|
|
{ \
|
|
CUresult result = stmt; \
|
|
if (result != CUDA_SUCCESS) { \
|
|
const char *name = cuewErrorString(result); \
|
|
cuda_device->set_error( \
|
|
string_printf("%s in %s (%s:%d)", name, #stmt, __FILE__, __LINE__)); \
|
|
} \
|
|
} \
|
|
(void)0
|
|
|
|
# define cuda_assert(stmt) cuda_device_assert(this, stmt)
|
|
|
|
# ifndef WITH_CUDA_DYNLOAD
|
|
/* Transparently implement some functions, so majority of the file does not need
|
|
* to worry about difference between dynamically loaded and linked CUDA at all. */
|
|
const char *cuewErrorString(CUresult result);
|
|
const char *cuewCompilerPath();
|
|
int cuewCompilerVersion();
|
|
# endif /* WITH_CUDA_DYNLOAD */
|
|
|
|
static inline bool cudaSupportsDevice(const int cudaDevID)
|
|
{
|
|
int major;
|
|
cuDeviceGetAttribute(&major, CU_DEVICE_ATTRIBUTE_COMPUTE_CAPABILITY_MAJOR, cudaDevID);
|
|
if (major >= 3) {
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
CCL_NAMESPACE_END
|
|
|
|
#endif /* WITH_CUDA */
|