Tag: 模拟

模拟流数据

我正在尝试编写一个程序,它将从平面数据文件中读取并模拟流式传输,这样我就可以测试一个读取流数据的程序,而无需连接和启动流式硬件。 有哪些更现实的方法可以实现这一目标? 我需要它以可变速度流,这取决于我模拟的硬件。 到目前为止,我的两个想法是写入命名管道的程序,或者以我需要的速率写入虚拟串行端口的程序。 是否有更好(更现实)的模拟流数据的方式?

通过线程和SIMD并行化矩阵乘法

我正在尝试加速多核架构上的矩阵乘法。 为此,我尝试同时使用线程和SIMD。 但我的结果并不好。 我通过顺序矩阵乘法测试加速: void sequentialMatMul(void* params) { cout << "SequentialMatMul started."; int i, j, k; for (i = 0; i < N; i++) { for (k = 0; k < N; k++) { for (j = 0; j < N; j++) { X[i][j] += A[i][k] * B[k][j]; } } } cout << "\nSequentialMatMul finished."; […]

计算距离平方的最快方法

我的代码在很大程度上依赖于计算3D空间中两点之间的距离。 为了避免昂贵的平方根,我使用整个平方距离。 但它仍然占用了计算时间的很大一部分,我想用更快的东西替换我的简单函数。 我现在有: double distance_squared(double *a, double *b) { double dx = a[0] – b[0]; double dy = a[1] – b[1]; double dz = a[2] – b[2]; return dx*dx + dy*dy + dz*dz; } 我也尝试使用宏来避免函数调用,但它没有多大帮助。 #define DISTANCE_SQUARED(a, b) ((a)[0]-(b)[0])*((a)[0]-(b)[0]) + ((a)[1]-(b)[1])*((a)[1]-(b)[1]) + ((a)[2]-(b)[2])*((a)[2]-(b)[2]) 我考虑过使用SIMD指令,但找不到一个好的例子或完整的指令列表(理想情况下是一些乘法+加两个向量)。 GPU不是一个选项,因为每个函数调用只知道一组点。 计算距离平方的最快方法是什么?

这个改组算法有什么问题吗?

我一直在做一些休闲度假计算。 我的迷你项目是对意大利“tomboli”游戏的模拟。 一个关键的构建模块是对以下过程的模拟; 游戏由一个男人控制,一袋有90个大理石,编号为1到90.他从包中随机抽出弹珠,每次都给玩家打出大理石编号。 经过一番思考后,我为这个构建块编写了以下代码; // NBR marbles, numbered 1…NBR are in a bag. Simulate randomly // pulling them from the bag, one by one, until the bag is empty void bag( int random_sequence[NBR] ) { int i; // Store each marble as it is pulled out int *store = random_sequence; // Array of marbles […]

C中的函数模拟(用于测试)?

我想在C中编写C库的测试。我想模拟测试的一些函数。 假设我的库是从以下源编译的: /* foo.h */ int myfunction(int x, int y); /* foo.c */ #include “foo.h” static int square(int x) { return x * x; } int myfunction(int x, int y) { return square(x) + square(y); } 我想写一个这样的测试: /* foo_test.c */ #include “foo.h” static int square(int x) { return x + 1; } int main(void) { […]