使用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"。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java找不到当前线程的会话   同步Java同步方法调用非同步方法   这段代码的java时间复杂度是如何列出一个集合的所有子集的?   java Jetty SslConnectionFactory nextProtocol   为什么在java集合中使用游标而不是for循环   java如何对长函数进行单元测试?   如何从java中的文本输入创建数组   java工具栏内容未显示,尽管出现了片段内容   java MediaPlayer无法处理本地文件   java在多次读取时,从TCP服务器读取的数据将挂起   java组织。springframework。数据领域无法将PageImpl强制转换为   java如何使用@WithMockUser并从属性文件中传递用户名和密码?   JavaSpringBootGradle插件2。x如何使用自定义启动器布局工厂   sockets Java客户端和服务器之间使用字符串等进行通信的“行业标准”方法是什么   java变量引用不存在的资源:${project\u loc:project\u name}   搜索如何返回LDAP Java中所有用户的特定属性?   JDK1.8.016x的java密钥斗篷代理问题   spring如何使用Java中的Exchange获取邮件   java Kotlin+Dagger 2:Dagger*文件不会生成   如何在传入的double上执行操作,然后在Java中返回