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:
-rw-r--r--intern/cycles/util/system.cpp89
-rw-r--r--intern/cycles/util/system.h11
-rw-r--r--intern/cycles/util/vector.h1
3 files changed, 35 insertions, 66 deletions
diff --git a/intern/cycles/util/system.cpp b/intern/cycles/util/system.cpp
index a13ad95b9fe..3183ac06f26 100644
--- a/intern/cycles/util/system.cpp
+++ b/intern/cycles/util/system.cpp
@@ -128,53 +128,42 @@ int system_cpu_bits()
#if defined(__x86_64__) || defined(_M_X64) || defined(__i386__) || defined(_M_IX86)
struct CPUCapabilities {
- bool x64;
- bool mmx;
- bool sse;
bool sse2;
bool sse3;
- bool ssse3;
bool sse41;
- bool sse42;
- bool sse4a;
bool avx;
- bool f16c;
bool avx2;
- bool xop;
- bool fma3;
- bool fma4;
- bool bmi1;
- bool bmi2;
};
static CPUCapabilities &system_cpu_capabilities()
{
- static CPUCapabilities caps;
+ static CPUCapabilities caps = {};
static bool caps_init = false;
if (!caps_init) {
int result[4], num;
- memset(&caps, 0, sizeof(caps));
-
__cpuid(result, 0);
num = result[0];
if (num >= 1) {
__cpuid(result, 0x00000001);
- caps.mmx = (result[3] & ((int)1 << 23)) != 0;
- caps.sse = (result[3] & ((int)1 << 25)) != 0;
- caps.sse2 = (result[3] & ((int)1 << 26)) != 0;
- caps.sse3 = (result[2] & ((int)1 << 0)) != 0;
+ const bool sse = (result[3] & ((int)1 << 25)) != 0;
+ const bool sse2 = (result[3] & ((int)1 << 26)) != 0;
+ const bool sse3 = (result[2] & ((int)1 << 0)) != 0;
+
+ const bool ssse3 = (result[2] & ((int)1 << 9)) != 0;
+ const bool sse41 = (result[2] & ((int)1 << 19)) != 0;
+ /* const bool sse42 = (result[2] & ((int)1 << 20)) != 0; */
- caps.ssse3 = (result[2] & ((int)1 << 9)) != 0;
- caps.sse41 = (result[2] & ((int)1 << 19)) != 0;
- caps.sse42 = (result[2] & ((int)1 << 20)) != 0;
+ const bool fma3 = (result[2] & ((int)1 << 12)) != 0;
+ const bool os_uses_xsave_xrestore = (result[2] & ((int)1 << 27)) != 0;
+ const bool cpu_avx_support = (result[2] & ((int)1 << 28)) != 0;
- caps.fma3 = (result[2] & ((int)1 << 12)) != 0;
- caps.avx = false;
- bool os_uses_xsave_xrestore = (result[2] & ((int)1 << 27)) != 0;
- bool cpu_avx_support = (result[2] & ((int)1 << 28)) != 0;
+ /* Simplify to combined capabilities for which we specialize kernels. */
+ caps.sse2 = sse && sse2;
+ caps.sse3 = sse && sse2 && sse3 && ssse3;
+ caps.sse41 = sse && sse2 && sse3 && ssse3 && sse41;
if (os_uses_xsave_xrestore && cpu_avx_support) {
// Check if the OS will save the YMM registers
@@ -189,15 +178,18 @@ static CPUCapabilities &system_cpu_capabilities()
# else
xcr_feature_mask = 0;
# endif
- caps.avx = (xcr_feature_mask & 0x6) == 0x6;
- }
+ const bool avx = (xcr_feature_mask & 0x6) == 0x6;
+ const bool f16c = (result[2] & ((int)1 << 29)) != 0;
- caps.f16c = (result[2] & ((int)1 << 29)) != 0;
+ __cpuid(result, 0x00000007);
+ bool bmi1 = (result[1] & ((int)1 << 3)) != 0;
+ bool bmi2 = (result[1] & ((int)1 << 8)) != 0;
+ bool avx2 = (result[1] & ((int)1 << 5)) != 0;
- __cpuid(result, 0x00000007);
- caps.bmi1 = (result[1] & ((int)1 << 3)) != 0;
- caps.bmi2 = (result[1] & ((int)1 << 8)) != 0;
- caps.avx2 = (result[1] & ((int)1 << 5)) != 0;
+ caps.avx = sse && sse2 && sse3 && ssse3 && sse41 && avx;
+ caps.avx2 = sse && sse2 && sse3 && ssse3 && sse41 && avx && f16c && avx2 && fma3 && bmi1 &&
+ bmi2;
+ }
}
caps_init = true;
@@ -209,32 +201,31 @@ static CPUCapabilities &system_cpu_capabilities()
bool system_cpu_support_sse2()
{
CPUCapabilities &caps = system_cpu_capabilities();
- return caps.sse && caps.sse2;
+ return caps.sse2;
}
bool system_cpu_support_sse3()
{
CPUCapabilities &caps = system_cpu_capabilities();
- return caps.sse && caps.sse2 && caps.sse3 && caps.ssse3;
+ return caps.sse3;
}
bool system_cpu_support_sse41()
{
CPUCapabilities &caps = system_cpu_capabilities();
- return caps.sse && caps.sse2 && caps.sse3 && caps.ssse3 && caps.sse41;
+ return caps.sse41;
}
bool system_cpu_support_avx()
{
CPUCapabilities &caps = system_cpu_capabilities();
- return caps.sse && caps.sse2 && caps.sse3 && caps.ssse3 && caps.sse41 && caps.avx;
+ return caps.avx;
}
bool system_cpu_support_avx2()
{
CPUCapabilities &caps = system_cpu_capabilities();
- return caps.sse && caps.sse2 && caps.sse3 && caps.ssse3 && caps.sse41 && caps.avx && caps.f16c &&
- caps.avx2 && caps.fma3 && caps.bmi1 && caps.bmi2;
+ return caps.avx2;
}
#else
@@ -264,26 +255,6 @@ bool system_cpu_support_avx2()
#endif
-bool system_call_self(const vector<string> &args)
-{
- /* Escape program and arguments in case they contain spaces. */
- string cmd = "\"" + Sysutil::this_program_path() + "\"";
-
- for (int i = 0; i < args.size(); i++) {
- cmd += " \"" + args[i] + "\"";
- }
-
-#ifdef _WIN32
- /* Use cmd /S to avoid issues with spaces in arguments. */
- cmd = "cmd /S /C \"" + cmd + " > nul \"";
-#else
- /* Quiet output. */
- cmd += " > /dev/null";
-#endif
-
- return (system(cmd.c_str()) == 0);
-}
-
size_t system_physical_ram()
{
#ifdef _WIN32
diff --git a/intern/cycles/util/system.h b/intern/cycles/util/system.h
index 23dcfdd303a..2152b89ed24 100644
--- a/intern/cycles/util/system.h
+++ b/intern/cycles/util/system.h
@@ -4,15 +4,17 @@
#ifndef __UTIL_SYSTEM_H__
#define __UTIL_SYSTEM_H__
-#include "util/string.h"
-#include "util/vector.h"
+#include <stdint.h>
+#include <stdlib.h>
+
+#include <string>
CCL_NAMESPACE_BEGIN
/* Get width in characters of the current console output. */
int system_console_width();
-string system_cpu_brand_string();
+std::string system_cpu_brand_string();
int system_cpu_bits();
bool system_cpu_support_sse2();
bool system_cpu_support_sse3();
@@ -22,9 +24,6 @@ bool system_cpu_support_avx2();
size_t system_physical_ram();
-/* Start a new process of the current application with the given arguments. */
-bool system_call_self(const vector<string> &args);
-
/* Get identifier of the currently running process. */
uint64_t system_self_process_id();
diff --git a/intern/cycles/util/vector.h b/intern/cycles/util/vector.h
index 0056fb269ae..9e27997cf2c 100644
--- a/intern/cycles/util/vector.h
+++ b/intern/cycles/util/vector.h
@@ -10,7 +10,6 @@
#include "util/aligned_malloc.h"
#include "util/guarded_allocator.h"
-#include "util/types.h"
CCL_NAMESPACE_BEGIN