diff --git a/GenericIO.cxx b/GenericIO.cxx
index 2f297b56c47243f9711928eecd649161bc878361..7cd47a7754d37abb439fdfa63f936dc19061e4da 100644
--- a/GenericIO.cxx
+++ b/GenericIO.cxx
@@ -532,6 +532,18 @@ void GenericIO::write() {
 
         int FilterIdx = 0;
         if (Vars[i].LCI.Mode != LossyCompressionInfo::LCModeNone) {
+#ifdef _OPENMP
+#pragma omp master
+  {
+#endif
+         if (!sz_initialized) {
+           SZ_Init(NULL);
+           sz_initialized = true;
+         }
+
+#ifdef _OPENMP
+  }
+#endif
           int SZDT = GetSZDT(Vars[i]);
           if (SZDT == -1)
             goto nosz;
@@ -590,11 +602,6 @@ nosz:
          blosc_initialized = true;
        }
 
-       if (!sz_initialized) {
-         SZ_Init(NULL);
-         sz_initialized = true;
-       }
-
 #ifdef _OPENMP
        blosc_set_nthreads(omp_get_max_threads());
   }