使用simd的python快速噪声
pyfastnoisesimd的Python项目详细描述
pyfastnoisesimd
==
pyfastnoisesimd是jordan peck的合成噪声库的包装器
https://github.com/auburns/fastnoise-simd,它已经用simd指令集加速。它可以通过pip安装:
pip install pyfastnoisesimd
通过对多线程使用"concurrent.futures"进一步增强并行性
为大型数组生成噪音。线程缩放通常在50-90%的
范围内,这在很大程度上取决于所使用的矢量化指令集。
线程数,默认为系统上的虚拟核心数。理想的线程数通常是物理核数,而与英特尔超线程数无关。
提供了源代码和Windows Python 3.6控制盘。
下面是一个在三维直线上生成Perlin样式噪声的简单示例
网格::
se(seed=seed,numworkers=n_threads)
perlin.frequency=0.02
perlin.noisetype=fns.noisetype.perlin
perlin.fractal.octaves=4
perlin.fractal.launacity=2.1
perlin.fractal.gain=0.45
perlin.inrupt.inrupt.type=fns.inrupt.nopertrub
result=perlin.genasgrid(shape)
sult``是dtype``float32``的3d``numpy.ndarray``。或者,
用户可以提供坐标,这对于通过"noise.getfromcoords(coords)",自定义凹凸映射镶嵌曲面等任务很有帮助。
在github存储库的"examples"文件夹中可以找到更广泛的示例。
通过使用"concurrent.futures"到多线程,进一步增强了并行性。线程缩放通常在50-90%的
范围内,这在很大程度上取决于所使用的矢量化指令集。
线程数,默认为系统上的虚拟核心数。理想的线程数通常是物理核数,而与英特尔超线程数无关。
` pip`::
pip install--upgrade pip
pip install--upgrade setuptools
pip install-v pyfastnoisesimd
在windows上,仅为python 3.6提供一个轮子。从源代码构建或
编译3.5的扩展将需要MS Visual Studio 2015或
MSVC2015生成工具:
http://landinghub.visual studio.com/visual cpp build tools
尚未使用MSVC2017编译任何Python版本,这是支持AVX512的最新版本。只有python 3.5/3.6在windows上支持avx2。
在linux或osx上,只提供一个源发行版,而安装需要"gcc"或"clang"。对于带有gcc的avx512支持,gcc7.2+是必需的,更低版本的
将仅使用avx2/sse4.1/sse2支持进行编译。小于
4.7的gcc也会禁用avx2。请注意,"pip"不尊重`$cc'环境
变量,因此使用"gcc-7"从源代码克隆和构建:
git clone https://github.com/robbmcleod/pyfastnoisesimd.git
alias gcc=gcc-7;alias g++=g++-7
pip install-v./pyfastnoisesimd
添加apt repository ppa:ubuntu-toolchain-r/test
apt update
apt install gcc-7 g++-7
benchmarks
----
一般来说,只有SSE4支持的机器上的线程伸缩性更高,
因为大多数CPU都会降低时钟速度以限制AVX2的热量生成。
因此,avx2仅约为1.5x fa比SSE4快,而在纯SIMD指令长度的基础上(4对8),你会期望它是X2更快。
第一个测试使用默认模式,一个三次网格,``noise.genasgrid()`,
来自``examples\grided\noise.py`:
**数组形状**:[810241024]
**CPU**:Intel i7-7820x Skylake-X(8核,3.6 GHz),Windo支持7
**ws 7
**simd级支持**:avx2&;fma3
>单线程模式
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
计算8388608在0.044s中的体素细胞噪声
5.2ns/体素
685.0%线程缩放
0.013s中计算8388608个体素perlin噪声
1.5ns/体素
431.3%线程缩放
替代模式是"noise.getfromcoords()``其中用户在笛卡尔空间提供
坐标py ```:
单线程模式
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~3ns/像素
286.6%线程缩放
发行说明
----
**0.4.1**
*对python 3.7的支持现已正式发布。在Windows上,AVX512仍被禁用,因为即使使用了MSVC2017.3,某些所需的SIMD指令也不可用。
**0.4.0**
*在Windows上固定对齐的内存位置,并对两个生成器都启用多线程处理。
*将"emptyCoords"函数重命名为"empty_Coords"。
**0.3.2**
*dis在Windows上启用对齐内存分配,因为它会导致SEG错误。
*感谢Luke H-W在"genasgrid"中查找并修复内存泄漏。
*感谢EnderLook报告"start"参数在多线程模式下对"genasgrid"的调用不起作用。
**0.3.1**
*调用方便的更改为了避免64位操作系统和32位操作系统之间的指针大小混淆,
**0.3.0**
*在"noise.genfromcoords()"中添加了多线程操作。
*在"example"中添加了"正交投影.py"es/`.
*更新了文档字符串以适应"sphinx.napoleon"格式。
*在"doc"目录中添加了sphinx文档。
*更正了拼写错误"intruptype.nopetrub"->;"intruptype.noperturb`
*停止了"fastnoisesimd"为
"noise.genfromcoords(coords)"的"coords"参数释放内存。现在应该可以重用
coords而无seg错误。
**0.2.1**
*删除显式python 3.4支持,因为我们无法在msvc2010上的Windows上测试它
,而且在任何情况下,它都没有avx2指令支持。
*开始标记,请参阅"release_guide.txt"以获取注释。
**0.2.0**
*添加了ITY提供了坐标
*添加了"examples/projection.py",以演示所提供的
坐标对球的gall-peters圆柱投影
(即世界地图)产生的噪声。
*添加了"noise"面向对象接口。`` noise``使用python属性来公开``fastnoisesimd``中的``set/get``函数。
*添加了``unittest``支持。
*不推荐使用的'kitchen sink``pyfastnoisesimd.generate()``函数。
*将自述文件从markdown更改为富结构文本。
*修复了不推荐使用的``pyfastnoisesimd.generate()`中始终设置的一个错误
种子到42。
*修复了拼写错误:``axisscales`->;``axesscales``,``indicies`->;``index`
**0.1.5**
*使用*nix的所有小写目录。
**0.1.4**
*修复了多线程上的错误;当前方法将数组拆分为min(线程、数组、形状[0])
**0.1.2**
*添加了manifest.in文件,用于pypi上的源分发
fastnoisesimd librarY-BR/-----------BR/> BR/>如果您希望与底层库有更直接的接口,可以使用
‘PyFASSIMD.EXEXT’模块,它是函数映射到C++
代码的函数。
BR/> FastNoiseSIMD是由Jordan Peck实现的,可以在:
BR/> H中找到。ttps://github.com/auburns/fastnoisesimd
它旨在通过使用内部(simd)cpu
函数提供更快的性能。代码的矢量化允许噪声函数在4/8/16的集合中处理数据,在某些情况下(单纯形的)性能提高了700%。
gui ba的下载链接sed参考噪声生成器可以在以下位置找到:
authors
----
robert a.mcleod编写了python包装器,实现了多线程,并编写了文档。
jordan peck编写了底层库"fastnoisesimd"。
==
pyfastnoisesimd是jordan peck的合成噪声库的包装器
https://github.com/auburns/fastnoise-simd,它已经用simd指令集加速。它可以通过pip安装:
pip install pyfastnoisesimd
通过对多线程使用"concurrent.futures"进一步增强并行性
为大型数组生成噪音。线程缩放通常在50-90%的
范围内,这在很大程度上取决于所使用的矢量化指令集。
线程数,默认为系统上的虚拟核心数。理想的线程数通常是物理核数,而与英特尔超线程数无关。
提供了源代码和Windows Python 3.6控制盘。
下面是一个在三维直线上生成Perlin样式噪声的简单示例
网格::
se(seed=seed,numworkers=n_threads)
perlin.frequency=0.02
perlin.noisetype=fns.noisetype.perlin
perlin.fractal.octaves=4
perlin.fractal.launacity=2.1
perlin.fractal.gain=0.45
perlin.inrupt.inrupt.type=fns.inrupt.nopertrub
result=perlin.genasgrid(shape)
sult``是dtype``float32``的3d``numpy.ndarray``。或者,
用户可以提供坐标,这对于通过"noise.getfromcoords(coords)",自定义凹凸映射镶嵌曲面等任务很有帮助。
在github存储库的"examples"文件夹中可以找到更广泛的示例。
通过使用"concurrent.futures"到多线程,进一步增强了并行性。线程缩放通常在50-90%的
范围内,这在很大程度上取决于所使用的矢量化指令集。
线程数,默认为系统上的虚拟核心数。理想的线程数通常是物理核数,而与英特尔超线程数无关。
` pip`::
pip install--upgrade pip
pip install--upgrade setuptools
pip install-v pyfastnoisesimd
在windows上,仅为python 3.6提供一个轮子。从源代码构建或
编译3.5的扩展将需要MS Visual Studio 2015或
MSVC2015生成工具:
http://landinghub.visual studio.com/visual cpp build tools
尚未使用MSVC2017编译任何Python版本,这是支持AVX512的最新版本。只有python 3.5/3.6在windows上支持avx2。
在linux或osx上,只提供一个源发行版,而安装需要"gcc"或"clang"。对于带有gcc的avx512支持,gcc7.2+是必需的,更低版本的
将仅使用avx2/sse4.1/sse2支持进行编译。小于
4.7的gcc也会禁用avx2。请注意,"pip"不尊重`$cc'环境
变量,因此使用"gcc-7"从源代码克隆和构建:
git clone https://github.com/robbmcleod/pyfastnoisesimd.git
alias gcc=gcc-7;alias g++=g++-7
pip install-v./pyfastnoisesimd
添加apt repository ppa:ubuntu-toolchain-r/test
apt update
apt install gcc-7 g++-7
benchmarks
----
一般来说,只有SSE4支持的机器上的线程伸缩性更高,
因为大多数CPU都会降低时钟速度以限制AVX2的热量生成。
因此,avx2仅约为1.5x fa比SSE4快,而在纯SIMD指令长度的基础上(4对8),你会期望它是X2更快。
第一个测试使用默认模式,一个三次网格,``noise.genasgrid()`,
来自``examples\grided\noise.py`:
**数组形状**:[810241024]
**CPU**:Intel i7-7820x Skylake-X(8核,3.6 GHz),Windo支持7
**ws 7
**simd级支持**:avx2&;fma3
>单线程模式
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
计算8388608在0.044s中的体素细胞噪声
5.2ns/体素
685.0%线程缩放
0.013s中计算8388608个体素perlin噪声
1.5ns/体素
431.3%线程缩放
替代模式是"noise.getfromcoords()``其中用户在笛卡尔空间提供
坐标py ```:
单线程模式
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~3ns/像素
286.6%线程缩放
发行说明
----
**0.4.1**
*对python 3.7的支持现已正式发布。在Windows上,AVX512仍被禁用,因为即使使用了MSVC2017.3,某些所需的SIMD指令也不可用。
**0.4.0**
*在Windows上固定对齐的内存位置,并对两个生成器都启用多线程处理。
*将"emptyCoords"函数重命名为"empty_Coords"。
**0.3.2**
*dis在Windows上启用对齐内存分配,因为它会导致SEG错误。
*感谢Luke H-W在"genasgrid"中查找并修复内存泄漏。
*感谢EnderLook报告"start"参数在多线程模式下对"genasgrid"的调用不起作用。
**0.3.1**
*调用方便的更改为了避免64位操作系统和32位操作系统之间的指针大小混淆,
**0.3.0**
*在"example"中添加了"正交投影.py"es/`.
*更新了文档字符串以适应"sphinx.napoleon"格式。
*在"doc"目录中添加了sphinx文档。
*更正了拼写错误"intruptype.nopetrub"->;"intruptype.noperturb`
*停止了"fastnoisesimd"为
"noise.genfromcoords(coords)"的"coords"参数释放内存。现在应该可以重用
coords而无seg错误。
**0.2.1**
*删除显式python 3.4支持,因为我们无法在msvc2010上的Windows上测试它
,而且在任何情况下,它都没有avx2指令支持。
*开始标记,请参阅"release_guide.txt"以获取注释。
**0.2.0**
*添加了ITY提供了坐标
*添加了"examples/projection.py",以演示所提供的
坐标对球的gall-peters圆柱投影
(即世界地图)产生的噪声。
*添加了"noise"面向对象接口。`` noise``使用python属性来公开``fastnoisesimd``中的``set/get``函数。
*添加了``unittest``支持。
*不推荐使用的'kitchen sink``pyfastnoisesimd.generate()``函数。
*将自述文件从markdown更改为富结构文本。
*修复了不推荐使用的``pyfastnoisesimd.generate()`中始终设置的一个错误
种子到42。
*修复了拼写错误:``axisscales`->;``axesscales``,``indicies`->;``index`
**0.1.5**
*使用*nix的所有小写目录。
**0.1.4**
*修复了多线程上的错误;当前方法将数组拆分为min(线程、数组、形状[0])
**0.1.2**
*添加了manifest.in文件,用于pypi上的源分发
fastnoisesimd librarY-BR/-----------BR/> BR/>如果您希望与底层库有更直接的接口,可以使用
‘PyFASSIMD.EXEXT’模块,它是函数映射到C++
代码的函数。
BR/> FastNoiseSIMD是由Jordan Peck实现的,可以在:
BR/> H中找到。ttps://github.com/auburns/fastnoisesimd
它旨在通过使用内部(simd)cpu
函数提供更快的性能。代码的矢量化允许噪声函数在4/8/16的集合中处理数据,在某些情况下(单纯形的)性能提高了700%。
gui ba的下载链接sed参考噪声生成器可以在以下位置找到:
authors
----
robert a.mcleod编写了python包装器,实现了多线程,并编写了文档。
jordan peck编写了底层库"fastnoisesimd"。