Tag: vector

gcc优化复合语句

我在c中为通用可resize的向量实现push_back运算符时遇到问题。 对于通用性,我需要使用void指针作为参数,但实际上我想直接给它赋值。 当我使用gcc -ot test.c -std=c99编译下面的代码时,它会按照我的预期打印10 。 当我向编译选项添加-O1 (或更高版本)时,程序将打印0 。 我认为问题在于smemcpy代码,因为当我用memcpy替换它时我不再有这个问题。 简化代码: #include #include #define get_pointer(value) ({ __typeof__(value) tmp = value; &tmp; }) // copy from src to dst byte by byte void* smemcpy(void* dst, void const * src, size_t len) { char * pdst = (char *) dst; char const * psrc = (char […]

如何访问和打印在MPI工作人员中分发的完整向量?

如何从MPI中的单个线程访问全局向量? 我正在使用一个库 – 特别是一个ODE求解器库 – 名为CVODE(SUNDIALS的一部分)。 该库与MPI一起使用,因此多个线程并行运行。 它们都运行相同的代码。 每个线程将一个数据“旁边”发送给它。 但我希望其中一个线程(rank = 0)在某些点打印出数据的状态。 该库包含函数,以便每个线程可以访问自己的数据( 本地向量 )。 但是没有方法可以访问全局向量。 我需要在特定时间输出所有方程的值。 为此,我需要访问全局向量。 任何人都知道如何获取MPI向量中的所有数据(如果可能,使用CVODE)? 例如,这是我的代码,每个线程运行 for (iout=1, tout=T1; iout <= NOUT; iout++, tout += DTOUT) { flag = CVode(cvode_mem, tout, u, &t, CV_NORMAL); if(check_flag(&flag, "CVode", 1, my_pe)) break; if (my_pe == 0) PrintData(t, u); } … static void PrintData(realtype t, […]

在C / openCL中使用矢量元素

我正在pyopenCL中编写一个openCL内核,我想在其中寻址向量元素。 在简单的C中,我想要的结果是: int i = 0; float *vec = (float*)maalloc(sizeof(float)*4); for (i=0;i<4;i++) { vec[i]=2*i; } 在openCL中,矢量的元素以“pythonic”点语法样式访问。 float4 vec = (float4)(0); for (i=0;i<4,i++) { vec.si = 2*i; /*obviously doesn't work*/ } 因此vec[2]在vec.s2中成为vec.s2 ,因此使用变量访问元素不再简单。 但是如何使用变量访问vector元素呢?

numpy数组C api

我有一个C ++函数返回一个std :: vector,我想在python中使用它,所以我使用的是C numpy api: static PyObject * py_integrate(PyObject *self, PyObject *args){ … std::vector integral; cpp_function(integral); // This changes integral npy_intp size = {integral.size()}; PyObject *out = PyArray_SimpleNewFromData(1, &size, NPY_DOUBLE, &(integral[0])); return out; } 这是我从python中调用它的方式: import matplotlib.pyplot as plt a = py_integrate(parameters) print a fig = plt.figure() ax = fig.add_subplot(111) ax.plot(a) print a 会发生什么:第一次打印没问题,值是正确的。 […]