Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrecht Van Lommel <brechtvanlommel@gmail.com>2017-11-04 02:33:38 +0300
committerBrecht Van Lommel <brechtvanlommel@gmail.com>2018-01-03 01:50:18 +0300
commitc621832d3d358cd7648d60c16e1685050c4f6778 (patch)
tree7db33634ec4eb97c4adc81949ddae7a61f09e38f /intern/cycles/device/device_multi.cpp
parent6699454fb642bfd07e85f8d7bd8f8879878e3fc5 (diff)
Cycles: CUDA support for rendering scenes that don't fit on GPU.
In that case it can now fall back to CPU memory, at the cost of reduced performance. For scenes that fit in GPU memory, this commit should not cause any noticeable slowdowns. We don't use all physical system RAM, since that can cause OS instability. We leave at least half of system RAM or 4GB to other software, whichever is smaller. For image textures in host memory, performance was maybe 20-30% slower in our tests (although this is highly hardware and scene dependent). Once other type of data doesn't fit on the GPU, performance can be e.g. 10x slower, and at that point it's probably better to just render on the CPU. Differential Revision: https://developer.blender.org/D2056
Diffstat (limited to 'intern/cycles/device/device_multi.cpp')
-rw-r--r--intern/cycles/device/device_multi.cpp16
1 files changed, 11 insertions, 5 deletions
diff --git a/intern/cycles/device/device_multi.cpp b/intern/cycles/device/device_multi.cpp
index fd28a9d6188..3a4c08b6eb2 100644
--- a/intern/cycles/device/device_multi.cpp
+++ b/intern/cycles/device/device_multi.cpp
@@ -48,11 +48,17 @@ public:
MultiDevice(DeviceInfo& info, Stats &stats, bool background_)
: Device(info, stats, background_), unique_key(1)
{
- Device *device;
-
foreach(DeviceInfo& subinfo, info.multi_devices) {
- device = Device::create(subinfo, sub_stats_, background);
- devices.push_back(SubDevice(device));
+ Device *device = Device::create(subinfo, sub_stats_, background);
+
+ /* Always add CPU devices at the back since GPU devices can change
+ * host memory pointers, which CPU uses as device pointer. */
+ if(subinfo.type == DEVICE_CPU) {
+ devices.push_back(SubDevice(device));
+ }
+ else {
+ devices.push_front(SubDevice(device));
+ }
}
#ifdef WITH_NETWORK
@@ -63,7 +69,7 @@ public:
vector<string> servers = discovery.get_server_list();
foreach(string& server, servers) {
- device = device_network_create(info, stats, server.c_str());
+ Device *device = device_network_create(info, stats, server.c_str());
if(device)
devices.push_back(SubDevice(device));
}