我一直在尝试让 AVX 正常运行,但无法编译我的 c++ 项目。我对 C++ 和编译很陌生,所以我将 CMake 与 CLion 和 GCC 一起使用。
我知道我的处理器支持 AVX 和 AVX2,我编写了一个简单的测试程序:
#include <immintrin.h>
...
__m256 A{};
__m256 B{};
__m256 AB = _mm256_add_ps(A,B);
for(int i = 0; i < 8; i++){
std::cout << AB[i] << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
遗憾的是,当尝试运行此程序时,我收到以下错误:
warning: AVX vector return without AVX enabled changes the ABI [-Wpsabi]
91 | __m256 AB = _mm256_add_ps(A,B);
| ^
In file included from C:/msys64/mingw64/lib/gcc/x86_64-w64-mingw32/10.1.0/include/immintrin.h:51,
from A:\OneDrive\ProgrammSpeicher\CLionProjects\Koivisto\src_files\main.cpp:85:
C:/msys64/mingw64/lib/gcc/x86_64-w64-mingw32/10.1.0/include/avxintrin.h:147:1: error: inlining failed in call to 'always_inline' '__m256 _mm256_add_ps(__m256, __m256)': …Run Code Online (Sandbox Code Playgroud) 我试图自己实现整洁,使用原始论文但被卡住了。
假设在上一代我有以下物种:
Specie 1: members: 100 avg_score: 100
Specie 2: members: 150 avg_score: 120
Specie 3: members: 300 avg_score: 50
Specie 4: members: 10 avg_score: 110
Run Code Online (Sandbox Code Playgroud)
我现在对下一代的尝试。如下:
将物种的分数设置为物种中每个基因组分数的平均值。
4.1 通过杀死每个物种中最差的 90% 来繁殖。
4.2 选择一个物种,根据他们的分数。
4.3 从那个物种中,选择 2 个基因组并培育一个新的基因组。
我不确定这是否是正确的尝试,尤其是当我“杀死”90% 的基因组时。这个百分比值是我现在随机选择的(这只是概念上的)。
如果一个物种,在杀死后,有 0 个成员。然后就灭绝了吗?
在我给出的例子中,如果我杀死 90%,物种 4 可能会灭绝。
我的尝试是否正确,或者一个物种通常是如何灭绝的?
我一直在使用 Godbolt 编译器并输入以下代码:
constexpr int func(int x)
{
return x > 3 ? x * 2 : (x < -4 ? x - 4 : x / 2);
}
int main(int argc)
{
return func(argc);
}
Run Code Online (Sandbox Code Playgroud)
代码有点简单。这里重要的部分是里面最后除以2 func(int x)。由于 x 是一个整数,基本上任何编译器都会将其简化为移位以避免除法指令。
x86-64 gcc 12.2(对于 Linux,因此 System V ABI)的程序集-O3如下所示:
main:
cmp edi, 3
jle .L2
lea eax, [rdi+rdi]
ret
.L2:
cmp edi, -4
jge .L4
lea eax, [rdi-4]
ret
.L4:
mov eax, edi
mov ecx, 2
cdq
idiv …Run Code Online (Sandbox Code Playgroud) c++ g++ integer-division compiler-optimization constexpr-function
我目前正在开发一个基于 html 的小型项目,其中我在 javascript 中进行了一些长时间运行的计算。我不擅长 javascript,所以我想在这里找到解决方案。基本上我的长时间运行的代码看起来像这样:
let simulation = new Simulation(system,iterations,step_size,callback_fn);
simulation.run();
Run Code Online (Sandbox Code Playgroud)
simulation.run-function 看起来像这样:
run() {
...
for(let i = 0; i < this.steps; i++){
...
this.callback(i+1);
}
}
Run Code Online (Sandbox Code Playgroud)
通常该steps变量约为 100 万。我的计划是添加一个显示进度的进度条。
HTML:
<div class="progress mt-5">
<div id="simulation-progress" class="progress-bar progress-bar-striped progress-bar-animated" role="progressbar" style="width: 0%"></div>
</div>
Run Code Online (Sandbox Code Playgroud)
现在我的计划是使用我正在模拟的回调函数来更新我的进度条:
(async () => {
const iterations = 1000000;
const step_size = 1;
simulation_progress.setAttribute('style', `width:0%`);
setTimeout(function(){
let simulation = new Simulation(
system,
iterations,
step_size,
e => {
if(e % 100000 === 0){
simulation_progress.setAttribute('style', …Run Code Online (Sandbox Code Playgroud)