Python SIMD加速噪声
项目描述
PyFastNoiseSIMD
PyFastNoiseSIMD是围绕Jordan Peck的合成噪声库https://github.com/Auburns/FastNoise-SIMD的包装,该库已通过SIMD指令集进行了加速。它可以通过pip进行安装
pip install pyfastnoisesimd
通过使用concurrent.futures
进行多线程来进一步增强并行性,以生成大型数组中的噪声。线程扩展通常在50-90%之间,这主要取决于使用的矢量化指令集。线程数默认为系统上的虚拟核心数。理想的线程数通常是物理核心数,不受Intel Hyperthreading®影响。
以下是一个简单的示例,用于在3D矩形网格上生成Perlin风格的噪声:
import pyfastnoisesimd as fns
import numpy as np
shape = [512, 512, 512]
seed = np.random.randint(2**31)
N_threads = 4
perlin = fns.Noise(seed=seed, numWorkers=N_threads)
perlin.frequency = 0.02
perlin.noiseType = fns.NoiseType.Perlin
perlin.fractal.octaves = 4
perlin.fractal.lacunarity = 2.1
perlin.fractal.gain = 0.45
perlin.perturb.perturbType = fns.PerturbType.NoPerturb
result = perlin.genAsGrid(shape)
其中 result
是一个dtype为 'float32'
的3D numpy.ndarray
。另外,用户可以通过Noise.getFromCoords(coords)
提供坐标,这对于自定义凹凸映射细分表面等任务很有帮助。
更详细的示例可以在GitHub存储库上的examples
文件夹中找到。
通过使用concurrent.futures
进行多线程来进一步增强并行性,以生成大型数组中的噪声。线程扩展通常在50-90%之间,这主要取决于使用的矢量化指令集。线程数默认为系统上的虚拟核心数。理想的线程数通常是物理核心数,不受Intel Hyperthreading®影响。
文档
请查看
http://pyfastnoisesimd.readthedocs.io
安装
pyfastnoisesimd
可在PyPI上找到,并且可以通过pip
进行安装:
pip install --upgrade pip
pip install --upgrade setuptools
pip install -v pyfastnoisesimd
通过manywheels
提供了Windows、Mac OSX和Linux的wheel。
在Windows上从源代码构建需要适合您Python版本的MS Visual Studio版本或MSVC构建工具。
http://landinghub.visualstudio.com/visual-cpp-build-tools
在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
在Ubuntu上安装GCC7.2(使用sudo
或作为root用户):
add-apt-repository ppa:ubuntu-toolchain-r/test
apt update
apt install gcc-7 g++-7
基准测试
一般来说,只有SSE4支持的机器上的线程扩展率更高,因为大多数CPU将时钟速度降低以限制AVX2产生的热量。因此,AVX2的速度大约比SSE4快1.5倍,而在纯SIMD指令长度的基础上(4对8),您会期望它快两倍。
第一个测试使用默认模式,一个立方网格,来自examples\gridded_noise.py
的Noise.genAsGrid()
。
数组形状:[8,1024,1024] CPU:Intel i7-7820X Skylake-X(8核心,3.6 GHz),Windows 7 SIMD级别支持:AVX2 & FMA3
单线程模式
Computed 8388608 voxels cellular noise in 0.298 s
35.5 ns/voxel
Computed 8388608 voxels Perlin noise in 0.054 s
6.4 ns/voxel
Multi-threaded (8 threads) mode
在0.044秒内计算了8388608个细胞噪声体素,每体素5.2纳秒,线程扩展率685.0%。在0.013秒内计算了8388608个体素Perlin噪声,每体素1.5纳秒,线程扩展率431.3%
另一种模式是Noise.getFromCoords()
,用户从examples\GallPeters_projection.py
中提供笛卡尔空间中的坐标。
单线程模式
Generated noise from 2666000 coordinates with 1 workers in 1.766e-02 s
6.6 ns/pixel
Multi-threaded (4 threads) mode
使用4个工作线程在6.161e-03秒内生成来自2666000个坐标的噪声,每像素2.3纳秒,线程扩展率286.6%
发布说明
0.4.2
- 现在通过GitHub Actions构建Wheels,并在PyPi上提供。
- 增加了对Python 3.8和3.9的支持。已删除对Python 3.5的支持。
0.4.1
- Python 3.7现在为官方支持。在Windows上,AVX512仍然被禁用,因为即使在MSVC2017.3中,一些必需的SIMD指令也不可用。
0.4.0
- 在Windows上修复了对齐内存位置,并为两个生成器启用了多线程处理。
- 将
emptyCoords
函数重命名为empty_coords
。
0.3.2
- 由于在Windows上导致段错误,禁用了对齐内存分配。
- 感谢Luke H-W发现并修复了
genAsGrid
中的内存泄漏。 - 感谢Enderlook报告说,在多线程模式下调用
genAsGrid
时,start
参数不起作用。
0.3.1
- 更改调用约定以避免64位和32位操作系统之间指针大小混淆。
0.3.0
- Elliott Sales de Andrade修复了与安装相关的一些问题,以便干净地构建并更好地处理CPU SIMD功能。
- 为
Noise.genFromCoords()
添加了多线程操作。 - 将
orthographic_projection.py
添加到examples/
。 - 更新文档字符串以适应
sphinx.napoleon
格式。 - 在
doc
目录中添加了Sphinx文档。 - 纠正了拼写错误
PerturbType.NoPetrub
->PerturbType.NoPerturb
。 - 停止释放
fastnoisesimd
为Noise.genFromCoords(coords)
的coords
参数分配的内存。现在应该可以在不发生段错误的情况下重用坐标。
0.2.1
- 删除对Python 3.4的显式支持,因为我们无法在MSVC2010上为Windows进行测试,而且无论如何它也不会有AVX2指令支持。
- 开始打标签,请参阅
RELEASING_GUIDE.txt
以获取说明。
0.2.0
- 添加了提供坐标的功能
- 将
examples/projection.py
添加到演示如何通过提供的坐标生成噪声,应用于球体(即世界地图)的Gall-Peters圆柱投影。 - 添加了面向对象的接口
Noise
。使用Python属性在FastNoiseSIMD
中公开Noise
的Set/Get
函数。 - 添加了
unittest
支持。 - 弃用了'kitchen sink'
pyfastnoisesimd.generate()
函数。 - 将README从markdown更改为丰富结构化文本。
- 修复了弃用的
pyfastnoisesimd.generate()
中的错误,该错误始终将种子设置为42。 - 修复了拼写错误:
axisScales
->axesScales
,indicies
->indices
。
0.1.5
- 为*nix使用所有小写目录。
0.1.4
- 修复了多线程问题;当前方法将数组拆分至 min(threads, array.shape[0])
0.1.2
- 为 PyPI 的源分发添加了 MANIFEST.in 文件
FastNoiseSIMD 库
如果您想与底层库有更直接的接口,可以使用 pyfastsimd._ext
模块,该模块将 C++ 代码逐函数映射。
FastNoiseSIMD 由 Jordan Peck 实现,可在以下地址找到
https://github.com/Auburns/FastNoiseSIMD
它旨在通过使用内建(SIMD)CPU 函数提供更快的性能。代码的矢量化允许噪声函数以 4/8/16 的数据集处理数据,在某些情况下(Simplex)性能提高 700%。
请参阅 Wiki 了解噪声类型的用法信息
https://github.com/Auburns/FastNoiseSIMD/wiki
GUI 基于的参考噪声生成器的下载链接可在以下位置找到
https://github.com/Auburns/FastNoiseSIMD/releases
作者
Robert A. McLeod 编写了 Python 包装器,实现了多线程,并编写了文档。
Elliott Sales de Andrade 贡献了许多修复,使许多平台上的构建成功。
Jordan Peck 编写了底层库 FastNoiseSIMD
。
项目详情
下载文件
下载适合您平台的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。
源分发
构建分发
pyfastnoisesimd-0.4.2.tar.gz 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 4ba2827a99e9db4c382f1541e603a7526b736c62755ecf7cd8f490afa5c1016d |
|
MD5 | 9ff625cc0111c90de3fc7c7de03dc5ea |
|
BLAKE2b-256 | 66a97f3e010c62593b02fcc8473df8b0487e134c4ecd4b135bc2a6ab6e003a2f |
pyfastnoisesimd-0.4.2-cp39-cp39-win_amd64.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 91b76c0fa5e5fad7cf7720be52d10b4900d1890150cc9aa9c2307059bf1948af |
|
MD5 | b34a019a2536d847f42c47f3debb0d8b |
|
BLAKE2b-256 | df8f6d8e0aed0f5e30eca9bdfe5e5ac766b6213313e4e4b7606aded847b1311a |
pyfastnoisesimd-0.4.2-cp39-cp39-win32.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 67e682101e6a23d872cf948231ad1f7568a093b40b3e7dd603ac5759e7f08702 |
|
MD5 | bfb5a78238fd54a94215c2937d8ab1fd |
|
BLAKE2b-256 | 3f884312c6127edbe1490295ec8dbed7044f77c15f4eb6c2020a76605d931c25 |
pyfastnoisesimd-0.4.2-cp39-cp39-manylinux2010_x86_64.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 08127f0a26eabb8b4f9a896df171cfc85436b9c10e6311bd7a2463a9f572dd53 |
|
MD5 | 62e97438fd0749a90ac84f501ec75509 |
|
BLAKE2b-256 | 00c073b726c5c752fec59361bf8da2b45aae42689612e09c43f2496bc0ddd364 |
pyfastnoisesimd-0.4.2-cp39-cp39-manylinux2010_i686.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 271281c321d0d86e7e40aa521d35ec7d98760fb616bdbb050f783a8d70b51f2c |
|
MD5 | 1f5d71cfde48a79df51eb3ff2f865cf6 |
|
BLAKE2b-256 | 1bcb528e873c0e713b1d8dbc328cbaed4a0cc031eed38ac26c18c60e3de10f2b |
pyfastnoisesimd-0.4.2-cp39-cp39-manylinux1_x86_64.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | aab3f0562e8cd40a81e5a8cc3d8e5194ac036931abb2d30cd2eec81f433d68c4 |
|
MD5 | 3c748425e86b75403ec378be46825bdd |
|
BLAKE2b-256 | a3dc132c78471d19a71dde205b5a866ee74594ff7dc0ee6e1c6f05c3d483ed35 |
pyfastnoisesimd-0.4.2-cp39-cp39-manylinux1_i686.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 2d6d752f8b7eb51967a10362dfb9abb0733425f73135e0c7de99f260e907025e |
|
MD5 | 52a58f64eb44f4b2644bc78040a5740f |
|
BLAKE2b-256 | e097770262b4a224c749e4d22e1e8a97697a9d287d7c0fdfb75a2525048ed206 |
pyfastnoisesimd-0.4.2-cp39-cp39-macosx_10_9_x86_64.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 7d15373b5a7fd57d8a0968b3f9de0e323a86bdd940746746453dbfd45d6b31b2 |
|
MD5 | e3cea38e80624e882bbf73022138a887 |
|
BLAKE2b-256 | ff225d9e5fe7646d99aea1a54a440ad105e36303cd244e79d3f7fb9088d53805 |
pyfastnoisesimd-0.4.2-cp38-cp38-win_amd64.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | c0b7de76dcb57bc0afa5fda61af06d740ee885d274998835105dc89d4fdd2f61 |
|
MD5 | 668397d7a68bd0218a5095a3ef9df542 |
|
BLAKE2b-256 | 14e9b9dbb5ed4d6dc9ed8676e999311de51d7f06101b4230d02912d444768306 |
哈希值 为 pyfastnoisesimd-0.4.2-cp38-cp38-manylinux2010_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 2d4ec51e9d4f71f8b34397a32c7cd4170e5f3a19b161649c1e22929ff66e3c40 |
|
MD5 | cf7b6211b1dc3c8a3626e4f3c37d57e8 |
|
BLAKE2b-256 | 03944faad1812ab2606bf8256258af5d8101518d4c1a483fe64d2f55f57e2a82 |
哈希值 为 pyfastnoisesimd-0.4.2-cp38-cp38-manylinux2010_i686.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | ef79249368309697b8662b14cffa6bc94669a9e7f0bd827d758acd17d48e00b1 |
|
MD5 | 7704107c25114912cfddf1676a19b91d |
|
BLAKE2b-256 | 28363060b709466ce0e9cdb28f03ae6b1b1c21452079159fb2e16e8da919a4ca |
哈希值 为 pyfastnoisesimd-0.4.2-cp38-cp38-manylinux1_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 48a45496dab8efdd9b11bcb22741f21bd02de1d5bc266f9acef016e36a90b71c |
|
MD5 | fd2ca20beaa10c7b67ea6e0dafafc9cf |
|
BLAKE2b-256 | 3ec6d8d600815f5c0786c6aa8956540adad155e1fb1e479ddd9bf463c0c8a6b1 |
哈希值 为 pyfastnoisesimd-0.4.2-cp38-cp38-manylinux1_i686.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | af2c33e2805fbd37c0b2fd993fb4d093ec964e1d26f0f0ed7b809147c0c7c42f |
|
MD5 | 2f753db934f04e2daf73682c31ce014d |
|
BLAKE2b-256 | 71dead066ca5e86035d7490e74ac27e501b90b40b2224d755dba1cf0fe11c0e6 |
哈希值 为 pyfastnoisesimd-0.4.2-cp38-cp38-macosx_10_9_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | ee5d384795fe7fec3954dc591d25be4fcccdc05eda66957ee121ce76a62286ee |
|
MD5 | 600e3eac26a6241a29eb1abb1f7e43d8 |
|
BLAKE2b-256 | 68c2433771dea154cdc81f07437465af46f395b223148f40293fda39ca923f1a |
哈希值 为 pyfastnoisesimd-0.4.2-cp37-cp37m-win_amd64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | fc67fef0f521f08540ace77828fcbea7f46275d1b4e9d644daf67094d5dfd98f |
|
MD5 | 17d99eac0060f7008b47a36d06e2a86d |
|
BLAKE2b-256 | b59223033d861122407e6b248e15d1cba4b493076fe3bc36ad49946713a05024 |
哈希值 为 pyfastnoisesimd-0.4.2-cp37-cp37m-manylinux2010_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 6dab9f91e63353f481072f105b70662cde5243fba0597147d30afe1e1813a687 |
|
MD5 | 7952e63ab37c1e0381a892b32ee3ce2b |
|
BLAKE2b-256 | e5cf71ba30dda399cc50e4dfbebc94c097c4c4981e3a177977d65bff06564b84 |
哈希值 为 pyfastnoisesimd-0.4.2-cp37-cp37m-manylinux2010_i686.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | c93c9fd987bc84c4179acc78543561ed76baf581040abf06b61d4c3f44ebc3b6 |
|
MD5 | 5319dc7e475fa95eeaf2fbe6681bbd97 |
|
BLAKE2b-256 | f1275567ec210268c92e21d098f193028c83e8ac3997288afaa9c310b896cf86 |
哈希值 为 pyfastnoisesimd-0.4.2-cp37-cp37m-manylinux1_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 7415175547f9adf1d09416b2bf691847c144304d9407e6c170e9ebec27b46de9 |
|
MD5 | 248e9810101ba3a8077372dafe8f8ab0 |
|
BLAKE2b-256 | 3dcdbae5b35ad644e71082188e7f81d79bcd811efad320e64f574a2c1de251e4 |
哈希值 为 pyfastnoisesimd-0.4.2-cp37-cp37m-manylinux1_i686.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | bbabe06a180c7b07880edb20fe6257a4c3a03207cca453d5a473ba37fa512ab6 |
|
MD5 | b3b9a73e8a54babb57b37fc4904423cb |
|
BLAKE2b-256 | 223dbb909a45ee43186fa7e724ea1cee2dcfa2e4e4ccc7b689a4f7380ae2d85f |
哈希值 为 pyfastnoisesimd-0.4.2-cp37-cp37m-macosx_10_9_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | d4b6945fa65e78da56bd5050c9ccb802c05961e1352808a011e5a21979ff4706 |
|
MD5 | e801a6eeff9782bb374a936c2cef6509 |
|
BLAKE2b-256 | 3db6e823050d013d842a0e8cf5033af8612a39e1c3aa7defc28d63d3c218bd54 |
散列值 for pyfastnoisesimd-0.4.2-cp36-cp36m-win_amd64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | d8540ed0ae93d4cf973b0d2fca04e17c36553ca22a9e419bc8f95b00f8017f0a |
|
MD5 | 4e831350e9957afed4b9b3a3e8b521bd |
|
BLAKE2b-256 | 86e7fab08a004048fe10cae7b9151915b1bc4efa77a13eae7eada733ddcaa202 |
散列值 for pyfastnoisesimd-0.4.2-cp36-cp36m-manylinux2010_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | f8e61fffd5000924d736af04a4075bbf75adb1807d4bfabd920a1b1af824e2c4 |
|
MD5 | 39aab8925b6ae33d7addaacfc1bc0344 |
|
BLAKE2b-256 | 2b85de81bc80265fd77d9423066f4eebe99739579aaa0ad074e894d913cd5f2a |
散列值 for pyfastnoisesimd-0.4.2-cp36-cp36m-manylinux2010_i686.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 141303f25416eaaeadda9891850c45f785c85abba555b9c2dd474e9d61223cbc |
|
MD5 | 45abff330a7d4475f0fbb95b182653c2 |
|
BLAKE2b-256 | 539bed9b0b95eaa3e79959bffa5297c355da1d820317676e1cb196132cc8827c |
散列值 for pyfastnoisesimd-0.4.2-cp36-cp36m-manylinux1_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | d825f2d24b300ffbb0b0557f0a5d9ad6ee996f050830d3a1fcb2e305a09f886a |
|
MD5 | 774a23d7e312888095f10685ede3ebcb |
|
BLAKE2b-256 | fb9462ad2338d05cd0918d2815377aae87515b40c2436854ccd8201ea2895ef3 |
散列值 for pyfastnoisesimd-0.4.2-cp36-cp36m-manylinux1_i686.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | a7949318e50ddd347247cba8535b2b16ee48e75f38affcb336d4e352c35b4b8a |
|
MD5 | 1022816416d0980a44b8999b9eb9b15d |
|
BLAKE2b-256 | 978042a5b04c2274311a38890c28e4604fe2647c783a3a76b58d8d096b18fd28 |
散列值 for pyfastnoisesimd-0.4.2-cp36-cp36m-macosx_10_9_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | c7ffd9cc03a4f8112e82c020524ef21fce94d9d202ba11801962c0a08bc22e6e |
|
MD5 | e0cdc420e14584ad0ebac35c03625228 |
|
BLAKE2b-256 | 71a91641950575cb9a971a1c5ea7256fad592509a76ef1ceb2a0426871f604b2 |