diff --git a/numpy/random/setup.py b/numpy/random/setup.py
index f0ebe331fa..a868cdef55 100644
--- a/numpy/random/setup.py
+++ b/numpy/random/setup.py
@@ -6,6 +6,8 @@ import sys
 from os.path import join
 
 from numpy.distutils.system_info import platform_bits
+from numpy.distutils.ccompiler import new_compiler
+from distutils.sysconfig import customize_compiler
 
 is_msvc = (platform.platform().startswith('Windows') and
            platform.python_compiler().startswith('MS'))
@@ -43,9 +45,16 @@ def configuration(parent_package='', top_path=None):
     # Some bit generators exclude GCC inlining
     EXTRA_COMPILE_ARGS = ['-U__GNUC_GNU_INLINE__']
 
+    ccompiler = new_compiler()
+    customize_compiler(ccompiler)
+    if hasattr(ccompiler, 'compiler'):
+        compiler_name = ccompiler.compiler[0]
+    else:
+        compiler_name = ccompiler.__class__.__name__
+
     if is_msvc and platform_bits == 32:
         # 32-bit windows requires explicit sse2 option
-        EXTRA_COMPILE_ARGS += ['/arch:SSE2']
+        EXTRA_COMPILE_ARGS += [] if ('icl' in compiler_name or 'icc' in compiler_name) else ['/arch:SSE2']
     elif not is_msvc:
         # Some bit generators require c99
         EXTRA_COMPILE_ARGS += ['-std=c99']
diff --git a/numpy/random_intel/__init__.py b/numpy/random_intel/__init__.py
new file mode 100644
index 0000000000..9c105de547
--- /dev/null
+++ b/numpy/random_intel/__init__.py
@@ -0,0 +1,7 @@
+import warnings
+try:
+    with warnings.catch_warnings():
+        warnings.filterwarnings("ignore", message="numpy.ndarray size changed")
+        from mkl_random import *
+except ImportError as e:
+    warnings.warn("mkl_random not found. Install it with 'conda instal -c intel mkl_random', or get it from 'http://github.com/IntelPython/mkl_random'", stacklevel=2)
diff --git a/numpy/random_intel/setup.py b/numpy/random_intel/setup.py
new file mode 100644
index 0000000000..6d4fecf29a
--- /dev/null
+++ b/numpy/random_intel/setup.py
@@ -0,0 +1,10 @@
+from __future__ import division, print_function
+
+def configuration(parent_package='',top_path=None):
+    from numpy.distutils.misc_util import Configuration
+    config = Configuration('random_intel', parent_package, top_path)
+    return config
+
+if __name__ == '__main__':
+    from numpy.distutils.core import setup
+    setup(configuration=configuration)
diff --git a/numpy/setup.py b/numpy/setup.py
index 4ccdaeea5e..d794e92d00 100644
--- a/numpy/setup.py
+++ b/numpy/setup.py
@@ -18,6 +18,7 @@ def configuration(parent_package='',top_path=None):
     config.add_subpackage('matrixlib')
     config.add_subpackage('polynomial')
     config.add_subpackage('random')
+    config.add_subpackage('random_intel')
     config.add_subpackage('testing')
     config.add_data_dir('doc')
     config.add_data_dir('tests')
diff --git a/numpy/tests/test_warnings.py b/numpy/tests/test_warnings.py
index f5560a099a..aff8f3e938 100644
--- a/numpy/tests/test_warnings.py
+++ b/numpy/tests/test_warnings.py
@@ -71,6 +71,8 @@ if sys.version_info >= (3, 4):
                 continue
             if path == base / "random" / "__init__.py":
                 continue
+            if path == base / "random_intel" / "__init__.py":
+                continue
             # use tokenize to auto-detect encoding on systems where no
             # default encoding is defined (e.g. LANG='C')
             with tokenize.open(str(path)) as file:
