Author: Remi Meier
Branch: c7
Changeset: r690:4b722d20b830
Date: 2014-01-30 11:13 +0100
http://bitbucket.org/pypy/stmgc/changeset/4b722d20b830/
Log: add a mode to duhton that removes read-barriers and makes write-
barriers like normal GC write-barriers. Meaning there is no conflict
detection going on and all pages will be SHARED at all times. There
are still the start/stop_transaction calls left but their influence
can be reduced by the program.
diff --git a/c7/stmsync.c b/c7/stmsync.c
--- a/c7/stmsync.c
+++ b/c7/stmsync.c
@@ -33,6 +33,12 @@
{
/* we must have the exclusive lock here and
not the colletion lock!! */
+ /* XXX: for more than 2 threads, need a way
+ to signal other threads with need_major_collect
+ so that they don't leave COLLECT-safe-points
+ when this flag is set. Otherwise we simply
+ wait arbitrarily long until all threads reach
+ COLLECT-safe-points by chance at the same time. */
while (1) {
if (!rwticket_wrtrylock(&rw_collection_lock))
break; /* acquired! */
diff --git a/duhton/duhton.c b/duhton/duhton.c
--- a/duhton/duhton.c
+++ b/duhton/duhton.c
@@ -1,7 +1,6 @@
#include <string.h>
#include "duhton.h"
-#define DEFAULT_NUM_THREADS 2
int main(int argc, char **argv)
{
diff --git a/duhton/duhton.h b/duhton/duhton.h
--- a/duhton/duhton.h
+++ b/duhton/duhton.h
@@ -1,10 +1,16 @@
#ifndef _DUHTON_H_
#define _DUHTON_H_
-#include "../c7/core.h"
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
+#include "../c7/core.h"
+#include "../c7/list.h"
+
+#define STM 1 /* hackish removal of all read/write
+ barriers. synchronization is up to
+ the program */
+#define DEFAULT_NUM_THREADS 2 /* required by stm-c7 */
struct DuObject_s {
@@ -173,8 +179,17 @@
p1 = (typeof(p1))_pop_root())
+#if STM
#define _du_read1(p1) stm_read((object_t *)(p1))
#define _du_write1(p1) stm_write((object_t *)(p1))
+#else
+#define _du_read1(p1)
+#define _du_write1(p1) { \
+ if (UNLIKELY(((object_t *)(p1))->stm_flags & GCFLAG_WRITE_BARRIER)) { \
+ LIST_APPEND(_STM_TL->old_objects_to_trace, ((object_t *)(p1))); \
+ ((object_t *)(p1))->stm_flags &= ~GCFLAG_WRITE_BARRIER; \
+ }}
+#endif
#ifdef NDEBUG
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit