Cycles: no need in spin lock in memory statistics
This functions are called from device code which is guaranteed not to be called simultaneously from different threads.
This commit is contained in:
@@ -19,31 +19,22 @@
|
|||||||
#ifndef __UTIL_STATS_H__
|
#ifndef __UTIL_STATS_H__
|
||||||
#define __UTIL_STATS_H__
|
#define __UTIL_STATS_H__
|
||||||
|
|
||||||
#include "util_thread.h"
|
|
||||||
|
|
||||||
CCL_NAMESPACE_BEGIN
|
CCL_NAMESPACE_BEGIN
|
||||||
|
|
||||||
class Stats {
|
class Stats {
|
||||||
public:
|
public:
|
||||||
Stats() : lock(), mem_used(0), mem_peak(0) {}
|
Stats() : mem_used(0), mem_peak(0) {}
|
||||||
|
|
||||||
void mem_alloc(size_t size) {
|
void mem_alloc(size_t size) {
|
||||||
lock.lock();
|
|
||||||
|
|
||||||
mem_used += size;
|
mem_used += size;
|
||||||
if(mem_used > mem_peak)
|
if(mem_used > mem_peak)
|
||||||
mem_peak = mem_used;
|
mem_peak = mem_used;
|
||||||
|
|
||||||
lock.unlock();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void mem_free(size_t size) {
|
void mem_free(size_t size) {
|
||||||
lock.lock();
|
|
||||||
mem_used -= size;
|
mem_used -= size;
|
||||||
lock.unlock();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
spin_lock lock;
|
|
||||||
size_t mem_used;
|
size_t mem_used;
|
||||||
size_t mem_peak;
|
size_t mem_peak;
|
||||||
};
|
};
|
||||||
|
@@ -33,9 +33,6 @@ typedef boost::mutex thread_mutex;
|
|||||||
typedef boost::mutex::scoped_lock thread_scoped_lock;
|
typedef boost::mutex::scoped_lock thread_scoped_lock;
|
||||||
typedef boost::condition_variable thread_condition_variable;
|
typedef boost::condition_variable thread_condition_variable;
|
||||||
|
|
||||||
/* use boost for spinlocks as well */
|
|
||||||
typedef boost::detail::spinlock spin_lock;
|
|
||||||
|
|
||||||
/* own pthread based implementation, to avoid boost version conflicts with
|
/* own pthread based implementation, to avoid boost version conflicts with
|
||||||
* dynamically loaded blender plugins */
|
* dynamically loaded blender plugins */
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user